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:

  1. Wzór - wzór zdefiniowany w RegEx, na którym chcesz wykonywać operacje.
  2. IgnoreCase - Ignoruj ​​wielkość liter ( wielkie i małe litery są takie same w ciągu).
  3. Globalny - pozwala znaleźć wszystkie możliwe dopasowania, jeśli jest ustawiony na PRAWDA. Jeśli ustawione na FAŁSZ, znajdzie tylko pierwsze dopasowanie.
  4. 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 RegEx

Excel 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 -

  1. Jak korzystać z VBA Replace w Excelu?
  2. Korzystanie z Wstaw komentarz w Excelu
  3. Tworzenie VBA TIMER w Excelu
  4. Zagnieżdżona formuła IF w programie Excel

Kategoria: