1.3k Aufrufe
Gefragt in Tabellenkalkulation von
Ich habe eine größere TXT Datei mit Text und Zahlen wo ich folgendes bräuchte:

Text zwischen Keywort 1 und Keywort 2 (immer die selben) löschen.

Die folgenden 16 Felder (die über 3 Zeilen gehen in 1 Excelzeile kopieren.
Dann nächste 16 Felder usw.

dann Kewort 1: wieder löschen usw.

Beispiel:

LIEFERER-NUMMER: 0002122700
K O P I E
ANLAGE ZUR GUTSCHRIFT 4600007719
VOM 17.01.2011 SEITE 1
IN DIESER GUTSCHRIFT SIND FOLGENDE
POSTEN MIT UMSATZSTEUERSATZ 19,00%
UND SKONTOSATZ 0,00% ENTHALTEN:
LIEFERSCHEIN DATUM TYP MAT.-/ZEICHNUNGSNR. BESTELL. WSTG LAGER FÄLLIGKEIT
M E N G E ME P R E I S PE WÄHRUNG VORGANG ZU-/ABSCHLAG
WAREN-/LEISTUNGSWERT UMSATZSTEUER SKONTO ZAHLUNGSBETRAG
000081007 27.09.2010 MAT 4G3 275 116 000006 0224 24 17.01.2011
4.800 ST 858,96 02 EUR ZUGANG 0,00
41.230,08 7.833,73 0,00 49.063,81
000081032 27.09.2010 MAT 3E7 226 233 000006 0224 22 17.01.2011
600 ST 858,96 02 EUR ZUGANG 0,00
5.153,76 979,21 0,00 6.132,97
000081251 29.09.2010 MAT 5T2 118 227 000006 0224 22 17.01.2011
1.200 ST 858,96 02 EUR ZUGANG 0,00
10.307,52 1.958,43 0,00 12.265,95
LIEFERER-NUMMER: 0002122700
K O P I E
ANLAGE ZUR GUTSCHRIFT 4600007719
VOM 17.01.2011 SEITE 1
IN DIESER GUTSCHRIFT SIND FO
usw.

Der Text ist nicht immer gleich, nur die Keywords (Lieferer und Zahlungsbetrag. Bei 0000 beginnt ein neuer Datensatz.

3 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

wenn das deine Textdatei ist, dann wüsste ich nicht, wie diese sinnvoll in Excel importiert werden soll. Was fehlt ist nämlich ein eindeutiger Trenner zwischen den einzelnen Feldern (z.B. Tabstopp, Semikolon, Komma o.ä.). Das Leerzeichen als Trenner scheidet ja offensichtlich aus.

Da wird dir das Makro zum Ersetzen auch nicht beim Import weiterhelfen.

Gruß

M.O.
0 Punkte
Beantwortet von
Wir haben in der Vergangenheit durchaus ähnliche Strukturen importiert bekommen. Die wurden so in Excel gepastet und dann per Makro verteilt. Bspw. mit Folgendem (für anderen Import):

Public Sub OPTabelleVerarbeiten()
Dim Zeile As Long
Dim Anzahl As Long
Dim LetzterKopf As Long
Dim Inhalt As String
Dim Z As String

' Ende finden
Zeile = ActiveSheet.UsedRange.Rows.Count
Do While InStr(Cells(Zeile, 1), "Endsumme") <= 0
Cells(Zeile, 1).Select
DoEvents
Rows(Zeile).Delete
Zeile = Zeile - 1
Loop
Rows(Zeile).Delete
Zeile = Zeile - 1
Anzahl = Zeile

Do While Zeile > 10
Cells(Zeile, 1).Select
DoEvents
Inhalt = Trim(Cells(Zeile, 1))
Z = Left(Inhalt, 1)
If ((Z = "1") Or (Z = "2") Or (Z = "3") Or (Z = "4") Or (Z = "5") _
Or (Z = "6") Or (Z = "7") Or (Z = "8") Or (Z = "9") Or (Z = "0") _
Or (Left(Inhalt, 9) = "OP-Salden")) _
And (Left(Inhalt, 9) <> "1 Schulte") Then
' Datenzeilen

If Mid(Cells(Zeile, 1), 10, 1) = "." Then
' Kopfzeile
Cells(Zeile, 1).TextToColumns Destination:=Cells(Zeile, 1), _
DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(12, 1), Array(96, 1), Array(115, 1), _
Array(124, 1)), TrailingMinusNumbers:=True

ElseIf Left(Inhalt, 9) = "OP-Salden" Then
' Summenzeile
Cells(Zeile, 1).TextToColumns Destination:=Cells(Zeile, 1), _
DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(21, 1), Array(32, 1), Array(36, 1), _
Array(51, 1), Array(68, 1), Array(93, 1), Array(105, 1), Array(118, 1), _
Array(132, 1)), _
TrailingMinusNumbers:=True
Else
' Datenzeile
Cells(Zeile, 1).TextToColumns Destination:=Cells(Zeile, 1), _
DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(21, 1), Array(32, 1), Array(36, 1), _
Array(51, 1), Array(68, 1), Array(93, 1), Array(105, 1), Array(118, 1)), _
TrailingMinusNumbers:=True


End If
Else
' Zwischenzeilen
Rows(Zeile).Delete
Anzahl = Anzahl - 1
End If

Zeile = Zeile - 1
Loop

Columns(1).Insert
Columns(1).Insert
Zeile = 12
LetzterKopf = 11
Do While Zeile <= Anzahl
Cells(Zeile, 1).Select
If InStr(Cells(Zeile, 3), ".") > 0 Then
' neuer Kopf
Rows(LetzterKopf).Delete
LetzterKopf = Zeile - 1
Anzahl = Anzahl - 1
Else
' Daten
Cells(LetzterKopf, 3).Copy Cells(Zeile, 1)
Cells(LetzterKopf, 4).Copy Cells(Zeile, 2)
If Cells(Zeile, 4) = "OP-Salden" Then
Range(Cells(Zeile, 4), Cells(Zeile, 12)).Cut Cells(Zeile, 12)
End If
Zeile = Zeile + 1
End If
Loop
Rows(LetzterKopf).Delete

End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

importiere die Datei mit den bestmöglichsten Ergebnissen
und bearbeite dann die exceldatei

diese exceldatei koennte dann hier hochgeladen werden zum anschauen

gruss nighty
...