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?
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.
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.
,
getrennten Text konvertieren müssen), und drücken Sie Ctrl-H (Ersatz finden)^p
,
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.
Sie könnten so etwas tun. Wenn Sie nicht über eine große Tabelle sprechen, würde dies "ok" führen ...
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. ;)
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 wirds
zeigt Substitution an/
trennt die Argumente (d. h. s/find/replace/options
)$
steht für das Ende einer Zeile,
ist in diesem Fall der Ersatztextmuncherelli, 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
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!
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
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.