Wyrażenia regularne są używane do dopasowania wzorca.
Aby użyć w programie Excel, wykonaj następujące kroki:
Krok 1 : Dodaj odniesienie VBA do „Wyrażeń regularnych Microsoft VBScript 5.5”
- Wybierz kartę „Deweloper” ( nie mam tej karty, co mam zrobić? )
- Wybierz ikonę „Visual Basic” z sekcji wstążki „Kod”
- W oknie „Microsoft Visual Basic for Applications” wybierz „Narzędzia” z górnego menu.
- Wybierz „Referencje”
- Zaznacz pole obok „Microsoft VBScript Regular Expressions 5.5”, aby dołączyć do skoroszytu.
- Kliknij OK"
Krok 2 : Zdefiniuj swój wzór
Podstawowe definicje:
- Zasięg.
- Np.
a-zDopasowuje małe litery od a do z
- Np.
0-5Pasuje do dowolnej liczby od 0 do 5
[] Dopasuj dokładnie jeden z obiektów w tych nawiasach.
- Np.
[a]Pasuje do litery a
- Np.
[abc]Pasuje do jednej litery, która może być a, b lub c
- Np.
[a-z]Pasuje do dowolnej małej litery alfabetu.
()Grupuje różne dopasowania do celów zwrotu. Zobacz przykłady poniżej.
{} Mnożnik dla powtarzających się kopii zdefiniowanego wcześniej wzoru.
- Np.
[a]{2}Pasuje do dwóch kolejnych małych liter a:aa
- Np
[a]{1,3}pasuje co najmniej jeden, a maksymalnie trzy niższe literę a, aa,aaa
+ Dopasuj co najmniej jeden lub więcej wcześniej zdefiniowanych wzorów.
- Np
a+dopasuje rzędu A w a, aa, aaa, i tak dalej
? Dopasuj zero lub jeden ze zdefiniowanych wcześniej wzorców.
- Np. Wzorzec może, ale nie musi być obecny, ale można go dopasować tylko raz.
- Np.
[a-z]?Dopasowuje pusty ciąg lub dowolną małą literę.
* Dopasuj zero lub więcej wzorca zdefiniowanego przed nim. - Np. Symbol wieloznaczny dla wzoru, który może, ale nie musi być obecny. - Np. [a-z]*Dopasowuje pusty ciąg lub ciąg małych liter.
. Pasuje do dowolnego znaku z wyjątkiem znaku nowej linii \n
- Np.
a.Dopasowuje ciąg dwóch znaków rozpoczynający się od a, a kończący na czymkolwiek oprócz\n
| LUB operator
- Np.
a|bOznacza albo aalbo bmożna je dopasować.
- Np.
red|white|orangePasuje dokładnie do jednego z kolorów.
^ NIE operator
- Np.
[^0-9]Znak nie może zawierać liczby
- Np.
[^aA]Znak nie może być małymi alub dużymi literamiA
\ Ucieka specjalnemu znakowi, który następuje (przesłania powyższe zachowanie)
Wzory kotwiczenia:
^ Dopasowanie musi nastąpić na początku łańcucha
- Np.
^aPierwszy znak musi być małą literąa
- Np.
^[0-9]Pierwszy znak musi być liczbą.
$ Dopasowanie musi nastąpić na końcu ciągu
- Np.
a$Ostatni znak musi być małą literąa
Tabela pierwszeństwa:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Predefiniowane skróty postaci:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
Przykład 1 : Uruchom jako makro
Poniższe przykładowe makro sprawdza wartość w komórce, A1aby sprawdzić, czy pierwsze 1 lub 2 znaki są cyframi. Jeśli tak, są one usuwane, a reszta łańcucha jest wyświetlana. Jeśli nie, pojawi się okno z informacją, że nie znaleziono dopasowania. A1Wartości komórek 12abczwrócą abc, wartość 1abczwrócą abc, wartość abc123zwrócą „Niepasujące”, ponieważ cyfry nie były na początku łańcucha.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Przykład 2 : Uruchom jako funkcję w komórce
Ten przykład jest taki sam jak w przykładzie 1, ale jest skonfigurowany do działania jako funkcja w komórce. Aby użyć, zmień kod na ten:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
Umieść swoje ciągi („12abc”) w komórce A1. Wprowadź tę formułę =simpleCellRegex(A1)w komórce, B1a wynikiem będzie „abc”.

Przykład 3 : Pętla przez zakres
Ten przykład jest taki sam jak w przykładzie 1, ale przechodzi przez szereg komórek.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Przykład 4 : Rozdzielanie różnych wzorów
W tym przykładzie pętla przechodzi przez zakres ( A1, A2& A3) i wyszukuje ciąg rozpoczynający się od trzech cyfr, po których następuje pojedynczy znak alfa, a następnie 4 cyfry. Dane wyjściowe dzielą dopasowania wzorca na sąsiednie komórki za pomocą (). $1reprezentuje pierwszy wzór dopasowany w pierwszym zestawie ().
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
Wyniki:

Dodatkowe przykłady wzorów
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit