webentwicklung-frage-antwort-db.com.de

Konvertieren Sie eine Spalte in eine durch Kommas getrennte Liste

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?

119
muncherelli

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 in meiner Zelle einfach =csvRange(A:A) abgelegt und er gibt mir die durch Kommas getrennte Liste.

22
muncherelli

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.

140
Sux2Lose
  • 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 mit , getrennten Text konvertieren müssen), und drücken Sie Ctrl-H (Ersatz finden)
  • Geben Sie in das Feld "Suchen nach" Folgendes ein: ^p
  • Geben Sie in das Feld "Ersetzen durch" Folgendes ein: ,
  • Wählen Sie "Alle ersetzen"
74
Michael Joseph

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

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

 enter image description here

27
Scott Craner

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.

10
sunset

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, aber ich bin mir im Moment nicht sicher, wie und muss wieder an die Arbeit gehen. ;)

7
mpeterson

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 (d. h. Suchen und Ersetzen) für alle Zeilen ausgeführt wird
  • s zeigt Substitution an
  • / trennt die Argumente (d. h. s/find/replace/options)
  • $ steht für das Ende einer Zeile
  • , ist in diesem Fall der Ersatztext
6
Breathwork

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
2
mitch

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 von Notepad kopieren und es 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. Hoffentlich hilft das!

2
Duall

Ich habe das generatecsv () -Unter verbessert, um eine Excel-Tabelle zu verarbeiten, die mehrere Listen mit Leerzeilen enthält, die sowohl die Titel der einzelnen Listen 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 Keywords im Listenformat für seine Website senden, basierend auf dem jeweiligen Thema. Er brauchte eine Möglichkeit, um diese Keywords 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
1
roger lamb

Sux2Loses Antwort ist meine bevorzugte Methode, aber sie funktioniert nicht, wenn Sie mit mehr als ein paar tausend Zeilen arbeiten, und kann sogar für noch weniger Zeilen unterbrochen werden, wenn Ihr Computer nicht über viel verfügbaren Speicher verfügt.

In diesem Fall empfiehlt es sich wahrscheinlich, die Spalte zu kopieren, eine neue Arbeitsmappe zu erstellen, die im A1 der neuen Arbeitsmappe und in Transpose enthalten ist, sodass die Spalte jetzt eine Zeile ist. Speichern Sie dann die Arbeitsmappe als .csv. Ihre CSV ist jetzt im Grunde genommen eine durch Kommas getrennte Klartextliste, die Sie in einem Texteditor öffnen können.

Hinweis: Denken Sie daran, die Spalte vor dem Speichern als CSV in eine Zeile zu transponieren. Andernfalls kann Excel keine Kommas zwischen die Werte setzen.

1
samthebrand