oneill1286
Goto Top

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?

Content-Key: 479036

Url: https://administrator.de/contentid/479036

Printed on: May 22, 2024 at 14:05 o'clock

Member: Meierjo
Solution Meierjo Jul 29, 2019 at 08:39:43 (UTC)
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
Member: emeriks
emeriks Jul 29, 2019 updated at 09:33:22 (UTC)
Goto Top
bzw. wenn "Wagenzuglänge" immer der zweite Wert ist, dann einfach danach splitten

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

E.
Mitglied: 140447
140447 Jul 29, 2019 updated at 09:45:58 (UTC)
Goto Top
Und wenn's egal sein soll wo der Wert steht, bietet sich natürlich immer auch Regex an
"Wagenzuglast:([^:]+) "  
Member: Kraemer
Kraemer Jul 29, 2019 at 09:43:59 (UTC)
Goto Top
Moin,

zuverlässig geht das nur mittels Regex:

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

HowTo: https://www.vba-tutorial.de/applikation/regexp.htm
Member: oneill1286
oneill1286 Jul 29, 2019 at 11:34:51 (UTC)
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
Member: emeriks
emeriks Jul 29, 2019 at 12:42:05 (UTC)
Goto Top
Was ist am Beispiel doppelt?