Verwendung von RegEx in Microsoft Word - Excel-Tipps

Lissa fragt:

Gibt es eine Möglichkeit, eine Zahl (immer eine Zufallszahl) nach dem Wort Fuchs zu ändern? Beispiel: Fuchs 23, Bär 1, Fuchs 398, Frosch 12, Fuchs 15. Ich möchte die Zahl auf die gleiche Farbe des Wortes Fuchs ändern.

Wir können in Microsoft Word nach Format suchen und ersetzen. Dies ist eine großartige Funktion, um den formatierten Text schnell zu finden und sogar das gesamte Textformat im Dokument zu ersetzen.

Wählen Sie im Menüband die Option Erweiterte Suche aus.

Dialogfeld "Suchen und Ersetzen"

Geben Sie den zu suchenden Text ein, klicken Sie auf die Schaltfläche Mehr, um erweiterte Optionen anzuzeigen, und klicken Sie auf die Schaltfläche Format.

Erweiterte Suchoptionen

Wählen Sie in den Einstellungen die Option Schriftart, und legen Sie die Textfarbe fest, die Sie im Dokument finden möchten. Klicken Sie auf OK, um das Dialogfenster Schriftart suchen zu schließen.

Wählen Sie im Dialogfeld "Schriftart suchen" die Textfarbe aus.

Klicken Sie auf Weiter suchen, und Sie sehen, dass das erste Vorkommen des gesuchten Textes in einer bestimmten Farbe ausgewählt wird.

Weiter suchen, um das erste Vorkommen zu finden.

Wir können auch kompliziertere Suchvorgänge mithilfe von Platzhaltern durchführen. Mit dem nativen Suchmodul von Word können wir jedoch nicht suchen, wie Lissa gefragt hat.

Hier können wir RegEx ins Spiel bringen!

VBSCript-Bibliothek für reguläre Ausdrücke

VBA wird nicht mit Unterstützung für reguläre Ausdrücke ausgeliefert. Die Microsoft VBScript-Bibliothek enthält jedoch leistungsstarke Funktionen für reguläre Ausdrücke. Diese Bibliothek ist Teil von Internet Explorer 5.5 und höher und daher auf allen Computern unter Windows XP, Vista, 7, 8, 8.1 oder 10 verfügbar.

Mac-Benutzer

Da Internet Explorer keine Mac-Anwendung ist, ist diese Bibliothek auf dem Mac nicht vorhanden. Daher funktionieren die folgenden VBA-Beispiele unter Mac nicht.

Um diese Bibliothek in VBA zu verwenden, wechseln Sie zu VBE, wählen Sie im VBE-Menü Projekt und Verweise aus, scrollen Sie in der Liste nach unten, um das Element "Microsoft VBScript Regular Expressions 5.5" zu finden, und aktivieren Sie es, um es in die Anwendung aufzunehmen.

VBScript-Bibliothek für reguläre Ausdrücke

Fügen Sie ein neues Modul ein und kopieren Sie den folgenden Code und fügen Sie ihn in dieses Modul ein.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Bei diesem Verfahren wird der Beispieltext verwendet, die Produktcodes anhand des angegebenen Musters ermittelt, das mit "Fuchs", einem Leerzeichen und einer Zahl beginnt, und die übereinstimmenden Codes im Direktfenster gedruckt (drücken Sie in VBE Strg + G, wenn dies nicht der Fall ist schon sichtbar).

Übereinstimmende Produktcodes werden im Direktfenster gedruckt.

d+ Die Zeichenklasse im Muster definiert ein oder mehrere numerische Zeichen, und das Muster ist im Grunde ein "Fuchs" -Präfix, gefolgt von einem Leerzeichen gefolgt von Zahlen.

Mehr Info

Weitere Informationen zu Escapezeichen, Zeichenklassen und Ankern finden Sie unter Reguläre Ausdruckssprache - Kurzreferenz.

Kopieren Sie den folgenden Code und fügen Sie ihn ein, um RegEx in Aktion zu sehen und die Leerzeichen aus den Produktcodes zu entfernen.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Diese Prozedur ersetzt den Inhalt des Beispieltextes, indem die Leerzeichen aus den Produktcodes entfernt werden, die mit dem angegebenen Muster übereinstimmen, und der Ergebnistext im Direktfenster gedruckt wird.

Ersetzter Text, der im Direktfenster gedruckt wurde.

Bitte beachten Sie, dass sich das Muster geringfügig vom ersten Code unterscheidet. Begriffe in diesem Muster sind in Klammern eingeschlossen, und entsprechende Begriffe werden in der Ersetzungsmethode in der angegebenen Reihenfolge als $ 1 und $ 2 verwendet. Diese Prozedur verbindet einfach die beiden Begriffe ohne Leerzeichen.

Zurück zur Frage

Kehren wir zu dem Beispieltext zurück, den wir am Anfang dieses Artikels verwendet haben.

Beispieltext

Wir müssen "Fuchs" gefolgt von numerischen Zeichen finden und die Übereinstimmung ändern, indem wir die Farbe des Abschnitts "Fuchs" im übereinstimmenden Text verwenden.

Obwohl RegEx mit dem angegebenen Muster sehr gut übereinstimmt, kann es die Textfarbe im Word-Dokument nicht ersetzen. Daher werden wir die RegEx- und Word VBA-Methoden im folgenden Verfahren kombinieren.

Hier sind die Schritte:

  1. Finde die Übereinstimmungen mit RegEx.
  2. Durchsuchen Sie jeden übereinstimmenden Text mithilfe der Wortsuchmethode.
  3. Suchen Sie die Farbe des ersten Wortes im gefundenen Bereich.
  4. Ändern Sie die Farbe des gefundenen Bereichs mit der Farbe im vorherigen Schritt.

Wechseln Sie zu VBE und fügen Sie ein neues Modul ein. Stellen Sie sicher, dass dem Projekt die VBScript-Bibliothek für reguläre Ausdrücke hinzugefügt wurde, und kopieren Sie den folgenden Code und fügen Sie ihn in dieses neue Modul ein.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Führen Sie den Code aus, und hier ist das Ergebnis.

Ergebnis

Word-Datei herunterladen

So laden Sie die Word-Datei herunter: How-to-Use-Regex-in-Microsoft-Word.docm

RegEx in Excel?

Regex fehlt in Excel vollständig. Wir können jedoch weiterhin reguläre VBScript-Ausdrücke in Excel VBA verwenden.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Interessante Beiträge...