Hier mal ein kleines Beispiel für die ersten Felder, das dir zeigt, wie du das Ganze nach Option 2 aufbauen kannst.
Als Trennzeichen habe ich hier das Leerzeichen verwendet. Dadurch werden natürlich einige Daten wie Firmennamen auseinandergerissen und müssen, wie im Code gezeigt wieder neu zusammengesetzt werden.
Wichtig: Teste daher, ob es auch möglich ist, den Tabstopp als Trennzeichen zu verwenden. Das würde die ganze Sache noch weiter vereinfachen. Setze dazu einfach die Option .TextFileTabDelimiter auf True und .TextFileSpaceDelimiter auf False. Natürlich musst du dann die Bezüge evtl. nochmal anpassen.
Sub Makro2()
Dim Datei As Variant, Quelle As Worksheet, Ziel As Worksheet
Dim lastzei As Long, i As Long, z As Long, k As Long, Firmenname As String
Datei = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Datei = False Then Exit Sub
Set Quelle = ActiveWorkbook.Worksheets.Add
With Quelle.QueryTables.Add(Connection:= _
"TEXT;" & Datei, Destination:=Range("A1"))
.Name = "textdatei"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.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)
.Refresh BackgroundQuery:=False
End With
Spalten = Array("Buchungstag", "VGA", "Betrag", "Wkz", "AG Name", "AG IBAN", "AG BIC", "Status", "Empf Name") 'usw.
Set Ziel = Worksheets.Add(before:=Sheets(1)) 'neues Sheet anlegen
Ziel.Rows(1).Resize(1, UBound(Spalten) + 1) = Spalten 'Überschriften setzen
Ziel.Columns(1).NumberFormat = "dd.mm.yyyy" 'Buchungstag
Ziel.Columns(3).NumberFormat = "#,##0.00" 'Betrag
lastzei = Quelle.Cells(Quelle.Rows.Count, 1).End(xlUp).Row
z = 1
For i = 1 To lastzei
If Quelle.Cells(i, 1) = "Buchungstag" Then
Firmenname = ""
z = z + 1
Ziel.Cells(z, 1) = Quelle.Cells(i, 2) 'Buchungstag
Ziel.Cells(z, 2) = Quelle.Cells(i, 4) 'VGA
Ziel.Cells(z, 3) = Quelle.Cells(i, 6) 'Betrag
Ziel.Cells(z, 4) = Quelle.Cells(i, 7) 'Wkz
Ziel.Cells(z, 5) = Quelle.Cells(i, 10) 'AG Name
Ziel.Cells(z, 6) = Quelle.Cells(i + 1, 3) 'AG Iban
ElseIf Quelle.Cells(i, 1) = "AG" And Quelle.Cells(i, 2) = "IBAN" Then
Ziel.Cells(z, 6) = Quelle.Cells(i, 3) 'AG Iban
Ziel.Cells(z, 7) = Quelle.Cells(i, 6) 'AG Bic
Ziel.Cells(z, 8) = Quelle.Cells(i, 8) & " " & Quelle.Cells(i, 9) 'Status
ElseIf Quelle.Cells(i, 1) = "Empf" And Quelle.Cells(i, 2) = "Name" Then
For k = 4 To Quelle.Cells(i, Quelle.Columns.Count).End(xlToLeft).Column
Firmenname = Firmenname & Quelle.Cells(i, k) & " "
Next k
Ziel.Cells(z, 9) = Left(Firmenname, Len(Firmenname) - 1)
'ElseIf usw.
End If
Next i
End Sub
Gruß Mr. K.
|