supertux
Goto Top

Excel-VBA Text suchen kopieren anpassen

Hallo, ich möchte gerne aus einem Logfile alle Einträge mit :Record in Tabelle2 kopieren.
Bisher habe ich folgende VBA-Codes im Internet gefunden und auf meine Bedürfnisse angepasst.

Modul1

Public Sub DateiImport()
Worksheets("Tabelle1").Range("A1:A6000").ClearContents  
Selection.ClearContents
Dim varPath As Variant
varPath = Application.GetOpenFilename("Text Files (*.*), *.*")  
If varPath = False Then Exit Sub
Call Workbooks.OpenText(Filename:=varPath, _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
Tab:=True, _
DecimalSeparator:=".", _  
ThousandsSeparator:=",")  
With ActiveWorkbook
.Worksheets(1).UsedRange.Copy Destination:=Tabelle1.Cells(1)
.Close SaveChanges:=False
End With
End Sub

Modul2
Option Explicit
Sub SuchenKopieren()
Dim RngZ As Range, x As Long
x = 0
Worksheets("Tabelle2").Range("A1:A6000").ClearContents  
For Each RngZ In Worksheets("Tabelle1").Range("A1:A6000")  
If RngZ Like "*Record*" Then x = x + 1: Worksheets("Tabelle2").Cells(x, 1) = RngZ  
Next
End Sub

Bisher funktioniert es soweit, nur mit "*Record*" kopiert es zuviel (siehe unten), wenn ich den * vor Record entferne geht es nicht mehr.
Eigentlich benötige ich in Tabelle2 nur die in Daten aus den Hochkommas.

2021.10.30 07:47:17.163 ALWAYS : :Record '020202930202121222020202020202020' Beispieltext
2021.10.30 21:18:50.501 ALWAYS : :Record '102912392348194042929329329392192' Beispieltext
2021.10.30 21:18:50.501 ALWAYS : :Record 'X392jdXeuAhdd38293293293812818281' Beispieltext

Es kann auch ein zusätzlicher VBA-Code sein, der mir aus Tabelle2 die ganzen Record's in Tabelle3 kopiert.
Was auch schön wäre, wenn doppelte Records in Tabelle2 farblich markiert werden und die nicht doppelten
in Tabelle3 ab A1 nach unten stehen.

supertux

Content-Key: 1457149409

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

Printed on: May 9, 2024 at 19:05 o'clock

Mitglied: 149569
Solution 149569 Nov 02, 2021 updated at 10:18:29 (UTC)
Goto Top
im Internet gefunden und auf meine Bedürfnisse angepasst.
Dann copy & paste mal weiter face-big-smile.
Sub Import()
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set regex = CreateObject("vbscript.regexp")  
    regex.Global = True: regex.IgnoreCase = True
    regex.Pattern = ":Record\s*'([^']+)'"  
    varPath = Application.GetOpenFilename("Text Files (*.*), *.*")  
    If varPath = False Then Exit Sub
    With Sheets("Tabelle2")      
        .Range("A:A").NumberFormat = "@"  
        Set matches = regex.Execute(fso.OpenTextFile(varPath, 1,False,-2).ReadAll())
        If matches.Count > 0 Then
            For Each m In matches
                .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = m.submatches(0)  
            Next
        End If
       .Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes  
    End With
End Sub
Member: supertux
supertux Nov 02, 2021 at 09:42:30 (UTC)
Goto Top
Bei mir öffnet sich hier nur das Dialogfeld zum auswählen der Datei.
Mehr passiert nicht face-sad
Mitglied: 149569
149569 Nov 02, 2021 updated at 09:57:12 (UTC)
Goto Top
Zitat von @supertux:

Bei mir öffnet sich hier nur das Dialogfeld zum auswählen der Datei.
Mehr passiert nicht face-sad

Passiert alles direkt in Tabelle2 ohne Umwege über Tabelle1 face-wink. Habs hier erfolgreich mit den Test-Daten getestet die du hier ja leider ohne Codetags bereitgestellt hast daher gehen Tabs etc. verloren, habe den regex diesbezüglich noch etwas "fine getuned" ...

Ergebnis in Tabelle2

screenshot
Member: supertux
supertux Nov 02, 2021 at 09:57:55 (UTC)
Goto Top
Ich stand auf den Schlauch face-sad
Die Daten habe ich ja schon aus dem Orignal-Logfile nach Tabelle2 kopiert face-smile
Und ich dachte, ich muss das Original.-Logfile öffnen, aber es bezoge sich auf die Daten unten

2021.10.30 07:47:17.163 ALWAYS : :Record '020202930202121222020202020202020' Beispieltext  
2021.10.30 21:18:50.501 ALWAYS : :Record '102912392348194042929329329392192' Beispieltext  
2021.10.30 21:18:50.501 ALWAYS : :Record 'X392jdXeuAhdd38293293293812818281' Beispieltext  

Geht das auch mit dem Original-Logfile?, dann kann ich mir mein Sub SuchenKopieren() sparen.
Das funktioniert, aber die doppelten Einträge sind noch vorhanden.
Mitglied: 149569
149569 Nov 02, 2021 updated at 10:04:33 (UTC)
Goto Top
Zitat von @supertux:
Geht das auch mit dem Original-Logfile?,
Klar dafür war's gedacht.
Das funktioniert, aber die doppelten Einträge sind noch vorhanden.
Das kannst du ja leicht über die Toolbar nachholen oder via Code ... habe ich oben noch in Zeile 16 ergänzt
Member: supertux
supertux Nov 02, 2021 at 10:11:34 (UTC)
Goto Top
Habe es nochmal getestet, mit dem Original-Logfile funktioniert es nicht.

Nur wenn ich die Daten wie oben im Code-Tag als Text-Dokument speicher, kann ich diese importieren
und halte die Ergenisse im Hochkomma. Aber eben nicht mit dem Original-Logfile.
Mitglied: 149569
149569 Nov 02, 2021 updated at 10:19:06 (UTC)
Goto Top
Zitat von @supertux:

Habe es nochmal getestet, mit dem Original-Logfile funktioniert es nicht.

Nur wenn ich die Daten wie oben im Code-Tag als Text-Dokument speicher, kann ich diese importieren
und halte die Ergenisse im Hochkomma. Aber eben nicht mit dem Original-Logfile.

Dann checke die Kodierung des Logfiles und passe diese bei OpenTextfile an. habs mal auf ANSI eingestellt, war ASCII.
https://docs.microsoft.com/de-de/office/vba/language/reference/user-inte ...
Member: supertux
supertux Nov 02, 2021 at 10:23:10 (UTC)
Goto Top
Mit -1 funktioniert es face-smile

Set matches = regex.Execute(fso.OpenTextFile(varPath, 1, False, -1).ReadAll())
Mitglied: 149569
149569 Nov 02, 2021 at 10:24:11 (UTC)
Goto Top
Na dann war's n Unicode File.
Member: supertux
supertux Nov 02, 2021 at 10:27:43 (UTC)
Goto Top
Vielen Dank für deine Hilfe face-smile
Mitglied: 149569
149569 Nov 02, 2021 updated at 10:30:05 (UTC)
Goto Top
👍 Fehlt dann nur noch der Haken am Thread.