oneill1286

Daten aus Excel mit VBA auslesen und bestimmte Wörter ausschließen

Hallo zusammen,

bin neu im Forum und würde gerne folgendes Umsetzen. Ich möchte aus vielen Textdateien etwas bestimmtest auslesen. Das sammeln der Zeile aus den Textdateien habe ich mit folgendem VBA ermöglicht.

Sub Sammeln()

Ordner = "P:\Fahrpläne 2018"  
Dateityp = LCase("txt")  
Felder = Array("Wagenzuglast:")  

MaxFeldIndex = UBound(Felder)
Dim FeldL() As Integer
ReDim FeldL(MaxFeldIndex)
For i = 0 To MaxFeldIndex
    FeldL(i) = Len(Felder(i))
Next

Zeile = 2
Rows(CStr(Zeile) & ":65536").ClearContents  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Datei In fso.GetFolder(Ordner).Files
    If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then
        Daten = Datei.OpenAsTextStream.ReadAll
        Cells(Zeile, 1) = fso.GetBaseName(Datei.Name)
        For i = 0 To MaxFeldIndex
            Pos = InStr(Daten, Felder(i))
            If Pos > 0 Then
                Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
                Cells(Zeile, i + 2).Value = Wert
            End If
        Next
       Zeile = Zeile + 1
    End If
Next
End Sub

Nun wird allerdings der Wert der ganzen Zeile ausgegeben: Wagenzuglast:480 t Wagenzuglänge:400 m Gesamtzuglänge:417 m, Mbr 67 R/P den Fettgedruckten Bereich würde ich gerne rausfiltern. Wie mache ich das?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 479036

Url: https://administrator.de/forum/daten-aus-excel-mit-vba-auslesen-und-bestimmte-woerter-ausschliessen-479036.html

Ausgedruckt am: 13.05.2025 um 17:05 Uhr

Meierjo
Lösung Meierjo 29.07.2019 um 10:39:43 Uhr
Goto Top
Hallo

Wenn die Länge des zu behaltenden Strings (Wagenzuglast:480 t) immer gleich lang ist, kannst du einfach nur links die ersten 18 Buchstaben des Strings verwenden
ungetestet etwa so:
Wert = Left(Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0)),18)


Gruss
emeriks
emeriks 29.07.2019 aktualisiert um 11:33:22 Uhr
Goto Top
bzw. wenn "Wagenzuglänge" immer der zweite Wert ist, dann einfach danach splitten

Wert = Trim(Split(Zeile, "Wagenzuglänge")(0))  

E.
140447
140447 29.07.2019 aktualisiert um 11:45:58 Uhr
Goto Top
Und wenn's egal sein soll wo der Wert steht, bietet sich natürlich immer auch Regex an
"Wagenzuglast:([^:]+) "  
Kraemer
Kraemer 29.07.2019 um 11:43:59 Uhr
Goto Top
Moin,

zuverlässig geht das nur mittels Regex:

Pattern:
(Wagenzuglast:\d+\s*t)

HowTo: https://www.vba-tutorial.de/applikation/regexp.htm
oneill1286
oneill1286 29.07.2019 um 13:34:51 Uhr
Goto Top
Vielen Dank, das hat mir schon sehr weitergeholfen.

Nun erzeugt der Script in der Spalte A den Dateinamen, dieser kommt ja aus den .txt-Dateien. Einige Textdateien sind allerdings doppelt, die ich in der Abfrage nicht berücksichtigen möchte. Wie bekomme ich diese nun noch herausgefiltert. Der Dateiname lautet z.B. so:

0112_3_92062_EHGG _E_00 - ENr130882898.txt
0112_3_92062_EHGG _E_01 - ENr130918889.txt
emeriks
emeriks 29.07.2019 um 14:42:05 Uhr
Goto Top
Was ist am Beispiel doppelt?