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ć?


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.


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”

+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


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.


1
Ach ... całkiem blisko mojej odpowiedzi, ale podoba mi się twoja implementacja.
— mpeterson


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. ;)


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

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!


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

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

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.


-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


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.


3
Jest to nieskalowane ręczne rozwiązanie.
— Daniel Hári,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.