Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Txt. Dateien in Excel korrekt einlesen

Txt. Dateien in Excel korrekt einlesen
07.05.2013 15:08:13
Michael
Hallo zusammen,
ich habe folgendes Problem:
Ich muss per VBA Makro mehrere Textdateien in Excel einlesen und habe dafür folgendes Programm geschrieben:
A = 1
d = Dir("C:\Dateipfad\")
Do While d ""
x = Sheets(A).UsedRange.Rows.Count
Open "C:\Dateipfad\" & d For Input As #1
Do While Not EOF(1)
Line Input #1, temp
Cells(x, 1) = Replace(temp, vbTab, " ")
x = x + 1
Loop
Close #1
For j = 1 To x
Text = Split(Cells(j, 1), " ")
For i = 0 To UBound(Text)
Cells(j, i + 1) = Text(i)
Next
Next
d = Dir
Loop
Und hier ist ein Ausschnitt aus den einzufügenden Textdateien:
10838201112021150 86 73 24 30 48 47 51 68 81 9470 0
10838201112021200 86 74 22 26 49 47 51 68 81 9470 0
10838201112021210 86 76 22 24 50 48 51 68 81 9469 0
10838201112021220 88 75 23 21 51 48 51 68 81 9468 0
10838201112021230 94 73 24 23 51 49 51 68 81 9469 0
10838201112021240 102 67 24 34 52 49 51 68 81 9468 0
10838201112021250 109 64 25 37 53 49 51 67 81 9467 0
10838201112021300 107 62 25 44 54 50 51 67 81 9468 0
So jetzt ist mein Problem das beim Einfügen der Daten die Spalten verrutschen.
Mir ist bewusst, dass dies an den verschiedenen Anzahlen an Leerzeichen zwischen den Zahlen liegt.
Gibt es dafür eine bessere Lösung? ( evtl mit einer Array Funktion)
Viele Grüße
Michael

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Txt. Dateien in Excel korrekt einlesen
07.05.2013 15:12:14
Klaus
Hallo Michael,
kannst du das nicht einfach mit dem exceleigenen "Text-zu-Spalten" lösen? Oder mit "=GLÄTTEN(A1)" die unnötigen Leerzeichen entfernen?
Grüße,
Klaus M.vdT.

AW: Txt. Dateien in Excel korrekt einlesen
07.05.2013 15:31:28
Michael
Hallo Klaus :)
ich werde es mal probieren :)

AW: Txt. Dateien in Excel korrekt einlesen
07.05.2013 15:31:31
Justin
Hi Michael,
mit deinen Testdaten funktioniert dieser Code: ( Pfad und Zellenreichweite anpassen!)
Private Sub CommandButton1_Click()
ActiveSheet.Range("A1:L10").ClearContents
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\User\Desktop\test.txt", Destination:= _
Range("A1"))
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

Anzeige
AW: Txt. Dateien in Excel korrekt einlesen
07.05.2013 16:10:05
firmus
Hi Michael,
diese Variante nimmt alle TXT eines Ordners und speichert sie gleich als XLS-file ab.
=====beginn=====
Option Explicit
Sub Test_Text2Column()
Dim a As Long
Dim d, xlfile As String
a = 1
d = Dir("C:\Dateipfad\")
Do While d  ""
If UCase(Mid(d, Len(d) - 3, 4)) = UCase(".TXT") Then   'nur TXT-files nehmen
xlfile = Mid(d, 1, Len(d) - 4) & ".xlsx"
Workbooks.OpenText Filename:=d, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 2), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array( _
8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1)), TrailingMinusNumbers:=True
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
MsgBox "Datei: " & d & " wurde umgesetzt und wird jetzt als " & xlfile & " gespeichert." _
ActiveWorkbook.SaveAs Filename:=xlfile, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
'    ActiveWindow.Close
ActiveWorkbook.Close
End If
d = Dir
Loop
d = d    'debug-stop only
End Sub

=====ende=====
Gruss
Firmus

Anzeige
AW: Txt. Dateien in Excel korrekt einlesen
07.05.2013 17:01:35
Michael
Super vielen Dank für die zahlreichen Hilfen :)
habs inzwischen hinbekommen danke :)

AW: Txt. Dateien in Excel korrekt einlesen
10.05.2013 11:02:07
Michael
Hallo nochmal zusammen,
Ich habe gerade gemerkt das ich beim Einlesen der Daten auf ein neues Problem gestoßen bin.
Der Code funktioniert prima soweit- Hier mal die Excel-Mappe mit dem Code:
https://www.herber.de/bbs/user/85272.xlsm
Er entspricht im wesentlichen dem "alten Code" mit dem Zusatz das ich per "Makro aufzeichnen" die Funktion 'text in Spalte' noch am Ende mit eingefügt habe. Doch genau hier liegt das neue Problem.
Beim Spalten in die entsprechenden Zeilen wird der Wert der am Ende in der Spalte A1 steht verändert. Das drückt sich so aus das anstelle von der Zahl 10838201111220010 die Zahl 10838201111220000 dort steht. Beim splitten wird immer die vorletzte Ziffer dieses Wertes auf 0 gesetzt, anstatt das diese sich Zeile für Zeile um 1 erhöht.
Vor dem Splitten sieht es noch so aus:
10838201111220000 12 98 33 22 26 36 48 72 91 9510 0
10838201111220010 13 98 31 14 26 35 48 72 91 9511 0
10838201111220020 15 99 32 17 25 35 48 72 91 9510 0
10838201111220030 13 99 32 15 25 35 48 72 91 9510 0
10838201111220040 10 99 33 17 25 35 48 72 91 9509 0
10838201111220050 9 99 33 18 25 35 48 72 91 9509 0
10838201111220100 10 99 33 18 25 35 48 72 91 9509 0
10838201111220110 11 99 33 18 25 35 48 72 91 9509 0
10838201111220120 7 99 34 18 24 34 48 72 91 9508 0
Danach:
10838201111220000 12 98 33 22 26 36 48 72 91 9510 0
10838201111220000 13 98 31 14 26 35 48 72 91 9511 0
10838201111220000 15 99 32 17 25 35 48 72 91 9510 0
10838201111220000 13 99 32 15 25 35 48 72 91 9510 0
10838201111220000 10 99 33 17 25 35 48 72 91 9509 0
10838201111220000 9 99 33 18 25 35 48 72 91 9509 0
10838201111220100 10 99 33 18 25 35 48 72 91 9509 0
10838201111220100 11 99 33 18 25 35 48 72 91 9509 0
Ich hoffe einer weis wie man dies lösen kann :)
Viele Grüße
Michael
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Txt. Dateien in Excel korrekt einlesen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Erstelle ein neues Modul:
    • Rechtsklick auf "VBAProject (DeineMappe)" -> Einfügen -> Modul.
  3. Füge den folgenden Code ein, um eine Textdatei mit VBA einzulesen:

    Sub TxtDateiEinlesen()
       Dim d As String
       Dim x As Long
       d = Dir("C:\Dateipfad\*.txt") ' Ersetze den Pfad
       Do While d <> ""
           x = Sheets(1).UsedRange.Rows.Count + 1
           Open "C:\Dateipfad\" & d For Input As #1
           Do While Not EOF(1)
               Line Input #1, temp
               Cells(x, 1) = Replace(temp, vbTab, " ")
               x = x + 1
           Loop
           Close #1
           d = Dir
       Loop
    End Sub
  4. Passe den Dateipfad an, wo sich deine TXT-Dateien befinden.
  5. Starte das Makro, um die Dateien einzulesen.

Häufige Fehler und Lösungen

  • Spalten verrutschen: Wenn die Spalten verrutschen, liegt es häufig an den unterschiedlichen Abständen zwischen Werten in der Textdatei. Nutze die Funktion Split oder Text-zu-Spalten, um die Daten korrekt aufzuteilen.

  • Falsche Werte nach dem Einlesen: Wenn Werte wie 10838201111220000 anstelle der korrekten Zahl angezeigt werden, kann es an der Formatierung der Zellen liegen. Stelle sicher, dass die Zellen als Text formatiert sind, bevor du die Daten einliest.


Alternative Methoden

  1. Text-zu-Spalten verwenden:

    • Markiere die Spalte mit den eingelesenen Daten.
    • Gehe zu Daten -> Text in Spalten und wähle Getrennt. Setze als Trennzeichen das Leerzeichen.
  2. QueryTables:

    • Du kannst auch QueryTables verwenden, um TXT-Dateien einzulesen. Hier ein Beispiel:
    Sub ImportTextFile()
       With ActiveSheet.QueryTables.Add(Connection:= _
           "TEXT;C:\Dateipfad\deineDatei.txt", Destination:=Range("A1"))
           .TextFileConsecutiveDelimiter = True
           .TextFileTabDelimiter = False
           .TextFileSpaceDelimiter = True
           .Refresh
       End With
    End Sub

Praktische Beispiele

Hier ist ein Beispiel für einen Code, der alle TXT-Dateien eines Ordners einliest und in eine Excel-Datei speichert:

Sub Test_Text2Column()
    Dim a As Long
    Dim d As String
    Dim xlfile As String
    a = 1
    d = Dir("C:\Dateipfad\*.txt")
    Do While d <> ""
        xlfile = Left(d, Len(d) - 4) & ".xlsx"
        Workbooks.OpenText Filename:=d, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, Space:=True
        Cells.Select
        Cells.EntireColumn.AutoFit
        ActiveWorkbook.SaveAs Filename:=xlfile, FileFormat:=xlOpenXMLWorkbook
        ActiveWorkbook.Close
        d = Dir
    Loop
End Sub

Tipps für Profis

  • Verwende Option Explicit am Anfang deines VBA-Codes, um sicherzustellen, dass alle Variablen deklariert werden.
  • Teste den Code mit einer kleinen Datei, bevor du ihn auf größere Datenmengen anwendest.
  • Experimentiere mit den TextFileColumnDataTypes, um die Daten entsprechend zu formatieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere TXT-Dateien gleichzeitig einlesen?
Du kannst die Dir-Funktion verwenden, um alle Dateien in einem Ordner zu durchlaufen und sie nacheinander einzulesen.

2. Was ist der Unterschied zwischen Open und QueryTables?
Open liest die Datei Zeile für Zeile ein, während QueryTables eine strukturierte Möglichkeit bietet, Daten aus einer Textdatei in Excel zu importieren und gleichzeitig Formate und Trennzeichen zu definieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige