08.10.2025, 11:33 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2025, 11:33 von marilin837.)
Hallo ihr Lieben,
könnt ihr mir bitte helfen? Ich habe Daten in einer .txt Datei und möchte diese in eine vorgefertigte .xlsx Datei übernehmen. Ich weiß, dass es einfach mit kopieren der einzelnen Spalten geht, aber geht das vielleicht auch automatisch? Denn diese Dateien können sehr umfangreich sein.
Zusätzlich soll bei den Kontierungen in der Spalten FIPOS - wenn die Kontonummer 7 stellig ist T-XXXXXX- voran gesetzt werden. und in der Spalte SHKZG - wenn im .txt 50 steht - soll in dieser Spalte H stehen und wenn im .txt 40 steht - soll in dieser Spalte S stehen
08.10.2025, 14:30 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2025, 14:32 von Ralf A.)
(08.10.2025, 13:42)knobbi38 schrieb: ist doch ein dankbare Aufgabe für PowerQuery. Da kannst du alles deinen Wünschen entsprechend mit der Maus zusammenstellen.
...smile... im Prinzip schon, wenn man genaueres wüßte. In Zeile3, Spalte 2 des mit PQ importierten Textes finde ich das:
In den Zeilen 4ff fehlt schon die 96330. Nicht so schlimm, man kann ja die Position von "La" suchen Was aber unklar ist, ist KOSTL immer 96330? Beginnt AUFNR immer mit La? Aber richtig schlimm wird es bei FIPOS... Da fällt mir nur wenig dazu ein.... Schickt den, der die Textdatei verbrochen hat in die Wüste und lasst einen ran, der die Daten vernünftig strukturieren kann... Oder... Du erklärst uns mal das genaue Prinzip der Struktur.... ich werde jedenfalls nicht die / oder Zeichen zählen und zeilenweise miteinander vergleichen... weder manuell noch automatisiert...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Wie Ralf schon angemerkt hat, sind die Daten in deiner .TXT inkonsequent
Ich hatte schon angefangen, aber es läuft halt bei den schiefen Daten in Fehler hinein (sofort bei Satz2)
Solltest du die Daten richtig gestellt bekommen könnte das so gehen...
Code:
Option Explicit
Sub ImportiereTxtMitTrennung() Dim dateiPfad As String Dim zeile As String Dim teile() As String Dim zeilenNr As Long Dim fso As Object Dim f As Object
' >>> Pfad zur Textdatei anpassen <<< dateiPfad = "E:\Excel\Temp\Kopie.txt"
' Datei öffnen Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(dateiPfad, 1)
With ThisWorkbook.Sheets("Upload") 'Reset .UsedRange.Offset(1, 0).ClearContents
zeilenNr = 2
' Jede Zeile lesen Do Until f.AtEndOfStream zeile = f.ReadLine ' Trennung nach "/" teile = Split(zeile, "/") If zeilenNr > 3 Then 'ersten beiden Zeilen werden nicht benötigt
' Beispiel: Nur bestimmte Spalten übernehmen If Right(teile(0), 2) = 50 Then .Cells(zeilenNr, 1).Value = "H" ElseIf Right(teile(0), 2) = 40 Then .Cells(zeilenNr, 1).Value = "S" End If
If Len(Trim(teile(97))) = 7 Then .Cells(zeilenNr, 2).Value = "T-" & Trim(teile(97)) Else .Cells(zeilenNr, 2).Value = Trim(teile(97)) End If
.Cells(zeilenNr, 3).Value = --Trim(teile(3)) .Cells(zeilenNr, 4).Value = Split(Application.Trim(teile(9)), " ")(0) .Cells(zeilenNr, 5).Value = Split(Application.Trim(teile(9)), " ")(1) .Cells(zeilenNr, 6).Value = Trim(teile(17)) If Trim(teile(15)) <> "" Then .Cells(zeilenNr, 7).Value = Trim(teile(15)) & "/" & Trim(teile(16)) End If
End If zeilenNr = zeilenNr + 1 Loop .Rows("2:3").Delete
08.10.2025, 19:17 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2025, 19:18 von shift-del.)
Moin
Die ersten beiden Zeilen sehe ich als Kopf-Zeilen, für die andere Regeln gelten und habe sie erst mal weggelassen. Wenn ich davon ausgehe dass / das Trennzeichen ist, ist der Rest auch nicht stimmig. Es gibt Verschiebungen.
Arbeitsblatt mit dem Namen 'Kopie (2)'
C
D
E
1
Column2.2
Column2.3
Column2.4
2
60,00
3
45
110,00
4
324,00
5
700,00
6
253,80
7
64,00
8
188,80
9
2,10
10
43,00
11
219,00
12
37,60
13
37,50
14
61,50
15
605,70
16
1543,70
17
4250,70
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Könnte diese Annahme stimmen 0K... → Kopfdatensatz (z. B. Kassenkopf oder Exportkopf) 1FB... → Beleg- oder Tagesabschlusskopf 2ZA... → Bewegungsdatensätze (Zeilen mit Buchungen, Einnahmen usw.)
Code:
let Quelle = Text.FromBinary(File.Contents("Kopie.TXT"),TextEncoding.Ascii), Zeilen = Lines.FromText(Quelle), Tabelle = Table.FromList(Zeilen, Splitter.SplitByNothing(), {"Rohzeile"}), Satzart = Table.AddColumn(Tabelle, "Satzart", each Text.Start([Rohzeile], 2)), Bewegungen = Table.SelectRows(Satzart, each [Satzart] = "2Z"), Getrimmt = Table.AddColumn(Bewegungen, "Clean", each Text.Trim(Text.Replace([Rohzeile], " ", " "))), Gesplittet = Table.SplitColumn(Getrimmt, "Clean", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv)), Getrimmt2 = Table.TransformColumns(Gesplittet, List.Transform(Table.ColumnNames(Gesplittet), each {_, Text.Trim, type text})) in Getrimmt2
Frage ist allerdings, die wohl unbeantwortet bleiben wird: Gibt es auch Zeilen mit 1ZAJeG, 3ZAJeG, 4ZAJeG usw.?