Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
504to508
504to508
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Große Textdatei importieren mit ca. 220.000 Daten

Große Textdatei importieren mit ca. 220.000 Daten
27.10.2004 12:59:32
Michael
Hallo liebe Excel-Gemeinde
ich habe ein kleines technisches Problem. Ich möchte eine Datenbank, die mir im TXT-Format vorliegt mit Excel und einer Pivottabelle auswerten lassen.
Das Problem ist jetzt, daß diese TXT-Datei mehr als 200.000 - ca. 300.000 Datensätze mit etwa 30 verschiedenen Spalten enthält und somit die Kapazität eines Arbeitsblattes in der Länge sprengt.
Der Datenimport-Dialog gibt mir nur die Möglichkeit, Daten beginnend ab Zeile xxx einzulesen.
Genau das ist mein Problem.
Kann ich mit VBA ein Makro programmieren, daß diese Datei automatisiert in 4 oder 5 verschiedene Arbeitsmappen schreibt (in Abhängigkeit von der abs. Zahl der Datensätze und auch damit die Performance des Rechners nicht allzusehr leidet), diese Arbeitsblätter dann in einer Pivot-Tabelle nach immer wieder gleichen Kriterien (d.h. die auszuwertenden Spalten stehen fest) auswertet und mir die Ergebnisse (Sprich die Pivot-Ergebnisse) in einem neuen Arbeitsblatt zusammenkopiert, die ich dann auswerten kann?
Der letzte Punkt wäre nicht so wichtig, da ich das mit dem Macrorecorder noch hinbekommen würde, aber mit dem Zerlegen in verarbeitbare Häppchen bin ich im Moment auf Kriegsfuß.
Es wäre schön, wenn jemand eine Idee hätte, wie ich die Kuh vom Eis bekomme, denn die manuelle Zerlegung in 4 Textdateien ist doch recht langsam und nervig.
Schon mal jetzt vielen lieben Dank für eure Hilfe! Ich hoffe, ich kann mich mal irgendwann revanchieren ;o)!
Gruß
Michael Kamper
AW: Große Textdatei importieren mit ca. 220.000 Daten
27.10.2004 13:02:00
Michael
Nachtrag:
ich bin leider nicht der große VBA-Künstler, daher wäre ich auf Code-Hilfe angewiesen.
Gruß
Micha
AW: Große Textdatei importieren mit ca. 220.000 Daten
Jan
Hi Michael,
Bei soviel Datensätzen wäre zu überlegen, ob Du nicht eine Datenbank wie ACCESS
dazu verwendest. Mit Excel wirst Du Schwierigkeiten bei der Auswertung bekommen.
Möglich ist ja vieles mit Excel, aber mit welchem Aufwand.
Jan
AW: Große Textdatei importieren mit ca. 220.000 Da
Ramses
Hallo
zum einlesen kannst du das mal probieren

Sub Read_Big_File()
'Liest csv und txt Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbeitsmappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("CSV Files (*.csv;*.txt),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 1 To txtlines
Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = 2 To Worksheets.count
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).name = "Data1"
tWks = tWkb.Worksheets(1).name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod 65536 = 0 Then
Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, Semicolon:=True, FieldInfo:=Array(1, 1)
tWkb.Worksheets.Add after:=ActiveSheet
ActiveSheet.name = "Data" & i
tWks = ActiveSheet.name
n = 1
End If
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
MsgBox ReadFile & " mit " & txtlines & " Datensätzen vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

Gruss Rainer
Anzeige
AW: Große Textdatei importieren mit ca. 220.000 Da
27.10.2004 14:02:43
Michael
Hallo Rainer,
das Makro habe ich mal in den VBA-Editor kopiert. Dort habe ich es ausgeführt und mit der Datei gefüttert.
nach dem Dialog bricht das Makro mit Laufzeitfehler '62' ab und markiert die input #1 Zeile
ReadFile = Application.GetOpenFilename("CSV Files (*.csv;*.txt),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
diese Zeile wird markiert...
'Zähler hochzählen
txtlines = txtlines + 1
Loop
kannst Du mir sagen, was ich falsch gemacht habe, bzw. wo der Fehler liegt?
Gruß
Micha
Anzeige
AW: Große Textdatei importieren mit ca. 220.000 Da
Ramses
Hallo
den Fehler kann ich nicht nachvollziehen.
Ich habe hier eine 20MB grosse Musterdatei die einwandfrei läuft.
Kannst du mir mal die Datei mit den ersten 10 oder 20 Zeilen hochladen ?
Gruss Rainer
AW: Große Textdatei importieren mit ca. 220.000 Da
27.10.2004 14:49:46
Michael
Hi Rainer,
das hochladen klappt leider nicht, da personenbezogene Daten.
Ich hab den Fehler aber überwunden, indem ich die Variable als String definiere.
dann bricht er aber etwas weiter unten ab.
Zeile
ReDim textArr(txtlines)
Fehler beim Kompilieren
Erwartet: Datenfeld
Hilfä!! ;o)
scheint ja eine schwere Geburt zu sein.
Vielen Dank für deine bisherige Hilfe
Gruß
Micha
Anzeige
AW: Große Textdatei importieren mit ca. 220.000 Da
Ramses
Hallo
Kann es sein, dass du nicht Office 2000 hast, sondern Office 97 ?
Dann deklariere die Variable des Arrays mal als String anstelle von Variant
Dim textArr() As String
Gruss Rainer
AW: Große Textdatei importieren mit ca. 220.000 Da
27.10.2004 15:08:01
Michael
Hallo Rainer,
ne, also Info sagt 9.0.82... ;o)
Sobald ich diese Variable als String definiere, knalle es beim ReDim, lasse ich es beim Variant habe ich das Problem, daß das Programm in der Schleife, die die Anzahl der Zeilen ausliest abbricht mit dem Fehler Einlesen hinter Dateiende. Hier wird dann auch beim Positionieren der Inhalt der Letzten Zeile in der Datei angezeigt.
Kann es sein, daß die Datei zu groß ist? ca. 44 mb...
ich habe es auch mal versucht, ein Makro aufzuzeichnen, wo ich im dialog des Text-Importes die Beginn-Zeile auf 65534 zu setzen, da sagt mir Excel die sei ungültig und setzt eine Zahl 32... ein.
Kann es sein, daß die Datei keine sauberen Endezeichen für die einzelnen Datensätze hat?
Gruß
Micha
Anzeige
AW: Große Textdatei importieren mit ca. 220.000 Da
Ramses
Hallo
das ist aber nun ein anderer Fehler den du beschreibst.
Einlesen hinter Dateiende könnte tatsächlich auf nicht korrekte Endzeichen hindeuten
Ändere mal die Anweisung
For i = 1 To txtlines
Input #1, textArr(i)
Next i
In
For i = 1 To txtlines-1
Line Input #1, textArr(i)
Next i
Gruss Rainer
AW: Große Textdatei importieren mit ca. 220.000 Da
Ramses
Hallo
Ich muss jetzt leider weg, melde mich heute Abend noch mal, bzw. bei Euch morgen früh ;-)
Gruss Rainer
AW: Große Textdatei importieren mit ca. 220.000 Da
27.10.2004 16:21:19
Michael
Hallo Rainer,
das makro rennt jetzt (in der Datei war die letzte Zeile mit Leerzeichen und einem Return ein wenig strubbelig)und trennt die Daten brav in einzelne Datenblätter.
Allerdings ist das Spaltentrennzeichen nicht das Semikolon sondern ein ê (e mit Hütchen).
Die Daten, die importiert werden, werden allesamt in Spalte A geschrieben, auch wenn ich das Semikolon:= true durch TextFileOtherDelimiter:=ê ersetzt habe. Ich vermute jedoch, daß das in der Datei unrelevant ist, da die Daten bereits in die Zelle A1 ff. eingetragen werden.
Ich glaube aber, wir sind verdammt nah dran ;o)
Auf jedem Fall schon mal super vielen Dank für deine Zeit und deine Energie mir Blödmann zu helfen ;o)
Gruß
Micha
Anzeige
AW: Große Textdatei importieren mit ca. 220.000 Da
28.10.2004 01:32:05
Björn
Hallo Micha,
die Syntax für die TextToColumns-Methode lautet:
Ausdruck.TextToColumns(Destination, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)
D. h. wenn du
Semikolon:= true
weglässt, dann musst du stattdessen
Other:= true und OtherChar:= "ê" (kann sein dass die Anführungsstriche entfallen) einfügen.
Gruß
Björn

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige