Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

CSV auslesen und mehrere neue aus dem Inhalt speichern

Forumthread: CSV auslesen und mehrere neue aus dem Inhalt speichern

CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 09:29:28
Andreas
Guten Morgen,

ich habe eine CSV Datei in der aufgelistet ist, wann, für welchen Kunden, wie lange gearbeitet wurde. Das ganze nach Datum sortiert.

Ziel wäre es, jede Zeile die zB. Kunde A betrifft, in eine neue CSV zu exportieren. Am besten benannt nach dem jeweiligen Kunden.
Und das dann nicht nur für Kunde A, sondern für alle verschiedenen, in der Spalte Kunde aufgeführten, Einträge.
Leerzeilen müssten ignoriert werden.

Beispieldatei habe ich angehängt, allerdings als xlsx weil csv nicht erlaubt ist. Die leeren Spalten dazwischen sind generell befüllt, und sollen auch mitausgegeben werden.

https://www.herber.de/bbs/user/180259.xlsx

Würde mich über eure Hilfe sehr freuen.
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 10:44:18
schauan
Hallöchen,

dafür brauchst Du eigentlich kein Excel, man kann das auch per Script oder Batch realisieren.
https://www.bing.com/search?q=batch%20text%20datei%20einlesen%20jede%20zeile%20einzeln%20in%20neue%20textdatei%20speichern&qs=n&form=QBRE&sp=-1&lq=0&pq=batch%20text%20datei%20einlesen%20jede%20zeile%20einzeln%20in%20neue%20textdatei%20speichern&sc=7-72&sk=&cvid=F0D6C816B05A4536BAAEABB5D05295AF

@echo off

setlocal enabledelayedexpansion

:: Eingabedatei festlegen
set "inputfile=input.txt"

:: Prüfen, ob Datei existiert
if not exist "%inputfile%" (
echo Fehler: Datei "%inputfile%" nicht gefunden.
pause
exit /b 1
)

set /a counter=1

:: Datei zeilenweise einlesen
for /f "usebackq delims=" %%A in ("%inputfile%") do (
set "line=%%A"
:: Leere Zeilen optional überspringen
if defined line (
echo !line! > "line!counter!.txt"
echo Zeile !counter! gespeichert in line!counter!.txt
set /a counter+=1
)
)

echo Fertig! %counter%-1 Dateien erstellt.
pause


Das ist jetzt zwar nicht das Endprodukt, aber die KI - oder z.B. administrator.de - können Dir da auch weiterhelfen ;-) Eigentlich muss vom Ablauf her nur der Dateiname in Anbhängigkeit vom Inhalt umprogrammiert werden - hier wird die Zeilennummer verwendet.
Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 12:17:32
daniel
Hi
wie viele Kunden hast du denn?
wie gut kennst du dich mit VBA aus?

wenn es ohne VBA oder Skript sein soll, gehe so vor:
1. lege ein neues Tabellenblatt an
2. füge in das Tabellenblatt Zelle A1 diese Formel ein:
=VSTAPELN(Report!1.:.1;FILTER(Report!A.:.I;Report!E.:.E=TEXTNACH(ZELLE("dateiname");"]")))

3. kopiere jetzt dieses Blatt für jeden Kunden und verwende als Tabellenblattnamen den Kundennamen aus Spalte E des Reports
sobald du den Kundennamen eingetragen hast, zeigt dir die Formel die Daten dieses Kunden.

aktiviere jetzt nacheinander die Blätter und speichere die Datei als CSV.
gespeichert wird das aktive Blatt.
Gruß Daniel

Anzeige
PQ Musterlösung: csv-Dateien lesen
10.02.2026 12:59:53
Yal
Hallo Andreas,

anbei eine Lösung mit Power Query die gewählte CSV aus einem Verzeichnis zusammenfasst. Mit dem Datenschnitt lässt sich die entsprechende Kunden filtern und einzeln in einem CSV herausgeben.
Warum eine solche Lösung? Du musst in der Lage sein, zu prüfen, ob alle Daten verarbeitet worden sind. Spricht, es müssen alle Daten geladen und Summen gebildet werden.

Vorgehensweise:
- auf dem Blatt "Dateien" fügst Du in der Zelle B2 den Pfad des Quellverzeichnis,
- auf der Tabelle direkt unten rechtsklicken und "aktualisieren"
- in der Spalte "Auswahl" einen "x" für jede Datei setzen, der geladen werden sollte. "x" oder irgendwas, Hauptsache nicht leer.
- auf der Pivottable im Blatt "Prüfung" rechtsklicken und "aktualisieren"
- mit dem Pivot rumspielen, um die Daten zu bewerten.
- auf dem Blatt "Einzel", auf der Tabelle rechtsklicken und "aktualisieren"
- mit dem Datenschnitt in Spalte B den passende Kunde auswählen und das Blatt als CSV speichern.
Der letzte Punkt lässt sich leicht per Makrorekorder automatisieren.

https://www.herber.de/bbs/user/180260.xlsx

Viel Spass damit

VG
Yal
Anzeige
wenn es mit VBA sein muss...
10.02.2026 13:52:54
Yal
Hallo Andreas,

da es zurzeit wenige "interessante" Fragen gibt, anbei eine Lösung per VBA:

'unter Anbindung einer Bibliothek: Menü "Extras", "Verweise..", haken bei

'Microsoft Scripting Runtime

Dim FSO As FileSystemObject 'siehe Bibliothek
Dim KundenDateien As Dictionary 'siehe Bibliothek

Const zQuellPfad = "C:\temp\H_Forum\PQ csv laden"
Const zZielPfad = "C:\temp\H_Forum\PQ csv laden\Ausgabe"

Sub Dateien_lesen()
Dim F As File

Set KundenDateien = New Dictionary
Set FSO = New FileSystemObject
For Each F In FSO.GetFolder(zQuellPfad).Files
If LCase(Right(F.Name, 4)) = ".csv" Then Datei_verarbeiten Split(F.OpenAsTextStream.ReadAll, vbCrLf)
Next
End Sub

Sub Datei_verarbeiten(Inhalt)
Dim Li
Dim Kunde As String

For Each Li In Inhalt
If InStr(1, Li, ";") Then
If Right(Split(Li, ";")(0), 5) > "Datum" Then
Kunde = zZielPfad & "\" & Split(Li, ";")(4) & ".csv"
If Not KundenDateien.Exists(Kunde) Then
KundenDateien.Add Kunde, Kunde
FSO.CreateTextFile Kunde
End If
FSO.GetFile(Kunde).OpenAsTextStream(ForAppending).WriteLine Li
End If
End If
Next
End Sub


Jedoch, wie schauan es zurecht vorschlägt, könntest Du mit Batch-Verarbeitung dieselbe Ergebnis ohne VBA (muss als xlsm-Datei gespeichert) erzielen. Ich habe ChatGPT gechallenged, um eine Powershell-Lösung zu bekommen. Anstatt hier das Ergebnis zu kopieren, der Weg dazu:
- klick auf die ChatGPT-Blume (hier oben rechts)
- Prompt eingeben:
welche powershell Skript kann ich verwenden, um jede Zeilen aus mehrere csv Dateien in je eine separaten csv Datei zu kopieren. Die Zieldatei wird anhand der Inhalt der fünften Spalte der Quelle ermittelt.

Viel Erfolg
VG
Yal
Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 13:10:37
Edi
Hallo Andreas

Meine vba-Kenntnisse sind nur rudimentär.
Aber ich hab da mal eine vba-Lösung gebastelt. Sicher gibt es elegantere Möglichkeiten, aber diese sollte funktionieren.
Aus Deiner csv Datei musst du dann eine xlsm machen. Meines Wissens kann man keine Markros aus csv ausführen.
Oder du erstellst eine separate Datei die nur das Makro enthält.

Ich hab da jetzt auch kein Fehlermanagement eingebaut.
z.B. wird nicht überprüft, ob eine Kundendatei schon existiert.
Leere Zellen in der Spalte Kunde werden übersprungen. Diese Zellen müssen dann wirklich leer sein.
In Deiner Datei befindet sich z.B. in E5 ein Leerzeichen, was dann zu einem Fehler führt.

Probiers aus, vielleicht hilft dir das schon weiter.

Sub export()

Dim i As Integer
Dim zq As Integer 'Zeile Quelle
Dim zz As Integer 'Zeile Ziel
Dim intLetzteZeile As Integer
Dim strPfad As String
Dim strName As String

intLetzteZeile = Cells(1048576, 5).End(xlUp).Row
strPfad = ActiveWorkbook.Path
Sheets.Add
ActiveSheet.Name = "csv"
Worksheets("Report").Activate

For i = 2 To intLetzteZeile
If Cells(i, 5).Value = "" Then
Else
strName = Cells(i, 5).Value
Set a = Range(Cells(1, 5), Cells(i - 1, 5)).Find(What:=strName, LookIn:=xlValues, LookAt:=xlWhole)
If a Is Nothing Then
zz = 1
Worksheets("csv").Cells.Clear
Range(Cells(1, 1), Cells(1, 9)).Copy
Worksheets("csv").Cells(1, 1).PasteSpecial
For zq = i To intLetzteZeile
If Cells(zq, 5).Value = strName Then
Range(Cells(zq, 1), Cells(zq, 9)).Copy
Worksheets("csv").Cells(zz, 1).PasteSpecial
zz = zz + 1
End If
Next zq
Worksheets("csv").Copy
ActiveWorkbook.SaveAs Filename:=strPfad & "\" & strName & ".csv", FileFormat:=xlCSVUTF8
ActiveWindow.Close savechanges:=False
End If
End If
Next i
Application.DisplayAlerts = False
Worksheets("csv").Delete
Application.DisplayAlerts = True
End Sub
Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 15:34:42
snb
Mein Vorschlag
NB Ich unsterstelle die Kundennamen in Spalte 4

Sub M_snb()

With CreateObject("scripting.filesystemobject")
sn = Filter(Split(.opentextfile("D:\Downloads\Kunden.csv").readall, vbCrLf), "-")

Do Until UBound(sn) = -1
c00 = Split(sn(0), ";")(4)
.createtextfile("D:\" & c00 & ".csv").write Join(Filter(sn, ";" & c00 & ";"), vbCrLf)
sn = Filter(sn, c00, 0)
Loop
End With
End Sub

Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 18:16:49
Andreas
Ich habe die für mich passende Lösung gefunden, ganz großes Dankeschön an alle, die sich an der Lösungsfindung beteiligt haben!
AW: Meinst du das...
10.02.2026 13:56:05
Andreas
Servus,

ja das wär genauso wie ich es benötige, dankeschön!!
Allerdings klappts nur mit der Daten.csv die du mitgeschickt hast, mit meiner Originalen, wo ich aber nur die Kundennamen geändert und den Inhalt der irrelevanten Spalten gelöscht habe, bricht er ab.

Gibts einen Parameter auf den ich achten muss?

Danke, LG
Anzeige
AW: Meinst du das...
10.02.2026 14:23:21
Andreas
Ich hab jetzt gefunden worans lag, zum einen weil eine Zelle im Bereich Kunde nur ein Leerzeichen enthielt, ansonsten aber leer war, bei einer anderen beginnt der Name mit einem *.

Wenn das noch gelöste werden könnte wärs perfekt?

Danke für die Bemühungen!

LG
Wenn Leerzeichen...
10.02.2026 14:28:47
Case
Moin, :-)

... in Zellen vorkommen können, dann kannst du auch so schreiben: ;-)

If Trim(wksSheetIn.Cells(lngCount, "E").Value) > "" Then

Servus
Case
Anzeige
Ich habe nur die...
10.02.2026 14:23:58
Case
Moin, :-)

... Daten aus deiner XLSX mit den Spalten aufgefüllt (du hast ja geschrieben: "Die leeren Spalten dazwischen sind generell befüllt, und sollen auch mitausgegeben werden") und als CSV gespeichert. Am einfachsten stellst du uns eine CSV zur Verfügung die anonymisiert ist, aber sonst dem Aufbau entspricht. Du kannst sie vor dem hochladen in .txt umbenennen, oder zippen. ;-)

Servus
Case
Anzeige
Kunden in anderen Spalte
10.02.2026 14:30:20
Yal
Hallo Andreas,

es liegt daran, dass der Code darauf gerichtet ist, den Kundenname in Spalte E zu lesen:
If wksSheetIn.Cells(lngCount, "E").Value > "" Then

objDict(wksSheetIn.Cells(lngCount, "E").Value) = 1

aber auch beim Filtern, bei dem die Spalte nicht als "E" sondern als "Field:=5" vorkommt:
wksSheetIn.Range("A1:I" & lngLastRow).AutoFilter Field:=5, Criteria1:=varKey


Wenn Du die Quelle so umgestellt hast, dass die Kunden jetzt in eine andere Spalte vorkommen, musst Du diese beiden Parameter anpassen.

VG
Yal
Anzeige
AW: Ich habe nur die...
10.02.2026 14:27:38
Andreas
Ich hab inzwischen gefunden worans lag, zum einen weil eine Zelle im Bereich Kunde nur ein Leerzeichen enthielt, ansonsten aber leer war, bei einer anderen beginnt der Name mit einem *.

Wenn das noch gelöste werden könnte wärs perfekt? Und ich eventuell noch ein Standardverzeichnis für das Öffnen der CSV hinterlegen könnte, aber das wär echt nur mehr Bonus. :)

Danke für die Bemühungen!

LG
Anzeige
Wenn es nur um das...
10.02.2026 14:42:09
Case
Moin, :-)

... Sternchen (*) geht, kannst du auch so schreiben: ;-)

wkbBookOut.SaveAs strSavePath & Replace(varKey, "*", "") & ".csv", FileFormat:=xlCSV, Local:=True

Können es noch mehr Sonderzeichen sein, müsste man anpassen. ;-)

Servus
Case
Anzeige
Standardverzeichenis -...
10.02.2026 14:48:38
Case
Moin, :-)

... schreibe statt: ;-)

ChDir ThisWorkbook.Path

So (und da dann dein Verzeichnis): ;-)
ChDir "C:\Temp\"

Servus
Case
AW: Standardverzeichenis -...
10.02.2026 15:44:40
Andreas
Perfekt, alles läuft genau wie gewünscht!!

Ganz großes Dankeschön, einfach unglaublich wie schnell diese, meines Erachtens doch sehr komplexe Aufgabe, gelöst wurde!
Anzeige
AW: Standardverzeichenis -...
10.02.2026 16:30:21
daniel
wie wäre es, wenn du dich auch mal bei den anderen Helfern bedanken würdest?
ich fühle mich von dir ignoriert und missachtet.
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 12:41:33
Andreas
Wenns als VBA gehen würde, wärs mir generell am allerliebsten.
Dann könnt ichs per mausklick aufrufen, die Reportdatei auswählen und das Skript läuft durch, das wär perfekt. Aber ich weiß nicht ob sich das so lösen lässt?

Es sind so 30 - 40 Kunden.

Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 13:46:42
daniel
Hi
mal als Makro
lass von den Fehlern nicht abhalten, die verschwinden im Betrieb wenn die Listen korrekt gefüllt werden.
im Makro wählst du zuerst die CSV-Datei aus.
deren Inhalte werden in die Mappe kopiert und dann werden daraus die CSVs erstellt und im Verzeichnis der Ausgangs-CSV gespeichert.
https://www.herber.de/bbs/user/180262.xlsm
Gruß Daniel

Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 10:51:38
schauan
KI:

Hier ist die angepasste Version, bei der der Dateiname nur bis zum ersten Komma aus der Zeile genommen wird.
Der Rest der Zeile bleibt im Dateiinhalt erhalten. (Anm.: die ganze Zeile)

https://www.bing.com/search?q=batch%20text%20datei%20einlesen%20jede%20zeile%20einzeln%20in%20neue%20textdatei%20speichern&qs=n&form=QBRE&sp=-1&lq=0&pq=batch%20text%20datei%20einlesen%20jede%20zeile%20einzeln%20in%20neue%20textdatei%20speichern&sc=7-72&sk=&cvid=F0D6C816B05A4536BAAEABB5D05295AF

@echo off

setlocal enabledelayedexpansion

:: Eingabedatei festlegen
set "inputfile=input.txt"

:: Prüfen, ob Datei existiert
if not exist "%inputfile%" (
echo [FEHLER] Datei "%inputfile%" nicht gefunden.
pause
exit /b 1
)

set /a counter=1

:: Datei zeilenweise einlesen
for /f "usebackq delims=" %%A in ("%inputfile%") do (
set "line=%%A"

:: Falls auch leere Zeilen gespeichert werden sollen, diese Abfrage entfernen
if defined line (
:: Dateiname = Teil vor erstem Komma
for /f "tokens=1 delims=," %%B in ("!line!") do (
set "filename=%%B"
)

:: Ungültige Zeichen aus Dateinamen entfernen
set "filename=!filename:\=!"
set "filename=!filename:/=!"
set "filename=!filename::=!"
set "filename=!filename:*==!"
set "filename=!filename:?==!"
set "filename=!filename:"=!"
set "filename=!filename:=!"
set "filename=!filename:>=!"
set "filename=!filename:|=!"

:: Falls der Dateiname nach Filterung leer ist, Ersatzname verwenden
if "!filename!"=="" set "filename=Zeile_!counter!"

:: Datei erstellen (komplette Zeile als Inhalt)
>"!filename!.txt" echo(!line!
echo [INFO] Zeile !counter! gespeichert in "!filename!.txt"

set /a counter+=1
)
)

echo [FERTIG] !counter!-1 Dateien erstellt.
pause
Anzeige
AW: CSV auslesen und mehrere neue aus dem Inhalt speichern
10.02.2026 11:45:08
Andreas
Ich glaub das funktioniert so nicht, ich möchte nicht jede Zeile in eine einzelne Datei gespeichert haben.

Jeder Kunde kommt in der Datei öfter vor. Es soll pro Kunde eine Datei angelegt werden, in der alle Einträge aus dieser CSV dann abgelegt sind.
Also wenn für den Kunden 8x etwas gemacht wurden, dann sollen diese 8 Einträge in einer neuen CSV gespeichert werden.

Aber danke für deine Mühe schonmal.
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18