Werte von .txt in Excel importieren (VBA)?
Guten Tag
Ich habe ein Projekt bei dem ich (Wie unten im Beispiel) Daten auslesen muss aber eben nicht alle sondern nur die mit dem 1. Datensatz (Wie im Beispiel 500)
Beispiel: (So sieht ca. die .txt Datei aus nur brauche ich nur die mit 500 am Anfang)
500;12345;Name;Vorname;Datum
501;Bla1;Bla2;Bla3
503;Produkt;Wert;Status
500;12346;Name1;Vorname1;Datum1
3 Antworten
Man könnte beide Vorschläge kombinieren. Das bedeutet, du nutzt VBA, um die CSV-Datei zu öffnen.
Excel kann sehr gut mit CSV-Dateien umgehen, sodass du direkt mit Excelfunktionalitäten auf der Datei operieren kannst. Du kannst die Datei öffnen, einen Filtern anwenden, das Ergebnis kopieren und anschließend die CSV-Datei wieder schließen.
Sub FilterImportDatei()
Dim wb As Workbook
Dim ws As Worksheet
Dim r As Range
Set wb = Application.Workbooks.Open("F:\scripts\GF\Test\csv_import.csv")
Set ws = wb.Sheets(1)
Set r = ws.[A:A]
Call r.TextToColumns([A:A], xlDelimited, xlTextQualifierNone, False, False, True)
ws.UsedRange.AutoFilter
ws.UsedRange.AutoFilter field:=1, Criteria1:="500"
ws.UsedRange.Copy Tabelle1.[A1]
wb.Close False
End Sub
Hier ein Makro:
myFilePath musst du halt noch anpassen an deine Datei.
Sub Einlesen()
Const TristateTrue = -1, ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, sourceFile, myFilePath
Dim r, c
Dim line As String
Dim fields() As String
r = 1
myFilePath = "c:\Daten.txt" '<-- hier
Set fso = CreateObject("Scripting.FileSystemObject")
Set sourceFile = fso.OpenTextFile(myFilePath, ForReading, TristateTrue)
While Not sourceFile.AtEndOfStream
line = sourceFile.ReadLine
fields = Split(line, ";")
If fields(0) = "500" Then
For c = 0 To UBound(fields)
Sheets("Tabelle1").Cells(r, c + 1) = fields(c)
Next
r = r + 1
End If
Wend
sourceFile.Close
End Sub
Ich würde den gesamten Datenbestand einlesen und dann in Excel filtern bzw. mit VBA die nicht benötigten Zeilen löschen. Wichtig ist, dass die Schleife von der letzten Zeile aufwärts zu ersten laufen muss.
Wie viele Datensätze sind es denn?
Ja würde ich ja auch so machen, jedoch ist das eben die Aufgabe (Es nicht so zu machen) XD