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

Forumthread: csv Datei alle 65000 Zeilen teilen

csv Datei alle 65000 Zeilen teilen
29.09.2006 16:26:50
M.
Hallo!
Ich habe vor einiger Zeit mal diesen Code bekommen. Der funktionierte auch ganz gut. Jetzt nach einiger Zeit brauchte ich den Code mal wieder und ich bekomme ihn es jetzt nicht mehr so richtig auf die reihe.
Mit dem Code möchte ich eine csv-Datei mit ca. 135000 Zeilen in mehrere Dateien mit max 65000 zeilen (um mit excel zu bearbeiten) teilen lassen.
(Spalten anzahl ca. 15)
Kann es auch daran liegen das die Datei zu groß ist?
======================

Sub Aufteilen()
Dim liZeile As Long, lstrDatName As String, lstrZeile As String, liZeiger As Integer
liZeiger = 1
liZeile = 1
lstrDatName = "XXXXX" & liZeiger & ".csv"
'für "c:\csv-datei.txt" musst Du DEN Speicherpfad und Dateinamen Deiner CSV-Datei eintragen
Open "C:\Dokumente und Einstellungen\Desktop\XXXXX.csv" For Input As #1
'wenn die Teildateien nicht auf "C:\" gespeichert werden sollen, dann musst Du den entprechenden Pfad eintragen
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Append As #2
Do While Not EOF(1)
Line Input #1, lstrZeile
If liZeile <= 65000 Then
Print #2, lstrZeile
liZeile = liZeile + 1
Else
Close #2
liZeile = 1
liZeiger = liZeiger + 1
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Append As #2
Print #2, lstrZeile
liZeile = liZeile + 1
End If
Loop
Close
End Sub

============================
mfg Martin
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
29.09.2006 19:03:27
Erich
Hallo Martin,
der Code ist zwar wohl nicht optimal, aber er müsste funzen.
Was meinst du mit "bekomme ihn es jetzt nicht mehr so richtig auf die reihe"?
Gibt es eine Fehlermeldung? In welcher Codezeile bleibt das Makro hängen?
Stimmen Pfade und Dateinamen?
Ich habe den Code etwas verkürzt, aber das hat wohl keinen Einfluss auf den Fehler:
Sub Aufteilen2()
Dim liZeile As Long, lstrDatName As String, lstrZeile As String, liZeiger As Integer
'für "c:\csv-datei.txt" musst Du Speicherpfad und Dateinamen Deiner CSV-Datei eintragen
Open "C:\Dokumente und Einstellungen\Desktop\XXXXX.csv" For Input As #1
'wenn die Teildateien nicht auf "C:\" gespeichert werden sollen,
'dann musst Du den entprechenden Pfad eintragen
liZeiger = 1
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Output As #2
Do While Not EOF(1)
Line Input #1, lstrZeile
If liZeile >= 65000 Then
Close #2
liZeiger = liZeiger + 1
liZeile = 0
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Output As #2
End If
Print #2, lstrZeile
liZeile = liZeile + 1
Loop
Close
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 06:42:47
Martin
Hi! Danke erst mal!
Der Code macht einfach nichts! Der PC scheint zu arbeiten, und er erstellt auch eine neue Datei, aber die ist immer leer! Der PC arbeitet Stundenlang und nichts passiert.
Ich habe es mal mit einer kürzeren Datei probiert, und da klappt es. Ich Brauche aber die Datei. Mehr als 65xxx Zeilen kann man ja mit excel nicht öffnen.
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 06:45:43
Martin
Ich habe de Code jetzt probiert. Er hat jetzt die selbe datei noch mal erstellt! Gleiche größe wie die originaldatei und wenn ich die öffne sagt er das die zu lang ist und nicht alles geöffnet werden kann.
mfg Martin
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 07:20:32
Reinhard
Hi Martin,
***Mehr als 65xxx Zeilen kann man ja mit excel nicht öffnen.***
das sehe ich nicht so.
Option Explicit
Sub Schreiben()
Dim n
Close
Open "c:\test\riesig.txt" For Output As #1
For n = 1 To 200000
Print #1, n
Next n
Close
End Sub
Sub Lesen()
Dim n, Satz, spa
Application.ScreenUpdating = False
Close
Open "c:\test\riesig.txt" For Input As #1
While Not EOF(1)
n = n + 1
Input #1, Satz
If n = 65537 Then
n = 1
spa = spa + 1
End If
Cells(n, spa + 1) = Satz
Wend
Close
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 08:15:06
Martin
Was kann ich mit dem Code anfangen? Ich habe den ausprobiert und er schreibt mir die Zahlen von 1-200000 in die Mappe. ?
Ich komme einfach nicht hinter dem Sin. Kannst du mir da nochmal unter dem Arm greifen?
mfg und Danke!
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 10:57:48
Erich
Hallo Martin,
Reinhards Code zeigt, dass man per VBA auch Dateien mit mehr als 65536 Sätzen einlesen kann,
durch Verteilung auf mehrere Spalten.
Dir nützt das wenig, denn deine Quell-CSV-Datei hat ja vermutlich schon mehrere Spalten.
Die beiden Codes zum Splitten der Dateien funzen.
Sie erstellen weder leere Dateien noch Dateien mit mehr als 65000 Sätzen.
Bist du sicher, dass du beim Erstellen und beim Öffnen/Anschauen
die richtigen Pfade und Dateinamen verwendest?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 14:28:13
Martin
Ich bin mir eigendlich schon sicher!
Ich glaube das hängt alles mit dem zu großen Speicherverbrauch bei diesen Aktionen ab.
Mit kleineren Dateien klappt es einwandfrei. Meine Datei ist 160 mb groß!
Sie besteht aus 11 Spalten, hab aber auch versucht diese Datei mit nur 3 Spalten zu teilen. da ging es auch nicht.
Andersrum habe ich schon mal dateinen (allerdings dat-Dateien und keine csv) mit weit über 500.000 Zeilen geteilt. Da ging es auch! Aber die Dateien waren trotz der vielen Zeilen nicht so "schwer"!
ich habe einen Laptop mit 256 mb Arbeitsspeicher und der Virtuelle Speicher geht bei den Dateien schnell auf 600 mb und mehr! Dann wird er sehr langsam!
Ich denke das es daran liegt!
mfg Martin
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 17:28:44
Erich
Hallo Martin,
tja, das Verhältnis von Dateigröße zu Arbeitsspeicher ist schon eine wesentliche Info...
Mein Vorschlag: Arbeitsspeicher kaufen oder auf andere Hardware umsteigen.
Fraglich ist für mich auch, wie du diese Datenmengen in Excel verarbeiten willst.
Das dürfte mit einem DB-Programm sehr viel effektiver gehen.
Zwischen dat- und csv-Dateien gibt es - vor allem beim Splitten - überhaupt keinen Unterschied,
beides sind Textdateien. dat-Dateien können genau wie csvs Trennzeichen enthalten.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CSV-Datei in mehrere Teile aufteilen


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei zu splitten, die mehr als 65.000 Zeilen hat, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:
Sub Aufteilen()
    Dim liZeile As Long, lstrDatName As String, lstrZeile As String, liZeiger As Integer
    liZeiger = 1
    liZeile = 1
    lstrDatName = "Teil_" & liZeiger & ".csv"
    Open "C:\Pfad\zu\deiner\datei.csv" For Input As #1
    Open "C:\Pfad\zu\deiner\" & lstrDatName For Output As #2
    Do While Not EOF(1)
        Line Input #1, lstrZeile
        If liZeile <= 65000 Then
            Print #2, lstrZeile
            liZeile = liZeile + 1
        Else
            Close #2
            liZeile = 1
            liZeiger = liZeiger + 1
            lstrDatName = "Teil_" & liZeiger & ".csv"
            Open "C:\Pfad\zu\deiner\" & lstrDatName For Output As #2
            Print #2, lstrZeile
            liZeile = liZeile + 1
        End If
    Loop
    Close
End Sub
  1. Ändere den Pfad in der Zeile Open "C:\Pfad\zu\deiner\datei.csv" zu dem Ort, an dem sich deine CSV-Datei befindet.
  2. Führe das Makro aus: Drücke F5 oder gehe auf "Ausführen" > "Sub/UserForm ausführen".

Die CSV-Datei wird nun in mehrere Teile aufgeteilt, sodass jede Datei maximal 65.000 Zeilen enthält.


Häufige Fehler und Lösungen

  1. Leere Dateien: Wenn die erstellten Dateien leer sind, überprüfe den Pfad und die Dateinamen im Code. Stelle sicher, dass die Datei existiert und lesbar ist.
  2. Datei zu groß für Excel: Excel kann standardmäßig nur 65.536 Zeilen pro Arbeitsblatt verarbeiten. Verwende die oben genannte Methode, um die CSV-Datei zu splitten.
  3. Speicherprobleme: Bei sehr großen Dateien kann dein PC überlastet werden. Überlege, ob du die Datei auf einem leistungsfähigeren Computer verarbeiten kannst.

Alternative Methoden

  • Python: Wenn Du mit Programmierung vertraut bist, kannst Du auch Python verwenden, um CSV-Dateien zu teilen. Hier ist ein Beispiel:
import pandas as pd

# Lies die CSV-Datei
df = pd.read_csv("C:\\Pfad\\zu\\deiner\\datei.csv")

# Teile die Datei in mehrere Teile
for i in range(0, df.shape[0], 65000):
    df.iloc[i:i+65000].to_csv(f"Teil_{i//65000 + 1}.csv", index=False)
  • CSV-Splitting-Tools: Es gibt auch zahlreiche Tools online, die dir helfen können, eine CSV-Datei zu teilen.

Praktische Beispiele

Angenommen, Du hast eine CSV-Datei mit 135.000 Zeilen. Mit dem oben genannten VBA-Code wird die Datei in mindestens 3 Teile aufgeteilt:

  • Teil_1.csv (Zeilen 1-65.000)
  • Teil_2.csv (Zeilen 65.001-130.000)
  • Teil_3.csv (Zeilen 130.001-135.000)

Dies ist besonders nützlich, wenn Du die CSV-Datei in Spalten aufteilen oder in Excel bearbeiten möchtest.


Tipps für Profis

  • Überlege, ob es notwendig ist, die Datei in mehrere Teile zu splitten, oder ob Du die Daten in einer Datenbank verwalten kannst, was effizienter sein kann.
  • Verwende Excel-Datenbankfunktionen, um große Datensätze zu analysieren, ohne die Datei in mehrere Teile aufteilen zu müssen.
  • Achte darauf, dass die CSV-Datei gut strukturiert ist. Wenn sie viele Leerzeilen oder inkonsistente Daten enthält, kann das die Verarbeitung beeinträchtigen.

FAQ: Häufige Fragen

1. Was ist eine CSV-Datei?
Eine CSV-Datei (Comma-Separated Values) ist eine Textdatei, die Daten in tabellarischer Form speichert, wobei jede Zeile einen Datensatz darstellt und die Werte durch Kommas getrennt sind.

2. Warum ist meine CSV-Datei zu groß für Excel?
Excel hat eine Begrenzung von 65.536 Zeilen pro Arbeitsblatt. Wenn deine Datei mehr Zeilen enthält, kannst Du sie mit den oben genannten Methoden aufteilen.

3. Wie kann ich eine CSV-Datei in Spalten aufteilen?
Du kannst die oben genannten VBA-Methoden verwenden oder Excel-Funktionen nutzen, um die Daten in Spalten aufzuteilen, nachdem Du die Datei erfolgreich geladen hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige