VBA RegEx
„Wyrażenie regularne” VBA RegEx jest bardzo przydatne w świecie programowania, którego można używać do sprawdzania poprawności wprowadzania na stronie internetowej, wyszukiwania wzorców wyrazów w dużym łańcuchu / tekście, wyszukiwania i zamiany ciągów.
Większość z nas używa funkcji ZNAJDŹ, SUBSTYTUT, LEWO, PRAWO wraz z funkcjami MID do manipulacji ciągami w programie Microsoft Excel, prawda? Jednak funkcje te mają swoje własne ograniczenia, których nie można szeroko stosować. Posiadanie wiedzy o wyrażeniach regularnych VBA pozwoli Ci zaoszczędzić wiele czasu w codziennym życiu. Wyrażenia regularne są tworzone skrótowo jako „RegEx” (lub Regex) w VBA. W tym samouczku przyjrzymy się niektórym RegEx z ich wykorzystaniem.
Możesz użyć obiektu VBA RegEx, który jest już utworzony w bibliotece wyrażeń regularnych Microsoft VBScript. Możesz poruszać się po tej bibliotece, klikając Narzędzia - Dokumentacja - Wyrażenia regularne Microsoft VBScript.
Możesz także utworzyć obiekt RegEx za pomocą funkcji CreateObject w VBA. Wydaje się to wygodniejsze, ponieważ w tym przypadku nie zawsze musisz odwoływać się do biblioteki wyrażeń regularnych VBScript.
Zobacz kod poniżej:
Dim regex as Object Set regex = CreateObject („VBScript.RegExp”)
Ten kod pozwoli ci tworzyć i uzyskiwać dostęp do obiektów RegEx w twoim makrze. Osobiście wolę ten sposób od pierwszego ze względu na jego sztywność.
Funkcja RegEx pozwala na manipulowanie poniższymi ciągami.
- Dzikie karty jak *, ? itp.
- Zgrupowane wyrażenia wraz z symbolami wieloznacznymi.
RegEx ma poniższe parametry / właściwości:
- Wzór - wzór zdefiniowany w RegEx, na którym chcesz wykonywać operacje.
- IgnoreCase - Ignoruj wielkość liter ( wielkie i małe litery są takie same w ciągu).
- Globalny - pozwala znaleźć wszystkie możliwe dopasowania, jeśli jest ustawiony na PRAWDA. Jeśli ustawione na FAŁSZ, znajdzie tylko pierwsze dopasowanie.
- MultiLine - Pozwala dopasować wzór w ciągu rozłożonym wzdłuż wielu linii.
RegEx ułatwia następujące trzy operacje:
- Test - sprawdza, czy wspomniany wzorzec występuje w ciągu, czy nie. Jeśli obecny zwraca PRAWDA, w przeciwnym razie FAŁSZ.
- Zastąp - zastępuje oryginalny wzór innym.
- Wykonaj - zwraca wszystkie wyszukane pasujące wzorce.
Jak korzystać z Excel VBA RegEx?
Nauczymy się korzystać z wyrażeń regularnych Excel VBA na kilku przykładach.
Możesz pobrać ten szablon Excel VBA RegEx tutaj - Szablon Excel VBA RegExExcel VBA RegEx - Przykład nr 1
Tutaj sprawdzisz, czy wspomniany wzór występuje w tekście za pomocą RegEx.Test.
Wykonaj poniższe kroki, aby użyć VBA RegEx.
Krok 1: Zdefiniuj nową podprocedurę, aby utworzyć makro.
Kod:
Sub RegEx_Ex1 () End Sub
Krok 2: Zdefiniuj dwie zmienne RegEx jako Obiekt, którego można użyć do utworzenia obiektu RegEx i Str jako łańcucha.
Kod:
Sub RegEx_Ex1 () Dim RegEx As Object, Str As String End Sub
Krok 3: Utwórz obiekt RegEx za pomocą funkcji CreateObject.
Kod:
Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub
Krok 4: Dodaj wzór do przetestowania za pomocą funkcji RegEx.
Kod:
Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With End Sub
Krok 5: Zdefiniuj ciąg, w którym musimy sprawdzić dany wzór.
Kod:
Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With Str = "Mój numer roweru to MH-12 PP- 6145 "End Sub
Krok 6: Użyj RegEx.Test, aby sprawdzić, czy podany wzorzec występuje w zmiennej o nazwie Str. Użyj również narzędzia Debug.Print, aby wydrukować wynik (Prawda lub Fałsz) w bezpośrednim oknie.
Kod:
Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With Str = "Mój numer roweru to MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub
Krok 7: Naciśnij klawisz F5 lub Run, aby uruchomić kod i zobaczyć wynik. (Naciśnij CTRL + G, aby otworzyć okno natychmiastowe)
Tutaj stworzyliśmy obiekt RegEx. Następnie za pomocą VBA RegEx sprawdziliśmy, czy podany wzorzec („(0-9) +”), który obejmuje wszystkie liczby / kombinację liczb od 0 do 9, jest obecny w ciągu zdefiniowanym za pomocą RegEx.Test ( Str). Wyjście „True” w bezpośrednim oknie pokazuje, że wzorzec „(0-9) +” jest obecny w danym ciągu.
Excel VBA RegEx - Przykład nr 2
Tutaj zobaczysz, jak możesz zamienić jeden ciąg na inny za pomocą RegEx.Replace.
Wykonaj poniższe kroki, aby użyć VBA RegEx.
Krok 1: Zdefiniuj nowy ciąg podrzędny, aby utworzyć makro.
Kod:
Sub RegEx_Ex2 () End Sub
Krok 2: Tak jak w pierwszym przykładzie, zdefiniuj dwie zmienne RegEx jako Obiekt, który może przechowywać wartość obiektu RegEx i Str, który będzie przechowywał wartość zdefiniowanego ciągu.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String End Sub
Krok 3: Zdefiniuj obiekt RegEx i ustaw go na zmienną RegEx za pomocą funkcji CreateObject.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub
Krok 4: Wstaw wzór, który chcesz zastąpić za pomocą funkcji. Wzór.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123" End With End Sub
Krok 5: Użyj .GLOBAL = PRAWDA, która jeśli PRAWDA pozwala zastąpić wszystkie pasujące wzorce w danym ciągu. Jeśli FAŁSZ zastępuje tylko pierwszy pasujący wzorzec.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123” .Global = True ”Jeśli FALSE, zastępuje tylko pierwszy pasujący ciąg„ End With End Sub
Krok 6: Po zakończeniu z określ ciąg, który chcesz dopasować, i zastąp wzór.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123” .Global = True ”Jeśli FALSE, zastępuje tylko pierwszy pasujący ciąg„ End With Str = „123-654-000-APY-123-XYZ-888” Koniec Sub
Krok 6: Użyj RegEx.Replace, aby zastąpić wartość wzorca w danym ciągu innym tekstem.
Kod:
Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123” .Global = True ”Jeśli FALSE, zastępuje tylko pierwszy pasujący ciąg„ End With Str = Debugowanie „123-654-000-APY-123-XYZ-888” Wydrukuj RegEx.Replace (Str, „Replaced”) End Sub
Tutaj chcieliśmy, aby wzór „123” został zastąpiony innym kawałkiem sznurka. RegEx.Replace pozwala zastąpić wartość wzorca kawałkiem łańcucha (zdefiniowaliśmy „Zamieniono”). Proszę również spojrzeć na .Global = TRUE. Który jest instrukcją warunkową. Jeśli Global = TRUE, funkcja Zamień zastępuje wszystkie pasujące wzorce innym ciągiem. Jeśli GLOBAL = FAŁSZ, funkcja Zamień zastępuje tylko pierwszy pasujący wzorzec, a pozostałe pozostałe są pomijane.
Krok 7: Naciśnij przycisk Uruchom lub F5, aby uruchomić ten kod i zobaczyć dane wyjściowe w oknie Natychmiastowe wyjście.
Excel VBA RegEx - Przykład nr 3
Tutaj zobaczysz, jak znaleźć wszystkie pasujące wzorce w ciągu za pomocą RegEx.Execute.
Wykonaj poniższe kroki, aby użyć Excel VBA RegEx.
Krok 1: Zdefiniuj nową podprocedurę, aby dodać makro.
Kod:
Sub RegEx_Ex3 () End Sub
Krok 2: Wykonaj kroki identyczne jak w poprzednich dwóch przykładach, aby zdefiniować wyrażenie regularne i zmienną, która może przechowywać wartość ciągu.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub
Krok 3: Wstaw wzór, który chciałbyś wykonać i dopasować do podanego ciągu.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123-XYZ" End With End Sub
Krok 4: Użyj .GLOBAL = TRUE, aby wszystkie dopasowania zostały przechwycone w podanym ciągu.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123-XYZ” .Global = True End With End Sub
Krok 5: Zdefiniuj ciąg po zakończeniu z, pod którym musisz użyć Wykonaj i znajdź wszystkie pasujące wzorce.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123-XYZ” .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub
Krok 6: Teraz użyj przycisku Wykonaj na zmiennej o nazwie ciąg, aby znaleźć wszystkie dopasowania powiązane z danym wzorcem.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123-XYZ” .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Ustaw dopasowania = RegEx.Execute (Str) End Sub
Krok 7: Użyj pętli For, aby wydrukować wartość wszystkich dopasowanych wzorów w oknie bezpośredniego wydruku.
Kod:
Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject („VBScript.RegExp”) With RegEx .Pattern = „123-XYZ” .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Ustaw mecze = RegEx.Execute (Str) Dla każdego meczu W meczach Debuguj. Wydrukuj Match.Value Następny mecz End Sub
Krok 8: Uruchom ten kod, naciskając F5 lub przycisk Uruchom i zobacz dane wyjściowe w oknie natychmiastowego wyniku.
Ten kod drukuje całą liczbę dopasowań dla zdefiniowanego wzoru.
Rzeczy do zapamiętania
- Wyrażenie regularne VBA może być użyte tylko do znalezienia ciągów. Oczywiście dla wartości liczbowych nie potrzebujemy takiej funkcji. Wszystkie wartości liczbowe uwzględnione w każdym z trzech powyższych przykładów są w rzeczywistości zdefiniowane jako ciąg.
- Excel VBA RegEx powinien być używany do manipulacji ciągami, gdy występują duże dane. Nieużywanie VBA RegEx zmniejsza wydajność programu.
- VBA RegEx kończy się niepowodzeniem, gdy istnieją scenariusze, w których wzorzec powtarza się n razy lub nieskończenie wiele razy z tego powodu.
Polecane artykuły
To był przewodnik po VBA RegEx. Tutaj omówiliśmy, jak korzystać z Excel VBA RegEx wraz z praktycznymi przykładami i szablonem Excel do pobrania. Możesz także przejrzeć nasze inne sugerowane artykuły -
- Jak korzystać z VBA Replace w Excelu?
- Korzystanie z Wstaw komentarz w Excelu
- Tworzenie VBA TIMER w Excelu
- Zagnieżdżona formuła IF w programie Excel