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

Aus einer csv mehrere csv erzeugen anhand einer Spalte

Forumthread: Aus einer csv mehrere csv erzeugen anhand einer Spalte

Aus einer csv mehrere csv erzeugen anhand einer Spalte
30.09.2025 12:21:23
Maupard
Hallo,

ich habe ein Problem, das ich meiner Vermutung nach nur mit VBA lösen kann, nicht mit Formeln.

Ich bekomme aus einen Fremdprogramm eine Schülerliste im csv-Format mit drei Spalten: Klasse, Nachname, Vorname

Ich füge diese in Excel ein, sortiere sie nach Klasse, dann nach Nachname und dann nach Vorname, d.h. ich habe dann eine geordnete Liste.

5a; Muster;Max;
5a; Schmidt;Luise;
5b;Bäcker,Laura;
5b;Müller;Marie

(ca 1000 Einträge)

Nun zu meinem Problem:
Ich möchte, dass für jede Klasse ein neue Tabelle in der Mappe erstellt wird und alle Schüler Ihrer Klassenzugehörigkeit nach in die Tabellen kopiert werden. Anschließend soll pro erzeugter Tabelle eine csv gespeichert werden, Dateiname soll der Klassenname also Tabellenname sein.

Ist das mit VBA möglich?

Viele Grüße
Maupard
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus einer csv mehrere csv erzeugen anhand einer Spalte
30.09.2025 13:10:25
Yal
Hallo Maupard,

ja, es geht vermutlich am besten mit VBA, da es einen Zugriff auf einer Datei gibt, die zuerst ausserhalb von Excel liegt.
Ich habe ChatGPT (die Blume mit schwarzen Hintergrund rechts im Kopfbereich dieser Seite) folgende Frage gestellt:
"Ich habe einen csv-Datei, die ich in Excel laden möchte. Dabei soll jede Datensatz in einem Arbeitsblatt zugeordnet werden. Die Zuordnung erfolgt auf Basis der Information in der erste Spalte der Datensatz, was auch der Name des Arbeitsblatts bildet. Wie lautet der VBA-Code, um das zu realisieren?"

und folgende Antwort bekommen (sogar ein bisschen mehr):
Sub ImportCSVNachSheets()

Dim DateiDialog As FileDialog
Dim DateiPfad As String
Dim Zeile As String
Dim FNr As Integer
Dim Werte As Variant
Dim ws As Worksheet
Dim ZielZeile As Long
Dim BlattName As String

' Datei auswählen
Set DateiDialog = Application.FileDialog(msoFileDialogFilePicker)
With DateiDialog
.Title = "Bitte CSV-Datei auswählen"
.Filters.Clear
.Filters.Add "CSV-Dateien", "*.csv"
If .Show > -1 Then Exit Sub
DateiPfad = .SelectedItems(1)
End With
' Datei öffnen
FNr = FreeFile
Open DateiPfad For Input As #FNr

Application.ScreenUpdating = False
' Zeilenweise lesen
Do While Not EOF(FNr)
Line Input #FNr, Zeile
Werte = Split(Zeile, ";") ' Trennzeichen anpassen falls nötig
BlattName = CStr(Werte(0))
' Ungültige Blattnamen bereinigen (könnte weggelassen werden, wenn klar ist, dass solche Zeichen nicht vorkommen)
BlattName = Replace(BlattName, ":", "_")
BlattName = Replace(BlattName, "\", "_")
BlattName = Replace(BlattName, "/", "_")
BlattName = Replace(BlattName, "?", "_")
BlattName = Replace(BlattName, "*", "_")
BlattName = Replace(BlattName, "[", "_")
BlattName = Replace(BlattName, "]", "_")
' Prüfen, ob Blatt existiert
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(BlattName)
On Error GoTo 0

If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = Left(BlattName, 31) ' max. 31 Zeichen
End If
' Erste freie Zeile suchen
ZielZeile = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
' Werte einfügen
ws.Cells(ZielZeile, 1).Resize(1, UBound(Werte) + 1).Value = Werte
Set ws = Nothing
Loop

Close #FNr
Application.ScreenUpdating = True
MsgBox "Import abgeschlossen!", vbInformation
End Sub
Der Code sieht mMn schlüssig aus. Ich habe ihn nicht getestet (müsste dafür 'ne csv aufbauen, und, und, und, ..).
Es behandelt aber nur die erste Teil der Abfrage. Die zweite Teil, speichern der einzelne Blätter als csv, könnte auf die gleiche Art und Weise entstehen.

Wenn direkt von csv zu csv verarbeitet werden sollte, am besten ChatGPT fragen.

VG
Yal

Anzeige
AW: Aus einer csv mehrere csv erzeugen anhand einer Spalte
30.09.2025 14:44:16
RPP63
Moin!
Du möchtest ja die mit Excel geöffnete CSV in die einzelnen Klassen aufteilen und pro Klasse eine Liste als CSV speichern.
Folgender Code ist getestet und funktioniert nur, wenn Dein Excel die Funktion EINDEUTIG() kennt.
Deine dürfte dies beherrschen.
Sub Klasse_zu_CSV()

Dim Klasse, i&
Application.ScreenUpdating = False
With Range("A1").CurrentRegion
.AutoFilter
Klasse = WorksheetFunction.Unique(Range(Cells(2, 1), Cells(2, 1).End(xlDown)))
For i = 1 To UBound(Klasse)
.AutoFilter 1, Klasse(i, 1)
.Copy
Workbooks.Add
ActiveSheet.Paste
With ActiveWorkbook
'Pfad anpassen!
.SaveAs "E:\" & Klasse(i, 1), xlCSVUTF8
.Close
End With
Next
.AutoFilter
End With
End Sub


Gruß Ralf
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