Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
688to692
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
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aufteilung von 2 Spalten (A;B) auf mehrere Spalten

Aufteilung von 2 Spalten (A;B) auf mehrere Spalten
02.11.2005 18:08:21
Mark
Hallo zusammen.
Leider bin ich Excel-Anfänger und habe aus einem Versuch eine große Menge an Daten in einzelnen Dateien bekommen. Alle einzelnen Daten der Dateien habe ich in eine Datei zusammengefasst: https://www.herber.de/bbs/user/28058.txt
(Das können aber auch einzelne Dateien bleiben)
Wie am Aufbau zu erkennen ist, gibt es 2Spalten A und B und tausende Zeilen. Mehrere Datenzeilen gehören nun zu einer Datei. Jede einzelne Datei ist am Anfang der Dateinzeilen mit "Dateiname.tra" gekennzeichnet. Zur Trennung der Dateien ist eine Leerzeile eingefügt.
Jetzt möchte ich aber diese Textdatei so in Excel importieren oder umwandeln, dass nicht nur 2Spalten und 1000de Zeilen entstehen, sondern jede Datei mit ihren zwei Spalten neben einander steht. Als Beispiel einmal eine von Hand angefertigte Version:

Die Datei https://www.herber.de/bbs/user/28059.xls wurde aus Datenschutzgründen gelöscht

D.h. beim Importieren oder umwandeln soll er beim Dateinamen der ersten Datei - in der ersten Zeile anfangen und bis zur ersten Leerzeile durchgehen und das in Spalte B und C schreiben. Nach der Leerzeile soll er dann die Daten von Datei 2 bis zur nächsten Leerzeile nehmen und in Spalte H und I kopieren(schreiben). Und das ganze so weiter, bis er am Ende der Daten ist.
Oder gibt es für mein Problem eine andere Lösung. Z.B. das ich mehrere einzelne Dateien mit den tausenden Zeilen gleichzeitig in Excel importiere und er diese in EIN Excel-Sheet schreibt - nach der gleichen Aufteilung wie oben?
Ich hoffe, dass meine Anfrage verstanden wurde und mir jemand helfen kann. Ansonsten muss ich alle 150Datensätze von Hand einlesen und herumkopieren :-) Und das ist doch etwas aufwendig. Ich danke also schon mal im Voraus für jede Antwort.
Bis dahin
Mark
PS: Die ganze Sache eilt auch noch ein bisschen :-)

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 20:22:00
Ramses
Hallo
Der Code muss in ein VBA-Modul deiner Mappe
Option Explicit

Sub Read_Big_File()
    'by Ramses
    '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 und 2 geschrieben
    'bis eine Leerzeile auftritt, danach wieder von Zeile 1 beginnend
    'bis zum Ende des Textfiles
    '------------------------------
    '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
    Dim SpaltenVersatz As Integer, tarSpalte As Integer, tarRow As Integer
    'Neue Mappe und Variables Tabellenblatt deklarieren
    Dim tWkb As Workbook, tWks As String
    'Für Office97 muss das Array TextArr als String definiert werden
    Dim TextArr As Variant
    Dim ReadFile As String
    Dim OldStatusbar
    'Dialog öffnen auf Basis von *.dat Files
    ReadFile = Application.GetOpenFilename("CSV Files (*.csv;*.txt),")
    If ReadFile = "" Then Exit Sub
    'Begintn mit schreiben in Spalte 1
    tarSpalte = 1
    tarRow = 1
    'Nach Leerzeile im Textfile wird der
    'Schreibvorgang um Spalten X versetzt
    SpaltenVersatz = 4
    'Schliessen einer evtl. 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.
        Line 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
        Line 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 = Worksheets.Count To 2 Step -1
        Application.DisplayAlerts = False
        Worksheets(i).Delete
        Application.DisplayAlerts = True
    Next
    OldStatusbar = Application.DisplayStatusBar
    'Namen vergeben
    Worksheets(1).Name = "ImportData1"
    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:=Cells(1, tarSpalte), ConsecutiveDelimiter:=True, Space:=True, Other:=False
            tarRow = 1
            tarSpalte = tarSpalte + 2
        End If
        If Len(TextArr(i)) <> 0 Then
            tWkb.Worksheets(tWks).Cells(tarRow, tarSpalte) = Trim(TextArr(i))
            tarRow = tarRow + 1
        Else
            Columns(tarSpalte).TextToColumns Destination:=Cells(1, tarSpalte), ConsecutiveDelimiter:=True, Space:=True, Other:=False
            tarRow = 1
            tarSpalte = tarSpalte + SpaltenVersatz
            If tarSpalte > 255 Then
                MsgBox "Spaltenanzahl nicht ausreichend.", vbCritical + vbOKOnly, "Abbruch"
                Exit Sub
            End If
        End If
    Next i
    MsgBox ReadFile & " mit " & txtLines & " Datensätzen vollständig eingelesen"
    Application.DisplayStatusBar = OldStatusbar
End Sub


Beim starten wird die zu importierende Datei abgefragt und danach eine neue Mappe zum Import erstellt.
Das ganze dauert mit deinen 6233 Datensätzen ca. 1 Sekunde
Anzeige
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 22:57:43
Mark
Hallo Rainer,
danke für Deine Superschnelle Hilfe! Habe mich etwas in Excel eingearbeitet. Leider bekomme ich das VBA-Modul nicht zum Laufen. Ich beschreibe mal mein Vorgehen:
1. eine neue mappe in Excel öffnen
2. auf Extras - Makro - Visual Basic Editor
3. neues Fenster öffnet sich: der Visual Basic Editor zu aktuellen Mappe
4. ich wähle unter "DieseArbeitsmappe" - Einfügen - Modul
5. in das sich öffnende Fenster füge ich dann deinen Quelltext ein.
6. alles mal speichern und dann den editor schließen.
7. zurück in der Excelmappe gehe ich auf Extras - Makro - Makros und
8. dann öffnet sich ein neues kleines Fenster in dem das Makro: Read_Big_File steht.
9. ich gehe dann auf ausführen und ich es öffnet sich ein fenster zum Auswählen der txt./csv.-Datei.
10. ich wähle die datei und gehe auf ok, aber
11. er springt auf den Visual-Basic-Editor über und bringt folgenden Fehler: "Laufzeitfehler '7': nicht genügend Speicher!
12. nun kann ich nur Beenden oder Debuggen drücken.
13. es hat sich eine neue Excel-Mappe geöffnet!
Aber leider sieht es nicht so schön aus wie auf dem bild oben - besser gesagt ist bei mir alles leer! Habe ich etwas bei meinem Schritten falsch gemacht oder muss ich ganz anders herangehen.
Für ein paar Tipps wäre ich noch dankbar!
Bis dahin!
Mark
Anzeige
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 23:03:51
Ramses
Hallo
Wenn du bei der Fehlermeldung auf "Debuggen" klickst, welche Zeile wird dann markiert ?
Wieviele Datensätze hat denn deine Textdatei ?
Gruss Rainer
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 23:09:42
Mark
Ja, es handelt sich um Zeile 78: tWkb.Worksheets(tWks).Cells(tarRow, tarSpalte) = Trim(TextArr(i))
Wie in der hochgeladenen Datei sind es z.b. 6221 Zeilen - das kann bei anderen sicher noch etwas mehr oder weniger sein - aber über 10000Zeilen sollte es nicht gehen - wenn das die Frage beantwortet!
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 23:17:24
Ramses
Hallo
Wenn du auf Debuggen klickst, und mit dem Mauszeiger auf die verschiedenen Variablen zeigst, wird dir der Wert angezeigt.
Es interessiert mich vor allem der Wert von "tarRow, tarSpalte und i"
Eine Anpassung kannst du schon mal machen.
Ändere die Zeile

If tarSpalte > 255 Then
in
If tarSpalte > 252 Then

und lass den Code nochmals laufen.
Gruss Rainer

Anzeige
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 23:28:51
Mark
Also in der gelb markierten Zeile sind alle drei Variablen mit dem Wert =1 angegeben!
Habe die Zeile oben angepasst - und denn code noch einmal laufen lassen - keine Lösung - Problem besteht an der gleichen Stelle wieder!
Mark
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
02.11.2005 23:49:17
Ramses
Hallo
Der Code funktioniert bei mir einwandfrei.
Kannst du mir mal deine Mappe mit dem Code hochladen ?
Allenfalls auch noch die Textdatei ?
Gruss Rainer
AW: Aufteilung von 2 Spalten (A;B) auf mehrere Spa
03.11.2005 00:33:10
Mark
Hallo nochmal - da steckt wieder der Fehler im Detail - oder an meiner Unfähigkeit!?
Hier nochmal meine zwei Dateien, mit denen ich es versucht habe:
1. Die Ausgangsdatei - mit den 6621 Zellen:
https://www.herber.de/bbs/user/28070.txt
2. Die Mappe mit dem von mir eingefügten Makro (VBA-Code)

Die Datei https://www.herber.de/bbs/user/28071.xls wurde aus Datenschutzgründen gelöscht

Bis dahin!
Mark
Anzeige
Dein Textfile ist korrupt....
03.11.2005 00:41:23
Ramses
Hallo
... oder in einem nichtkompatiblen Format gespeichert.
Das ist mir vorhin schon aufgefallen. Es sind keine CR (Absatzmarken) vorhanden.
Die Prüfung wieviele Textzeilen/Datensätze vorhanden sind ...
Do While Not EOF(1) ' Schleife bis Dateiende.
Line Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtLines = txtLines + 1
Loop
...ergibt nur 1.
Öffne die Textdatei in Word, und speichere Sie dort wieder als Textdatei, dann funktioniert es.
Der Code als solches ist korrekt implementiert
Gruss Rainer
Anzeige
AW: Dein Textfile ist korrupt....
03.11.2005 01:09:44
Mark
... und das stimmt auch noch - Danke für den Tipp! Habe die txt-datei im textpad geöffnet und als *.txt im PC-Format gespeichert und es hat alles geklappt - SUPER!
Und da ist mir auch aufgefallen wo das Problem liegt. Das Zusammenfügen der einzelnen Dateien zu einer Datei habe ich auf meinem mac unter osx (terminal) gemacht. Somit ist das eine txt-Datei im UNIX-Format. Das war also das Problem -
Vielen Dank nocheinmal für eure Hilfe!!!!!
Mark

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige