Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: suchen mit Regexp

suchen mit Regexp
19.08.2007 14:05:54
Peter
Hallo Excel Experten,
ich suche in einem Text (z. B. in den Zellen der Spalte A) mittels Regexp nach einer Zeichenfolge Ziffer großes X Ziffer z. B. 3X4)
mit Pattern "\d\X\d" kein Problem.
Ich möchte aber gar nicht unbedingt die Zeichenfolge selbst, sondern deren Position in der jeweiligen Zelle wissen.
Muss ich das mit


For intIndex = 0 To objMatch.Count - 1
      intPosit = InStr(Range("A" & lngZeile).Value, objMatch(intIndex))
      If intPosit > 0 Then ...
      End If
Next intIndex 


das heißt mit InStr machen oder gibt es eine elegantere Lösung direkt die gefundene Position zu erhalten?
Für einen guten Tip, schon einmal vielen Dank im voraus.
Gruß Peter

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: suchen mit Regexp
19.08.2007 14:20:00
fcs
Hallo Pete,
ich kenne "Regexp" nicht, welche Möglichkeiten da bestehen.
Unter Excel-VBA gehts kaum eleganter (anders?). Außer, dass du "Range("A" & lngZeile)" durch "Cells(lngZeile,1)" ersetzt. Dann läuft der Code noch etwas zügiger.
Gruß
Franz

AW: suchen mit Regexp
19.08.2007 14:42:00
Peter
Hallo Franz,
da du schreibst "ich kenne "Regexp" nicht, welche Möglichkeiten da bestehen."
hilft mir deine Antwort leider recht wenig.
Warum Range("A" & lngZeile) langsamer als Cells(1, lngZeile) sein soll, erschließt sich mir auch nicht unbedingt.
Ich stelle meine Frage also wieder auf offen, in der Hoffnung auf eine Regexp-Kenner als Antworter.
Gruß Peter

Anzeige
AW: suchen mit Regexp
19.08.2007 18:51:00
Peter
Hallo Ramses,
danke für deine Info.
ich suche unbekannte Zeichenfolgen von 0X0 bis 9X9 und alle Varianten dazwischen.
Gruß Peter

AW: suchen mit Regexp
ransi
HAllo Peter
Ruf mal den Script-Editor auf.
In dessen Hilfe wird Regexp ansatzweise erklärt.
Dieses Beispiel habe ich daraus kopiert und leicht angepasst:
Option Explicit

Public Sub test()
MsgBox (RegAusdrTest("\d\X\d", "12X2abc34X1abX1"))
End Sub

Function RegAusdrTest(Suchmuster, Zeichenfolge)
Dim regAusdr
Dim Uebereinstimmung
Dim Uebereinstimmungen
Dim Rueckgabe
Set regAusdr = CreateObject("Vbscript.regexp") ' Erstellt einen regulären Ausdruck.
regAusdr.Pattern = Suchmuster ' Setzt das Muster.
regAusdr.IgnoreCase = True ' Ignoriert die Schreibweise.
regAusdr.Global = True ' Legt globales Anwenden fest.
Set Uebereinstimmungen = regAusdr.Execute(Zeichenfolge) ' Führt die Suche aus.
For Each Uebereinstimmung In Uebereinstimmungen ' Durchläuft die Auflistung der Übereinstimmungen.
    Rueckgabe = Rueckgabe & "Entsprechung gefunden bei "
    Rueckgabe = Rueckgabe & Uebereinstimmung.FirstIndex & ". Wert ist '"
    Rueckgabe = Rueckgabe & Uebereinstimmung.Value & "'." & vbCrLf
Next
RegAusdrTest = Rueckgabe
End Function


ransi

Anzeige
AW: suchen mit Regexp
19.08.2007 18:53:36
Peter
Hallo ransi,
danke für deine Info, sie gibt mir genau das, was ich möchte, nur bisher nicht gefunden hatte, weil Doku von Regexp und VBA bzw. Excel mager ist.
Gruß Peter

AW: suchen mit Regexp
19.08.2007 15:36:00
ingUR
Hallo, Peter,
Dein Match-Objekt solte die Startposition mit .FirstIndex preisgeben.

For each objm in objMatch
debug.print objm.firstIndex
next


Gruß,
Uwe

Anzeige
AW: @ingUR
19.08.2007 16:45:00
Gerd
Hallo Uwe,
FirstIndex
Ab welcher Exelversion ist diese Eigenschaft oder Methode vorhanden ?
Gruß Gerd

AW: @ingUR
19.08.2007 17:50:00
ingUR
Hallo, Gerd,
über die Historie der Objektmethode habe ich keine Information. Selber kann ich sie in MS-VB 6.0 (VBA für EXCEL 2000) einsetzen.
Gruß,
Uwe
P.S. als Ergänzung zur ersten knappen Antwort: Um Mehrfachfunde im Objekt objMatch zu sammeln, muß die Eigenschaft Global des RegEx-Objekt auf true gesetzt werden.

Anzeige
AW: suchen mit Regexp
19.08.2007 18:56:05
Peter
Hallo Uwe,
genau die Info fehlte mir bisher, denn ich habe keine Doku zu Regexp und VBA (wohl aber Perl und andere Sprachen) finden können.
Danke für deine Hilfe.
Gruß Peter
;
Anzeige
Anzeige

Infobox / Tutorial

Suchen mit Regexp in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit regulären Ausdrücken (RegExp) zu arbeiten, benötigst Du die VBA-Umgebung. Hier sind die Schritte, um eine einfache RegExp-Suche durchzuführen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineArbeitsmappe)“ und wähle „Modul einfügen“.

  3. RegExp-Objekt erstellen: Füge folgenden Code in das Modul ein:

    Option Explicit
    
    Public Sub RegExpSearch()
        Dim regEx As Object
        Dim matches As Object
        Dim cell As Range
        Dim pattern As String
    
        ' RegEx-Objekt erstellen
        Set regEx = CreateObject("VBScript.RegExp")
    
        ' Muster definieren
        pattern = "\d\X\d" ' Beispiel: Ziffer großes X Ziffer
    
        regEx.Pattern = pattern
        regEx.Global = True
    
        ' Durchlaufe die Zellen in Spalte A
        For Each cell In ThisWorkbook.Sheets("Sheet1").Range("A1:A100")
            If regEx.Test(cell.Value) Then
                Set matches = regEx.Execute(cell.Value)
                Dim match As Object
                For Each match In matches
                    Debug.Print "Entsprechung gefunden in Zelle " & cell.Address & ": " & match.Value
                Next match
            End If
        Next cell
    End Sub
  4. RegExp-Suche ausführen: Schließe den VBA-Editor und führe das Macro aus, um die Suche zu starten.


Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“: Stelle sicher, dass das RegExp-Objekt korrekt erstellt wurde und die Referenz auf die „Microsoft VBScript Regular Expressions“ gesetzt ist.
  • Problem mit der Mustererkennung: Überprüfe, ob das verwendete Muster korrekt ist. Der regex pattern sollte den gewünschten Suchbegriff präzise definieren.
  • Keine Übereinstimmungen gefunden: Stelle sicher, dass der Suchbereich korrekt angegeben ist. Eventuell sind die gesuchten Muster nicht in den Zellen vorhanden.

Alternative Methoden

Falls Du keine VBA-Programmierung nutzen möchtest, kannst Du auch die Suchfunktion von Excel verwenden, um einfache Muster zu finden. Allerdings sind die Möglichkeiten hier begrenzt und bieten nicht die Flexibilität von regulären Ausdrücken.


Praktische Beispiele

Hier sind einige nützliche Beispiele, wie Du regex in Excel verwenden kannst:

  1. Ziffern mit „X“ suchen:

    pattern = "\dX\d" ' Sucht nach Ziffern mit X zwischen
  2. Alle Ziffern finden:

    pattern = "\d+" ' Sucht nach einer oder mehreren Ziffern
  3. E-Mail-Adressen überprüfen:

    pattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}" ' Sucht nach E-Mail-Adressen

Tipps für Profis

  • Global-Option aktivieren: Setze regEx.Global = True, um alle Übereinstimmungen in einem Text zu finden, nicht nur die erste.
  • IgnoreCase verwenden: Setze regEx.IgnoreCase = True, wenn Du die Groß-/Kleinschreibung ignorieren möchtest.
  • Verständnis der regulären Ausdrücke: Nutze Online-Ressourcen wie Regex101 zur besseren Visualisierung und zum Testen Deiner regulären Ausdrücke.

FAQ: Häufige Fragen

1. Was sind reguläre Ausdrücke in Excel?
Reguläre Ausdrücke (RegExp) sind eine leistungsstarke Methode zur Mustererkennung und Textverarbeitung in Excel VBA.

2. Ab welcher Excel-Version ist die RegExp-Funktion verfügbar?
Die RegExp-Funktion ist in Excel VBA seit Excel 2000 verfügbar, da sie auf der VBScript-Implementierung basiert.

3. Wo finde ich die Dokumentation zu RegExp in Excel VBA?
Die Dokumentation ist in der Regel spärlich. Eine gute Anlaufstelle ist die Microsoft-Website oder Foren, die sich mit VBA beschäftigen.

4. Kann ich RegExp auch ohne VBA verwenden?
Nein, RegExp ist eine VBA-spezifische Funktion und kann nicht direkt in Excel-Formeln verwendet werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige