2011-02-02 16:01:08 +0000 2011-02-02 16:01:08 +0000
132
132

Przekształcić kolumnę w listę oddzielonych przecinkami

Mam za zadanie stworzyć prosty arkusz Excela, który zajmuje niesprecyzowaną liczbę wierszy w kolumnie A w następujący sposób:

1234
123461
123151
11321

I zrobić z nich oddzieloną przecinkami listę w innej komórce, którą użytkownik może łatwo skopiować i wkleić do innego programu w taki sposób:

1234,123461,123151,11321

Jaki jest najprostszy sposób, aby to zrobić?

Odpowiedzi (14)

146
146
146
2011-02-02 16:37:59 +0000

Zakładając, że Twoje dane zaczynają się w A1, w kolumnie B umieściłbym:

B1:

=A1

B2:

=B1&","&A2

Następnie można wkleić kolumnę B2 w dół całej kolumny. Ostatnia komórka w kolumnie B powinna być teraz listą oddzielonych przecinkami kolumn A. W ten sposób można wkleić kolumnę B2 w dół całej kolumny.

76
76
76
2012-06-05 05:24:51 +0000
  • Skopiuj kolumnę w programie Excel
  • Otwórz program Word
  • “Wklej specjalny” tylko jako tekst
  • Zaznacz dane w programie Word (te, które musisz przekonwertować na tekst oddzielony znakiem ,), naciśnij Ctrl-H (Znajdź i zamień)
  • W polu “Znajdź co” wpisz ^p
  • W polu “Zamień z” wpisz ,
  • Wybierz “Zamień wszystko”.
34
34
34
2017-01-25 18:05:00 +0000
23
23
23
2011-02-03 14:10:54 +0000

Właściwie to właśnie stworzyłem moduł w VBA, który wykonuje całą pracę. Pobiera on moją listę i tworzy ciąg znaków, który jest wysyłany do wybranej przeze mnie 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 umieściłem po prostu =csvRange(A:A) i to daje mi listę znakowaną przecinkami.

10
10
10
2015-04-22 20:46:58 +0000

Alternatywnym podejściem byłoby wklejenie kolumny Excela do tego narzędzia w przeglądarce: convert.city/column-to comma-separated-list

Konwertuje kolumnę tekstu na oddzieloną przecinkiem listę.

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

7
7
7
2011-02-06 22:53:14 +0000

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

%s/$/,/

Aby wyjaśnić to polecenie:

  • % oznacza wykonanie akcji (tj. znalezienie i zastąpienie) do wszystkich wierszy
  • s oznacza podstawienie
  • / oddziela argumenty (tj. s/find/replace/options)
  • $ oznacza koniec wiersza
  • , jest tekstem zastępującym w tym przypadku
7
7
7
2011-02-02 19:12:57 +0000

Możesz zrobić coś takiego. Jeśli nie mówisz o ogromnym arkuszu kalkulacyjnym to wykonaj ‘ok’…

  • Alt-F11, Stwórz makro do stworzenia listy (patrz kod poniżej)
  • Przypisz go do przycisku skrótu lub paska narzędzi
  • Użytkownik wkleja swoją kolumnę z numerami do kolumny A, naciska przycisk, a jego 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

Upewnij się, że ustawiłeś format komórki B1 na “tekst”, w przeciwnym razie dostaniesz pomylony numer. Jestem pewien, że w VBA też możesz to zrobić, ale nie jestem pewien jak w tej chwili, i muszę wracać do pracy. ;)

2
2
2
2011-04-08 15:54:06 +0000

muncherelli, spodobała mi się twoja odpowiedź, a ja ją poprawiłem :). Tylko drobna rzecz, zdarza się, że wyciągam dane z arkusza i wykorzystuję je do zapytania o bazę danych. Dodałem opcjonalny parametr “textQualify”, który pomaga stworzyć 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
2
2
2
2011-02-02 16:12:16 +0000

Możesz skorzystać z poradnika How-To Geek'a, aby zmienić rząd w kolumnę i po prostu go odwrócić. Następnie wyeksportuj dane w formacie csv (usuniętym z przecinka), a otrzymasz swoją prostą listę oddzieloną przecinkami! Jeśli chcesz, możesz skopiować dane z notatnika i umieścić je z powrotem w formacie Excel. Ponadto, jeśli chcesz miejsce po przecinku, można zrobić funkcję wyszukiwania i zastępowania, zastępując “,” z “, ”. Mam nadzieję, że to pomoże!

1
1
1
2014-10-06 22:56:30 +0000

Sux2Lose’s answer 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ę złamać na jeszcze mniej wierszy, jeśli twój komputer nie ma dużo dostępnej pamięci.

Najlepszą praktyką w tym przypadku jest prawdopodobnie skopiowanie kolumny, stworzenie nowego skoroszytu, w przeszłości specjalnego w A1 nowego skoroszytu i Transpose tak, aby kolumna była teraz wierszem. Następnie należy zapisać skoroszyt jako .csv. Twoje csv jest teraz w zasadzie listą oddzieloną przecinkami, którą możesz otworzyć w edytorze tekstu.

Uwaga: Pamiętaj, aby przenieść kolumnę do wiersza przed zapisaniem jej jako csv. W przeciwnym razie Excel nie będzie wiedział, aby umieścić przecinki pomiędzy wartościami.

1
1
1
2011-09-28 17:23:52 +0000

Ulepszyłem podpunkt generatecsv(), aby obsłużyć arkusz excel, który zawiera 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 wierszy, po jednym na każdą listę.

powód, dla którego klient wysłał mi wiele słów kluczowych w formacie listy dla swojej strony internetowej w oparciu o temat, potrzebował sposobu na łatwe wprowadzenie tych słów kluczowych na strony internetowe. Tak więc zmodyfikowałem rutynę i wymyśliłem co następuje, również zmieniłem 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
0
0
0
2019-11-29 07:33:32 +0000

Zrobiłem to w ten sposób

Usunąłem wszystkie niepotrzebne kolumny i dane, a następnie zapisałem je jako plik .csv, a następnie wymieniłem dodatkowe przecinki i nową linię za pomocą edytora kodu Visual Studio. Hola

-1
-1
-1
2016-11-02 12:45:34 +0000

Jednym z najprostszych sposobów jest użycie aplikacji webowej zamazin.co do tego typu zadań rozdzielania przecinków. Wystarczy wypełnić dane kolumny i nacisnąć przycisk konwersji, aby utworzyć listę oddzielonych przecinkami. Możesz nawet użyć kilku innych ustawień, aby poprawić pożądane wyjście. http://zamazin.co/comma-separator-tool

-2
-2
-2
2011-02-02 16:32:57 +0000

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