Konwertuj kolumnę na listę rozdzielaną przecinkami

129

Mam zadanie utworzenia prostego arkusza programu Excel, który pobierze nieokreśloną liczbę wierszy w kolumnie A w następujący sposób:

1234
123461
123151
11321

I przekształć je w listę oddzieloną przecinkami w innej komórce, którą użytkownik może łatwo skopiować i wkleić do innego programu w następujący sposób:

1234,123461,123151,11321

Jak najłatwiej to zrobić?

Muncherelli
źródło
8
Częścią rozwiązania może być Edycja, Wklej specjalnie, Transpozycja, aby przekonwertować kolumnę na wiersz. Jeśli inny program akceptuje tabulatory zamiast przecinków, wszystko jest gotowe po skopiowaniu nowego wiersza.
Arjan
Jak robisz coś przeciwnego? Czy wziąć listę oddzieloną przecinkami i przekonwertować na kolumnę treści?
stevvve
1
@stevvve użyj funkcji Tekst na kolumny na karcie danych. support.microsoft.com/en-us/kb/214261
Trevor
Używam do tego dowolnego edytora tekstowego z obsługą wyrażeń regularnych, takiego jak notepad ++. Skopiuj wartości kolumn i wklej je w edytorze, wyszukaj i zamień wyrażenie regularne, znajdź „\ r \ n” zamień na „,”. Jeśli chcesz przekonwertować CSV do kolumny, znajdź „” i zastąpić «\ r \ n»
junaling

Odpowiedzi:

145

Zakładając, że Twoje dane zaczynają się od A1, wstawiłbym następującą kolumnę B:

B1:

=A1

B2:

=B1&","&A2

Następnie możesz wkleić kolumnę B2 w dół całej kolumny. Ostatnia komórka w kolumnie B powinna być teraz oddzieloną przecinkami listą kolumny A.

Sux2Lose
źródło
8
Jest to świetne dla ograniczonej liczby wierszy, ale (w zależności od dostępnej pamięci?) Proces zostanie skrócony, jeśli łączysz więcej niż kilka tysięcy wierszy, pozostawiając twoją wartość wyjściową niekompletną. Bądź ostrożny.
samthebrand
W programie Excel 2013 na potężnym komputerze z systemem Windows 10 Pro nie udało się to po zaledwie 30-35 wierszach. Potrzebowałem ponad 200. Rozwiązanie Michaela Josepha działało idealnie.
Trialsman,
75
  • Skopiuj kolumnę w programie Excel
  • Otwórz słowo
  • „Wklej specjalnie” tylko jako tekst
  • Wybierz dane w programie Word (te, które musisz przekonwertować na tekst oddzielony ,), naciśnij Ctrl- H(Znajdź i zamień)
  • W polu „Znajdź co” wpisz ^p
  • W polu „Zamień na” wpisz ,
  • Wybierz „Zamień wszystko”
Michael Joseph
źródło
+1 To samo, co „oficjalne” rozwiązanie firmy Microsoft: support.microsoft.com/kb/819964
Neo
bardzo urocze rozwiązanie ... :-)
Saravanan
po prostu czysta magia :)
Sudheej
30

Jeśli masz Office 365 Excel, możesz użyć TEXTJOIN ():

=TEXTJOIN(",",TRUE,A:A)

wprowadź opis zdjęcia tutaj

Scott Craner
źródło
23

Właśnie utworzyłem moduł w VBA, który wykonuje całą pracę. Pobiera moją listę odległości i tworzy ciąg rozdzielany przecinkami, który jest wyprowadzany do wybranej komórki:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

Więc w mojej komórce właśnie wstawiłem =csvRange(A:A)i daje mi listę rozdzielaną przecinkami.

Muncherelli
źródło
1
Ach ... całkiem blisko mojej odpowiedzi, ale podoba mi się twoja implementacja.
mpeterson
10

Alternatywnym podejściem byłoby wklejenie kolumny Excela do tego narzędzia w przeglądarce:

convert.town/column-to-comma-separated-list

Konwertuje kolumnę tekstu na listę oddzieloną przecinkami.

Ponieważ użytkownik mimo to kopiuje i wkleja do innego programu, może to być dla nich równie łatwe.

zachód słońca
źródło
7

Możesz zrobić coś takiego. Jeśli nie mówisz o dużym arkuszu kalkulacyjnym, wykona to „ok” ...

  • Alt-F11, Utwórz makro, aby utworzyć listę (patrz kod poniżej)
  • Przypisz go do przycisku skrótu lub paska narzędzi
  • Użytkownik wkleja kolumnę liczb do kolumny A, naciska przycisk, a lista przechodzi do komórki B1.

Oto kod makra VBA:

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

Pamiętaj, aby ustawić format komórki B1 na „tekst”, inaczej dostaniesz pomieszaną liczbę. Jestem pewien, że możesz to zrobić również w VBA, ale nie jestem pewien, jak w tej chwili i muszę wrócić do pracy. ;)

mpeterson
źródło
7

Użyj vi lub vim, aby po prostu umieścić przecinek na końcu każdej linii:

%s/$/,/

Aby wyjaśnić to polecenie:

  • % oznacza wykonaj akcję (tj. znajdź i zamień) dla wszystkich linii
  • s wskazuje na podstawienie
  • /oddziela argumenty (tj. s/find/replace/options)
  • $ reprezentuje koniec linii
  • , to tekst zastępczy w tym przypadku
Oddech
źródło
Zgoda. Nawet nie blisko.
Muncherelli
Nie zgadzaj się z komentarzami z powodu kontekstu. Ktoś z kontem superużytkownika, który tutaj zamieszcza, jest często typem używającym vima.
uniquegeek
Używam jednak ViM i uważam, że podstawowy pomysł jest przydatny. Rozwiązałem problem, korzystając z pomysłu i prostego edytora tekstu.
Nigini
2

Przydałby się przewodnik How-To Geek na temat przekształcania wiersza w kolumnę i odwracania go. Następnie wyeksportuj dane jako plik csv (format rozdzielany przecinkami), a otrzymasz listę tekstową oddzieloną przecinkami! Możesz skopiować z notatnika i ponownie umieścić go w programie Excel, jeśli chcesz. Ponadto, jeśli chcesz wstawić spację po przecinku, możesz wykonać funkcję wyszukiwania i zamiany, zastępując „,” na „,”. Mam nadzieję, że to pomaga!

Duall
źródło
Eksport do CSV wykracza poza to, co może zrobić ten użytkownik. Potrzebuję go wskazywać i klikać w programie Excel.
Muncherelli
2

Muncherelli, podobała mi się twoja odpowiedź i poprawiłem ją :). Drobna rzecz, czasami pobieram dane z arkusza i używam go do przeszukiwania bazy danych. Dodałem opcjonalny parametr „textQualify”, który pomaga utworzyć listę oddzieloną przecinkami, którą można wykorzystać w zapytaniu.

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function
mitch
źródło
1

Ulepszyłem sub generatecsv () do obsługi arkusza programu Excel zawierającego wiele list z pustymi liniami oddzielającymi zarówno tytuły każdej listy, jak i listy od ich tytułów. przykład

list title 1

item 1
item 2

list title 2

item 1
item 2

i łączy je oczywiście w wiele rzędów, po 1 na listę.

z tego powodu, że klient przesłał mi wiele słów kluczowych w formacie listy dla swojej witryny internetowej w oparciu o tematykę, potrzebowałem sposobu na łatwe wprowadzenie tych słów kluczowych na strony internetowe. Zmodyfikowałem więc procedurę i wymyśliłem następujące, zmieniłem też nazwy zmiennych na znaczące:

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub
roger lamb
źródło
1

Odpowiedź Sux2Lose jest moją preferowaną metodą, ale nie działa, jeśli masz do czynienia z więcej niż kilkoma tysiącami wierszy, i może się popsuć dla jeszcze mniejszej liczby wierszy, jeśli twój komputer nie ma dużo dostępnej pamięci.

Najlepszą praktyką w tym przypadku jest prawdopodobnie skopiowanie kolumny, utworzenie nowego skoroszytu, wcześniejszej specjalnej A1wersji nowego skoroszytu, Transposetak aby kolumna była teraz wierszem. Następnie zapisz skoroszyt jako .csv. Twój plik csv jest teraz w zasadzie listą tekstową oddzieloną przecinkami, którą możesz otworzyć w edytorze tekstu.

Uwaga: pamiętaj o przeniesieniu kolumny do wiersza przed zapisaniem jako csv. W przeciwnym razie Excel nie będzie wiedział, jak wstawiać przecinki między wartościami.

samthebrand
źródło
-1

Jednym z najprostszych sposobów jest użycie aplikacji internetowej zamazin.co do tego rodzaju zadań oddzielania przecinków. Wystarczy wypełnić dane kolumny i nacisnąć przycisk konwersji, aby utworzyć listę oddzieloną przecinkami. Możesz nawet użyć innych ustawień, aby poprawić pożądaną wydajność.

http://zamazin.co/comma-separator-tool

wprowadź opis zdjęcia tutaj

Hakan
źródło
To jest teraz na delim.co
Phil
-2

Użyj =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)w komórce, w której chcesz wyświetlić wynik.

Jasio
źródło
3
Jest to nieskalowane ręczne rozwiązanie.
Daniel Hári,