Um reguläre Ausdrücke direkt in Excel-Formeln zu verwenden, kann die folgende UDF (Benutzerdefinierte Funktion) hilfreich sein. Sie stellt die reguläre Ausdrucksfunktionalität mehr oder weniger direkt als Excel-Funktion zur Verfügung.
Wie es funktioniert
Es nimmt 2-3 Parameter entgegen.
- Ein Text, auf den der reguläre Ausdruck angewendet werden soll.
- Ein regulärer Ausdruck.
- Ein Formatstring, der angibt, wie das Ergebnis aussehen soll. Er kann
$0
, $1
, $2
und so weiter enthalten. $0
ist der gesamte Treffer, $1
und höher entsprechen den entsprechenden Treffern in dem regulären Ausdruck. Standardmäßig $0
.
Einige Beispiele
Extrahieren einer E-Mail-Adresse:
=regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+")
=regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+", "$0")
Ergebnis: some@email.com
Mehrere Teilstrings extrahieren:
=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "E-Mail: $2, Name: $1")
Ergebnis: E-Mail: some@email.com, Name: Peter Gordon
Ein kombiniertes Gedichtstück in einer einzigen Zelle in mehrere Zellen zerlegen:
=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 1)
=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 2)
Ergebnis: Peter Gordon
some@email.com
...
Wie man es verwendet
Um diese UDF zu verwenden, führen Sie folgendes aus (basierend grob auf dieser Microsoft-Seite. Sie haben dort einige gute zusätzliche Informationen!):
-
In Excel in einer makroaktivierten Datei ('.xlsm') drücken Sie ALT+F11
, um den Microsoft Visual Basic for Applications Editor zu öffnen.
-
Fügen Sie eine VBA-Referenz zur RegExp-Bibliothek hinzu (unverschämterweise kopiert von Portland Runners++-Antwort):
- Klicken Sie auf Extras -> Verweise (entschuldigen Sie bitte den deutschen Screenshot)
![Tools -> References]()
- Suchen Sie Microsoft VBScript Regular Expressions 5.5 in der Liste und aktivieren Sie das Kontrollkästchen daneben.
- Klicken Sie auf OK.
-
Klicken Sie auf Modul einfügen. Wenn Sie Ihrem Modul einen anderen Namen geben, stellen Sie sicher, dass das Modul nicht denselben Namen wie die unten stehende UDF hat (z.B. verursacht die Benennung des Moduls Regex
und der Funktion regex
Fehler #NAME!).
![Zweites Symbol in der Symbolleiste -> Modul]()
-
Fügen Sie in das große Textfenster in der Mitte Folgendes ein:
Function regex(strInput As String, matchPattern As String, Optional ByVal outputPattern As String = "$0") As Variant
Dim inputRegexObj As New VBScript_RegExp_55.RegExp, outputRegexObj As New VBScript_RegExp_55.RegExp, outReplaceRegexObj As New VBScript_RegExp_55.RegExp
Dim inputMatches As Object, replaceMatches As Object, replaceMatch As Object
Dim replaceNumber As Integer
With inputRegexObj
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = matchPattern
End With
With outputRegexObj
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = "\$(\d+)"
End With
With outReplaceRegexObj
.Global = True
.MultiLine = True
.IgnoreCase = False
End With
Set inputMatches = inputRegexObj.Execute(strInput)
If inputMatches.Count = 0 Then
regex = False
Else
Set replaceMatches = outputRegexObj.Execute(outputPattern)
For Each replaceMatch In replaceMatches
replaceNumber = replaceMatch.SubMatches(0)
outReplaceRegexObj.Pattern = "\$" & replaceNumber
If replaceNumber = 0 Then
outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).Value)
Else
If replaceNumber > inputMatches(0).SubMatches.Count Then
'regex = "A to high $ tag found. Largest allowed is $" & inputMatches(0).SubMatches.Count & "."
regex = CVErr(xlErrValue)
Exit Function
Else
outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).SubMatches(replaceNumber - 1))
End If
End If
Next
regex = outputPattern
End If
End Function
-
Speichern und schließen Sie das Fenster des Microsoft Visual Basic for Applications Editors.