Werte aus txt-File in Excel einlesen
Hallo mal wieder,
folgendes Problem --> habe ein TXT-File in welchen viele viele Daten angegeben sind - die Werte sind so aufgebaut -->
?FELDBEZEICHNUNG FELDINHALT FEHLERTEXT
"?FIRMENNUMMER (MANDANT) " 11111
"?KUNDENNUMMER " 1111
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 22222
"?KUNDENNUMMER " 2222
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 11111
"?KUNDENNUMMER " 112211
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 33333
"?KUNDENNUMMER " 1212
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
nun mein Problem - ich wuerde die Daten gerne so einlesen das er mir nur die Daten des Lieferanten 1212 einliesst (Dieser kommt in dem Text-File öfter vor) UND die Daten die jetzt links stehen --> KUNDENNUMMER ; FIRMENNUMMER (MANDANT) etc als Spaltenüberschriften nimmt.
Das einlesen einer Textdatei in Excel ist das kleinste Problem - simple everst!
Aber das umsteigen von der Zellen"Überschrfit" in ne Spalten"Überschrift" -- keine Ahnung und auch das er mir nur die Werte des KUNDEN 1212 ins Excel übergibt.
Und die Feldbezeichnung Feldinhalt und Fehlertext sollte dann lnks in den Zellen stehen...
HAt da jemand ne Idee zu?
Gruß Manuel
folgendes Problem --> habe ein TXT-File in welchen viele viele Daten angegeben sind - die Werte sind so aufgebaut -->
?FELDBEZEICHNUNG FELDINHALT FEHLERTEXT
"?FIRMENNUMMER (MANDANT) " 11111
"?KUNDENNUMMER " 1111
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 22222
"?KUNDENNUMMER " 2222
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 11111
"?KUNDENNUMMER " 112211
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
"?FIRMENNUMMER (MANDANT) " 33333
"?KUNDENNUMMER " 1212
"?KUNDENINDEX " 0
"?LIEFERUNGS-/LEISTUNGSDATUM " 20080229
nun mein Problem - ich wuerde die Daten gerne so einlesen das er mir nur die Daten des Lieferanten 1212 einliesst (Dieser kommt in dem Text-File öfter vor) UND die Daten die jetzt links stehen --> KUNDENNUMMER ; FIRMENNUMMER (MANDANT) etc als Spaltenüberschriften nimmt.
Das einlesen einer Textdatei in Excel ist das kleinste Problem - simple everst!
Aber das umsteigen von der Zellen"Überschrfit" in ne Spalten"Überschrift" -- keine Ahnung und auch das er mir nur die Werte des KUNDEN 1212 ins Excel übergibt.
Und die Feldbezeichnung Feldinhalt und Fehlertext sollte dann lnks in den Zellen stehen...
HAt da jemand ne Idee zu?
Gruß Manuel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82640
Url: https://administrator.de/contentid/82640
Ausgedruckt am: 20.11.2024 um 13:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo manuel5!
So ganz klar sind mir Deine Ausgangsdaten und auch Dein Vorhaben nicht - wie ich das zu verstehen meine, würde sich aus Deinem angeführten Beispiel unter Berücksichtigung der Forderung, nur Daten mit "?KUNDENNUMMER " 1212 zu verwenden, etwa folgende Exceltabelle ergeben:
Entspricht dies Deiner Zielvorstellung? Falls nein, versuche doch bitte, die gewünschte Anordnung ebenfalls tabellarisch (siehe dazu die "Formatierungs-Hilfe" in "Häufige Fragen" bzw beim Erstellen eines Kommentars) darzustellen.
Auch der Inhalt der Textdatei wird mit einer anderen Formatierung (verwende dazu -Tags) leichter nachvollziehbar.
Grüße
bastla
So ganz klar sind mir Deine Ausgangsdaten und auch Dein Vorhaben nicht - wie ich das zu verstehen meine, würde sich aus Deinem angeführten Beispiel unter Berücksichtigung der Forderung, nur Daten mit "?KUNDENNUMMER " 1212 zu verwenden, etwa folgende Exceltabelle ergeben:
A | B | C | D | E | |
---|---|---|---|---|---|
1 | FELDBEZEICHNUNG | FIRMENNUMMER (MANDANT) | KUNDENNUMMER | KUNDENINDEX | LIEFERUNGS-/LEISTUNGSDATUM |
2 | FELDINHALT | 33333 | 1212 | 0 | 20080229 |
3 | FEHLERTEXT |
Entspricht dies Deiner Zielvorstellung? Falls nein, versuche doch bitte, die gewünschte Anordnung ebenfalls tabellarisch (siehe dazu die "Formatierungs-Hilfe" in "Häufige Fragen" bzw beim Erstellen eines Kommentars) darzustellen.
Auch der Inhalt der Textdatei wird mit einer anderen Formatierung (verwende dazu -Tags) leichter nachvollziehbar.
Grüße
bastla
Hallo manuel5!
Ein Excel-Makro zur Umsetzung Deines Vorhabens könnte etwa so aussehen:
Zur Verwendung: Erstelle eine neue Excel-Mappe, wechsle über Rechtsklick auf das Blattregister "Tabelle1" und die Auswahl "Code anzeigen" in den VBA-Editor und füge dort das Makro in das große Codefenster ein.
Die Zeilen zwischen "####### Anpassungen #######" und "####### Anpassungen Ende #######" enthalten die Vorgaben, welche Du zunächst überprüfen und (zumindest hinsichtlich des Dateinamens) anpassen musst.
Die Einschränkung auf eine vorgegebene Kundennummer (im Beispiel "1212") erfolgt in dieser Version so, dass geprüft wird, ob die eingelesene Kundennummer den Suchbegriff enthält - daher würden auch Datensätze des Kunden "12125" erfasst. Falls Du auf eine genaue Übereinstimmung überprüfen willst, musst Du das Apostroph (') vor der Zeile
entfernen und vor die vorherige Zeile
setzen.
Starte das Makro, indem Du den Cursor an eine beliebige Position zwischen "Sub Einlesen()" und "End Sub" setzt und "F5" drückst oder die grüne "Play"-Schaltfläche in der Symbolleiste anklickst - das sollte es eigentlich gewesen sein ...
Grüße
bastla
Ein Excel-Makro zur Umsetzung Deines Vorhabens könnte etwa so aussehen:
Option Explicit
Sub Einlesen()
Dim Kunde As String, Kundenfeld As Integer, Feldauswahl(), Feldbezeichnungen()
Dim fso As Object, TextDatei As Object, Felder() As String, Zeile As Integer, i As Integer, Daten() As String
'####### Anpassungen #######
Const Datei As String = "D:\Datei mit Buchungen.txt"
Kunde = "1212" 'nur Daten dieses Kunden übernehmen ("" für: alle Kunden)
Kundenfeld = 4 'Lfd (Zeilen-)Nummer des Feldes mit der Kundennummer lt Textdatei
Feldbezeichnungen = Array("FIRMENNUMMER (MANDANT)", "KUNDENNUMMER", "KUNDENINDEX", "LIEFERUNGS-/LEISTUNGSDATUM", "FEHLER")
Feldauswahl = Array(3, 4, 5, 6, 30) 'Lfd (Zeilen-)Nummer des in die Tabelle einzutragenden Feldes
Zeile = 1 'Zeilennummer für Spaltenüberschriften
Const Header As String = "?FELDBEZEICHNUNG FELDINHALT ""FEHLERTEXT" 'erstes Feld jeden Datensatzes
Const FeldAnzahl As Integer = 30 'Feldanzahl je Datensatz
'####### Anpassungen Ende #######
For i = 0 To UBound(Feldbezeichnungen)
Cells(Zeile, i + 1).Value = Feldbezeichnungen(i)
Next
Zeile = Zeile + 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set TextDatei = fso.OpenTextFile(Datei, 1)
If Not TextDatei.AtEndOfStream Then
Do
ReDim Felder(FeldAnzahl) 'Array für neuen Datensatz löschen
Felder(1) = TextDatei.ReadLine
If UCase(Felder(1)) = UCase(Header) Then 'Datensatz gefunden
For i = 2 To FeldAnzahl
If Not TextDatei.AtEndOfStream Then
Daten = Split(TextDatei.ReadLine, """")
Felder(i) = Trim(Daten(UBound(Daten)))
Else
MsgBox "Datensatz nicht vollständig!", vbExclamation, "Datenfehler"
Exit Do
End If
Next
If InStr(1, Felder(Kundenfeld), Kunde, vbTextCompare) Then 'nur Daten des vorgegebenen Kunden eintragen
'If Felder(Kundenfeld) = Kunde Then 'Daten nur bei exakter Übereinstimmung eintragen
For i = 0 To UBound(Feldauswahl) 'vorgegebene Felder in Tabelle eintragen
Cells(Zeile, i + 1).Value = Felder(Feldauswahl(i))
Next
Zeile = Zeile + 1
End If
End If
Loop Until TextDatei.AtEndOfStream
Else
MsgBox "Die Datei " & Datei & " enthält keine Daten!", vbExclamation, "Keine Daten gefunden!"
End If
TextDatei.Close
End Sub
Die Zeilen zwischen "####### Anpassungen #######" und "####### Anpassungen Ende #######" enthalten die Vorgaben, welche Du zunächst überprüfen und (zumindest hinsichtlich des Dateinamens) anpassen musst.
Die Einschränkung auf eine vorgegebene Kundennummer (im Beispiel "1212") erfolgt in dieser Version so, dass geprüft wird, ob die eingelesene Kundennummer den Suchbegriff enthält - daher würden auch Datensätze des Kunden "12125" erfasst. Falls Du auf eine genaue Übereinstimmung überprüfen willst, musst Du das Apostroph (') vor der Zeile
'If Felder(Kundenfeld) = Kunde Then 'Daten nur bei exakter Übereinstimmung eintragen
If InStr(1, Felder(Kundenfeld), Kunde, vbTextCompare) Then 'nur Daten des vorgegebenen Kunden eintragen
Starte das Makro, indem Du den Cursor an eine beliebige Position zwischen "Sub Einlesen()" und "End Sub" setzt und "F5" drückst oder die grüne "Play"-Schaltfläche in der Symbolleiste anklickst - das sollte es eigentlich gewesen sein ...
Grüße
bastla
Hallo manuel5!
Seit wann soll denn "AUFTRAGSNUMMER FORMAL FEHLERHAFT" das Kriterium für das Eintragen eines Datensatzes sein?
However - wenn Du die Zeilen
durch
ersetzt, sollte es auch damit klappen (vorausgesetzt, die Struktur Deiner Textdatei entspricht dem oben angegebenen Beispiel und es ist mit "AUFTRAGSNUMMER" die Zeile 23 gemeint) ...
Grüße
bastla
Seit wann soll denn "AUFTRAGSNUMMER FORMAL FEHLERHAFT" das Kriterium für das Eintragen eines Datensatzes sein?
However - wenn Du die Zeilen
Kunde = "1212" 'nur Daten dieses Kunden übernehmen ("" für: alle Kunden)
Kundenfeld = 4 'Lfd (Zeilen-)Nummer des Feldes mit der Kundennummer lt Textdatei
Kunde = "FORMAL FEHLERHAFT"
Kundenfeld = 23
Grüße
bastla