Verwenden Sie reguläre Ausdrücke in Excel VBA
Visual Basic for Applications ist eine ereignisgesteuerte Programmiersprache, die für Microsoft-Anwendungen verwendet wird. Es ermöglicht Benutzern, Aufgaben zu automatisieren und mehrere Funktionalitäten entsprechend ihren Anforderungen neu zu schreiben.
VBA ermöglicht es dem Benutzer, mehrere Aufgaben mit Hilfe einiger Codeanweisungen auszuführen, die in Form eines Makros gespeichert sind. Das Makro ermöglicht es dem Benutzer, den Code immer wieder zu verwenden.
Reguläre Ausdrücke in Microsoft Excel
Microsoft Excel ist eine leistungsstarke Anwendung, die eine Datenmanipulation in großem Umfang ermöglicht. Mit Hilfe von Microsoft Excel ist es ganz einfach, Eingaben aus einer Datenbank zu entnehmen, die Daten zu manipulieren und die Ergebnisse zusammenzufassen.
Reguläre Ausdrücke (Regex) werden verwendet, um ein Muster innerhalb einer Zeichenfolge zu identifizieren und abzugleichen. Mit regulären Ausdrücken in Microsoft Excel können Sie Daten weitgehend manipulieren.
Beispielsweise können Sie die Dateneingabe nach Geschlecht aufteilen. Darüber hinaus können Sie auch überprüfen, ob Benutzer die richtige E-Mail-Adresse eingegeben haben oder nicht.
Kurz gesagt, es ist ziemlich einfach, formatierte Daten zu überprüfen und entsprechende Operationen auszuführen.
Erlauben Sie die Verwendung von regulären Ausdrücken in Excel
Um reguläre Ausdrücke in Microsoft Excel verwenden zu können, muss zwingend eine VBA-Referenz zu "Microsoft VBScript Regular Expressions 5.5"
hinzugefügt werden. Dies kann mit den folgenden Schritten erfolgen:
-
Wählen Sie in Excel die Registerkarte
Entwickler
-
Wählen Sie das Icon
Visual Basic
aus dem Ribbon-AbschnittCode
-
Wählen Sie im oberen Menü des Fensters
Microsoft Visual Basic for Applications
Tools
-
Wählen Sie
Referenzen
-
Prüfen Sie
Microsoft VBScript Reguläre Ausdrücke 5.5
Mit diesen Schritten können Sie reguläre Ausdrücke im VBA-Code verwenden.
Schreiben Sie einen regulären Ausdruck
Im Folgenden wurden einige grundlegende Definitionen genannt, die Ihnen helfen, einen regulären Ausdruck zu formulieren.
-
Erwähnen Sie einen Bereich
Das Symbol
-
wird verwendet, um einen Bereich zu definieren. Beispielsweise entspricht dasa-z
einer Zeichenfolge mit Kleinbuchstaben. -
Passen Sie ein Objekt an
Die eckigen Klammern
[]
werden verwendet, um genau einem der in den Klammern genannten Objekte zu entsprechen. Zum Beispiel entspricht das[wxyz]
einem einzelnen Buchstaben: w, x, y oder z. -
Passen Sie ein oder kein Vorkommen eines Musters an
Ein Fragezeichen
?
stimmt null oder einmal mit dem in den eckigen Klammern definierten Muster überein. Das[0-9]?
Übereinstimmungen mit einer leeren Zeichenfolge oder einer beliebigen Ziffer. -
Übereinstimmung mit null oder mehr Vorkommen eines Musters
Ein Sternchen
*
stimmt mit dem in den eckigen Klammern definierten Muster nicht oder mehrmals überein.[0-9]*
stimmt mit einer leeren Zeichenfolge oder einer beliebigen Ziffernfolge überein. -
Übereinstimmung mit einem oder mehreren Vorkommen eines Musters
Ein Pluszeichen
+
stimmt einmal oder mehrmals mit dem in den eckigen Klammern definierten Muster überein. Das[0-9]+
stimmt mit mindestens einer oder mehreren Ziffern überein. -
Vielfalt eines Musters
Damit sich ein Muster mehrmals wiederholen kann, werden die geschweiften Klammern
{}
verwendet. Zum Beispiel:6.1. Das
[x]{2}
entspricht zwei aufeinanderfolgenden Kleinbuchstabenx
. Es passt zuxx
.6.2. Das
[x]{1, 3}
stimmt mindestens1
bis maximal3
mal mit dem in den eckigen Klammern definierten Muster überein. Es passt zux
,xx
undxxx
. -
Der
ODER
-OperatorDer
ODER
-Operator|
ermöglicht es Ihnen, zwischen mehreren Optionen abzugleichen. Beispielsweise stimmt dasx|y|z
mit genau einer der Optionen überein. -
Der
NOT
-OperatorDer
NOT
-Operator^
stimmt nicht mit dem in eckigen Klammern definierten Muster überein. Zum Beispiel stimmt das[^a-z]
mit keinem Kleinbuchstaben überein. -
Gruppieren Sie verschiedene Übereinstimmungen
Die Klammer
()
wird verwendet, um die verschiedenen Übereinstimmungsmuster zu gruppieren. Zum Beispiel entspricht das(^[0-9]{3})([a-z])
dem Muster, das am Anfang drei Ziffern hat, gefolgt von einem Kleinbuchstaben. -
Verankerungsmuster
Der Operator
^
kann verwendet werden, um den Anfang einer Zeichenfolge zu finden. Beispielsweise sorgt der Ausdruck^a
dafür, dass der String mit einem kleinen^a
beginnt.Der Operator
$
wird verwendet, um das Ende einer Zeichenfolge abzugleichen. Beispielsweise sorgt der Ausdrucka$
dafür, dass der String mit einem kleinena$
endet.
Vorrang in regulären Ausdrücken
Unterschiedliche Operatoren haben unterschiedliche Prioritäten, die in der folgenden Tabelle aufgeführt sind:
Befehl | Name | Darstellung |
---|---|---|
1 | Klammern | ( ) |
2 | Multiplikatoren | ? + * {m,n} {m, n}? |
3 | Sequenz & Anker | abc ^ $ |
4 | Wechsel | | |
Zeichenabkürzungen
In regulären Ausdrücken werden mehrere vordefinierte Zeichenabkürzungen verwendet. Einige der vordefinierten Zeichenabkürzungen wurden in der folgenden Tabelle erwähnt.
Abkürzung | Definition |
---|---|
\d |
Zur Darstellung einer einzelnen Ziffer |
\D |
Zur Darstellung eines Nicht-Ziffern-Zeichens |
\w |
Zur Darstellung eines Wortzeichens |
\W |
Zur Darstellung eines Nicht-Wort-Zeichens |
\s |
Zur Darstellung eines Leerzeichens |
\S |
Zur Darstellung eines Nicht-Leerzeichens |
\n |
Um eine neue Linie darzustellen |
Beispiele für reguläre Ausdrücke in Excel VBA
Überprüfen Sie in den folgenden Beispielen den Zellenwert auf einen Großbuchstaben und ersetzen Sie ihn durch eine leere Zeichenfolge. Kurz gesagt, alle Großbuchstaben werden abgeglichen und aus der Eingabezeichenfolge gelöscht.
Führen Sie den Code als Makro aus
Der folgende Code nimmt A1
als Zellbezug und löscht alle Großbuchstaben aus dem auf A1
platzierten String. Das Ergebnis wird in einer Msgbox
angezeigt.
Beispielsweise ändert sich die Eingabezeichenfolge aAbBcC
im Meldungsfeld zu abc
.
Private Sub test()
Dim pattern As String: pattern = "[A-Z]"
Dim replace As String: replace = ""
Dim exp As New RegExp
Dim cellVal As String
Dim rangeref As Range
Set rangeref = ActiveSheet.Range("A1")
If pattern <> "" Then
cellVal = rangeref.Value
With exp
.Global = True
.MultiLine = True
.IgnoreCase = False
.pattern = pattern
End With
If exp.test(cellVal) Then
MsgBox (exp.replace(cellVal, replace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Schleife durch einen Bereich
Derselbe Code, der im ersten Beispiel verwendet wurde, kann geändert werden, indem eine For
-Schleife hinzugefügt wird, um das Makro über einen bestimmten Bereich auszuführen. Die Schleife wird für jede Zelle innerhalb des definierten Bereichs ausgeführt und zeigt die Ausgabe jeder Zelle in einem Meldungsfeld an.
Private Sub test()
Dim pattern As String: pattern = "[A-Z]"
Dim replace As String: replace = ""
Dim exp As New RegExp
Dim cellVal As String
Dim rangeref As Range
Set rangeref = ActiveSheet.Range("A1:A5")
For Each cell In rangeref
If pattern <> "" Then
cellVal = cell.Value
With exp
.Global = True
.MultiLine = True
.IgnoreCase = False
.pattern = pattern
End With
If exp.test(cellVal) Then
MsgBox (exp.replace(cellVal, replace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Erstellen Sie eine Funktion
Der folgende Code kann verwendet werden, um eine In-Cell-Funktion zu erstellen, die Vorkommen von Großbuchstaben in der Zeichenfolge löscht. Der Code ähnelt dem im ersten Beispiel verwendeten.
Es wurden einige Änderungen vorgenommen, um es in eine Funktion umzuwandeln.
Function cellTest(rangeref As Range) As String
Dim pattern As String: pattern = "[A-Z]"
Dim replace As String: replace = ""
Dim exp As New RegExp
Dim cellVal As String
If pattern <> "" Then
cellVal = rangeref.Value
With exp
.Global = True
.MultiLine = True
.IgnoreCase = False
.pattern = pattern
End With
If exp.test(cellVal) Then
cellTest = exp.replace(cellVal, replace)
Else
cellTest = "Not matched"
End If
End If
End Function
Wenn Sie cellTest(A1)
verwenden, wobei A1
DdEeleTte
enthält, gibt die Funktion delete
zurück.
Abschluss
Die Anzahl der generierbaren regulären Ausdrücke ist unbegrenzt. Sobald Sie ein allgemeines Format identifizieren können, das Sie benötigen, erstellen Sie einen regulären Ausdruck dafür und testen Sie alle darauf basierenden Zeichenfolgen.
Dies kann Ihnen helfen, Ihre Daten basierend auf verschiedenen Merkmalen aufzuteilen.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub