Konvertieren Sie eine Spalte in eine durch Kommas getrennte Liste

129

Ich habe die Aufgabe, eine einfache Excel-Tabelle zu erstellen, die eine nicht festgelegte Anzahl von Zeilen in Spalte A enthält:

1234
123461
123151
11321

Und machen Sie sie zu einer durch Kommas getrennten Liste in einer anderen Zelle, die der Benutzer leicht kopieren und in ein anderes Programm einfügen kann:

1234,123461,123151,11321

Was ist der einfachste Weg, dies zu tun?

Muncherelli
quelle
8
Ein Teil der Lösung könnte Bearbeiten, Inhalte einfügen, Transponieren sein, um die Spalte in eine Zeile zu konvertieren. Wenn das andere Programm Tabulatoren anstelle von Kommas akzeptiert, sind Sie nach dem Kopieren der neuen Zeile fertig.
Arjan
Wie machen Sie das Gegenteil davon? Nehmen Sie eine durch Kommas getrennte Liste und konvertieren Sie sie in eine Inhaltsspalte?
Stevvve
1
Verwenden Sie in der Registerkarte "Daten" die Funktion "Text in Spalten". support.microsoft.com/en-us/kb/214261
Trevor
Ich verwende dafür einen beliebigen Texteditor, der reguläre Ausdrücke unterstützt, wie z. B. Editor ++. Kopieren Sie die Spaltenwerte und fügen Sie sie in den Editor ein. Suchen und ersetzen Sie reguläre Ausdrücke. Suchen Sie "\ r \ n" und ersetzen Sie sie durch ",". Wenn Sie Spalte in CSV konvertieren möchten, finden „“ und ersetzen mit ‚\ r \ n‘
junaling

Antworten:

145

Unter der Annahme, dass Ihre Daten in A1 beginnen, würde ich Folgendes in Spalte B einfügen:

B1:

=A1

B2:

=B1&","&A2

Sie können dann Spalte B2 in die gesamte Spalte einfügen. Die letzte Zelle in Spalte B sollte nun eine durch Kommas getrennte Liste von Spalte A sein.

Sux2Lose
quelle
8
Dies ist ideal für eine begrenzte Anzahl von Zeilen, aber (je nach verfügbarem Speicher?) Wird der Vorgang abgebrochen, wenn Sie mehr als ein paar tausend Zeilen verketten, sodass der Ausgabewert unvollständig bleibt. Achtung.
Samthebrand
Bei Verwendung von Excel 2013 auf einem leistungsstarken Windows 10 Pro-Computer schlug dies nach nur 30-35 Zeilen fehl. Ich brauchte weit über 200. Die Lösung von Michael Joseph funktionierte perfekt.
Trialsman
75
  • Kopieren Sie die Spalte in Excel
  • Öffnen Sie Word
  • "Inhalte einfügen" nur als Text
  • Wählen Sie die Daten in Word aus (die, die Sie in Text konvertieren müssen, getrennt durch ,), drücken Sie Ctrl- H(Suchen & Ersetzen).
  • Geben Sie im Feld "Suchen nach" Folgendes ein ^p
  • Geben Sie in dem Feld "Ersetzen durch" ein ,
  • Wählen Sie "Alle ersetzen"
Michael Joseph
quelle
+1 Entspricht der "offiziellen" Lösung von Microsoft: support.microsoft.com/kb/819964
Neo
sehr süße Lösung ... :-)
Saravanan
Nur pure Magie :)
Sudheej
30

Wenn Sie über Office 365 Excel verfügen, können Sie TEXTJOIN () verwenden:

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

Bildbeschreibung hier eingeben

Scott Craner
quelle
23

Ich habe gerade ein Modul in VBA erstellt, das die ganze Arbeit erledigt. Es nimmt meine Bereichsliste und erstellt eine durch Kommas getrennte Zeichenfolge, die in die Zelle meiner Wahl ausgegeben wird:

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

Also habe ich es einfach in meine Zelle gestellt =csvRange(A:A)und es gibt mir die durch Kommas getrennte Liste.

Muncherelli
quelle
1
Ah .. ziemlich nah an meiner Antwort, aber ich mag Ihre Implementierung.
mpeterson
10

Ein alternativer Ansatz wäre, die Excel-Spalte in dieses Tool im Browser einzufügen:

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

Es konvertiert eine Textspalte in eine durch Kommas getrennte Liste.

Da der Benutzer sowieso kopiert und in ein anderes Programm einfügt, kann dies für ihn genauso einfach sein.

Sonnenuntergang
quelle
7

Sie könnten so etwas tun. Wenn Sie nicht über eine große Tabelle sprechen, würde dies "ok" führen ...

  • Alt-F11, Erstellen eines Makros zum Erstellen der Liste (siehe Code unten)
  • Weisen Sie es der Verknüpfung oder der Symbolleistenschaltfläche zu
  • Der Benutzer fügt seine Zahlenspalte in Spalte A ein, drückt die Taste, und seine Liste wird in Zelle B1 eingefügt.

Hier ist der VBA-Makrocode:

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

Stellen Sie sicher, dass das Format von Zelle B1 auf "Text" eingestellt ist, da sonst eine fehlerhafte Zahl angezeigt wird. Ich bin mir sicher, dass Sie dies auch in VBA tun können, bin mir aber im Moment nicht sicher, wie und muss wieder an die Arbeit gehen. ;)

mpeterson
quelle
7

Verwenden Sie vi oder vim, um einfach ein Komma am Ende jeder Zeile einzufügen:

%s/$/,/

So erklären Sie diesen Befehl:

  • % bedeutet, dass die Aktion (dh Suchen und Ersetzen) für alle Zeilen ausgeführt wird
  • s zeigt Substitution an
  • /trennt die Argumente (dh s/find/replace/options)
  • $ Stellt das Ende einer Zeile dar
  • , ist in diesem Fall der Ersatztext
Atemarbeit
quelle
Einverstanden. Nicht annähernd.
Muncherelli
Stimmen Sie mit Kommentaren wegen des Kontexts nicht überein. Jemand mit einem Superuser-Konto, der hier Beiträge veröffentlicht, ist häufig der Typ, der vim verwendet.
Uniquegeek
Ich benutze aber ViM und finde die Grundidee nützlich. Am Ende habe ich das Problem mithilfe der Idee und eines einfachen Texteditors gelöst.
Nigini
2

Sie können die Anleitung von How-To Geek verwenden, um eine Zeile in eine Spalte umzuwandeln und sie einfach umzukehren. Dann exportieren Sie die Daten als csv (kommagetrenntes Format), und Sie haben Ihre durch Kommas getrennte Klartextliste! Sie können vom Notizblock kopieren und ihn wieder in Excel ablegen, wenn Sie möchten. Wenn Sie nach dem Komma ein Leerzeichen einfügen möchten, können Sie auch eine Such- und Ersetzungsfunktion ausführen und "," durch "," ersetzen. Ich hoffe, das hilft!

Duall
quelle
Der Export in CSV geht über das hinaus, was dieser Benutzer tun kann. Ich brauche es, um innerhalb von Excel zu zeigen und zu klicken.
Muncherelli
2

muncherelli, mir hat deine antwort gefallen und ich habe sie optimiert :). Nur eine Kleinigkeit, manchmal ziehe ich Daten aus einem Blatt und verwende sie zum Abfragen einer Datenbank. Ich habe einen optionalen "textQualify" -Parameter hinzugefügt, mit dessen Hilfe eine kommaseparierte Liste erstellt werden kann, die in einer Abfrage verwendet werden kann.

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
quelle
1

Ich habe das generatecsv () -Unter verbessert, um eine Excel-Tabelle zu verarbeiten, die mehrere Listen mit Leerzeilen enthält, die sowohl die Titel jeder Liste als auch die Listen von ihren Titeln trennen. Beispiel

list title 1

item 1
item 2

list title 2

item 1
item 2

und kombiniert sie natürlich in mehrere Zeilen, 1 pro Liste.

Aus diesem Grund ließ ich mir von einem Kunden mehrere Stichwörter im Listenformat für seine Website senden, basierend auf dem jeweiligen Thema. Er brauchte eine Möglichkeit, um diese Stichwörter einfach auf die Webseiten zu übertragen. Also änderte ich die Routine und fand das Folgende, außerdem änderte ich die Variablennamen in aussagekräftige Namen:

    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 Lamm
quelle
1

Die Antwort von Sux2Lose ist meine bevorzugte Methode, sie funktioniert jedoch nicht, wenn Sie mit mehr als ein paar tausend Zeilen arbeiten, und kann sogar für noch weniger Zeilen unterbrochen werden, wenn auf Ihrem Computer nicht viel Speicher verfügbar ist.

In diesem Fall empfiehlt es sich wahrscheinlich, die Spalte zu kopieren, eine neue Arbeitsmappe zu erstellen, die nicht mehr in A1der neuen Arbeitsmappe enthalten ist, und Transposedie Spalte jetzt als Zeile zu definieren. Speichern Sie dann die Arbeitsmappe als .csv. Ihre CSV ist jetzt im Grunde eine durch Kommas getrennte Liste im Klartext, die Sie in einem Texteditor öffnen können.

Hinweis: Denken Sie daran, die Spalte in eine Zeile zu transponieren, bevor Sie sie als CSV speichern. Andernfalls kann Excel keine Kommas zwischen den Werten einfügen.

samthebrand
quelle
-1

Eine der einfachsten Möglichkeiten ist die Verwendung der Web-App zamazin.co für diese Art von Kommatrennungsaufgaben. Füllen Sie einfach die Spaltendaten aus und klicken Sie auf die Schaltfläche "Konvertieren", um eine durch Kommas getrennte Liste zu erstellen. Sie können auch einige andere Einstellungen verwenden, um die gewünschte Ausgabe zu verbessern.

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

Bildbeschreibung hier eingeben

Hakan
quelle
Dies ist jetzt bei delim.co
Phil
-2

Verwenden Sie =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)für die Zelle, die Sie das Ergebnis anzeigen möchten.

Johnny
quelle
3
Dies ist eine nicht skalierbare manuelle Lösung.
Daniel Hári