Spis treści
Wdrażanie VBA jest najbardziej efektywną, najszybszą i najbezpieczniejszą metodą wykonywania dowolnych operacji w Excelu. W tym artykule pokażemy, jak znaleźć określone ciągi znaków w innym podanym ciągu przy użyciu VBA w Excelu.
Pobierz szablon praktyki
Darmowy szablon Excela z praktyką można pobrać stąd.
VBA do wyszukiwania w String.xlsm
Funkcja InStr
Microsoft Excel posiada wbudowaną funkcję o nazwie funkcja InStr aby znaleźć pozycję określonych ciągów w danym Stringu.
Generic Syntax:
InStr([start], string1, string2, [compare])
Tutaj,
Argumenty | Wymagane/ Fakultatywne | Definicja |
---|---|---|
start | Opcjonalnie | Pozycja początkowa wyszukiwania.
|
ciąg1 | Wymagane | Ciąg do wyszukiwania w, Primary String. |
ciąg2 | Wymagane | Łańcuch, który ma być wyszukiwany w łańcuchu podstawowym. |
porównaj | Opcjonalnie | Na stronie InStr domyślnie rozróżnia wielkość liter, ale jeśli chcesz uruchomić funkcję bez rozróżniania wielkości liter InStr , to możesz przekazać tutaj argument, aby wykonać określone porównanie. Ten argument może mieć następujące wartości,
Domyślnie, InStr przyjmuje vbBinaryCompare jako argument porównania. |
8 Proste przykłady, aby znaleźć określoną pozycję w podanym łańcuchu za pomocą VBA
Zobaczmy kilka prostych przykładów, aby uzyskać pozycje określonych ciągów w danym łańcuchu za pomocą VBA .
1. VBA do znalezienia pozycji tekstu w łańcuchu.
Poniżej znajduje się przykład InStr aby znaleźć pozycję tekstu w łańcuchu.
- Naciśnij Alt + F11 na klawiaturze lub przejdź do zakładki Programista -> Visual Basic otworzyć Edytor Visual Basic .
- W wyskakującym oknie kodu, na pasku menu, kliknij Insert -> Moduł .
- Teraz w oknie kodu napisz prosty InStr program wewnątrz Procedura pomocnicza VBA (patrz niżej).
Sub INSTR_Example() MsgBox InStr("Szczęście to wybór", "wybór") End Sub
Twój kod jest teraz gotowy do uruchomienia.
- Naciśnij F5 na klawiaturze lub z paska menu wybrać Run -> Run Sub/UserForm. Możesz też po prostu kliknąć na mała ikona Play na pasku podmenu, aby uruchomić makro.
Zobaczysz, że wyskakujące okienko z komunikatem poda Ci liczba określająca pozycję tekstu, który chciałeś sprawdzić.
Wyjaśnienie:
Nasz główny ciąg, " Szczęście to wybór " jest 21 literowym zdaniem (ze spacjami) i chcieliśmy znaleźć pozycję tekstu " wybór " w tym ciągu. Tekst " wybór " rozpoczął się od 16 pozycji struny podstawowej, stąd otrzymaliśmy numer 16 jako nasze wyjście w oknie wiadomości.
2. VBA do wyszukiwania tekstu z określonej pozycji w łańcuchu.
Teraz dowiedzmy się, co by się stało, gdybyśmy chcieli uzyskać pozycję z pewnej liczby.
- W taki sam sposób jak poprzednio, otwórz Edytor Visual Basic od Deweloper zakładka i Wkładka a Moduł w oknie kodu.
- W oknie kodu napisz prosty InStr program pokazany powyżej i przekaż w argumencie start wartość zgodną z pozycją, od której chcesz liczyć swój tekst.
Sub INSTR_Example() MsgBox InStr(17, "Szczęście to wybór", "wybór") End Sub
- Następny, Uruchom kod.
Zobaczysz, że wyskakujące okienko z komunikatem poda Ci liczba określająca pozycję tekstu startując z określonej pozycji które chciałeś sprawdzić.
Wyjaśnienie:
Jak już wiedzieliśmy (z dyskusji w fazie 1), że tekst " wybór " rozpoczął się z pozycji 16 , więc wstawiliśmy dwa " wybór " w ciągu głównym i ustaw 17 jako nasz pierwszy parametr, aby pominąć pierwszy " wybór ". Tak więc, my Uruchom powyższe makro i pokazało nam pozycję numer 27 który jest dokładnie numerem pozycji druga " wybór " w podanym ciągu znaków.
3. VBA do wyszukiwania tekstu z rozróżnianiem wielkości liter w funkcji InStr w String
Od wprowadzenia InStr Wiesz już, że domyślnie funkcja InStr Funkcja rozróżnia wielkość liter, przekonajmy się o tym na przykładzie.
Zob. VBA kod, w którym chcieliśmy znaleźć pozycję słowa " Wybór " z duże "C" w ciągu " Szczęście to wybór ", gdzie wybór pisze się z. małe "c" .
- Uruchom kod i znaleźć 0 jako nasze wyjście.
To dlatego, że InStr funkcja leczy duże "C" oraz małe "c" inaczej. Więc wyszukał słowo " Wybór " w ciągu i nie uzyskał żadnego dopasowania, więc zwrócił 0 .
- Aby InStr funkcja bez rozróżniania wielkości liter , ustaw argument compare na vbTextCompare (patrz niżej).
Sub INSTR_Example() MsgBox InStr(1, "Szczęście jest wyborem i możliwością wyboru", "Wybór", vbTextCompare) End Sub
- Uruchom kod.
Otrzymasz pozycja tekstu z ciągu, czy tekst jest zapisany w duże lub małe litery .
4. VBA do wyszukiwania tekstu z prawej strony łańcucha znaków
Do tej pory InStr Funkcja dawała nam tylko pozycję z lewej strony ciągu. Ale co jeśli chcemy znaleźć pozycję tekstu z prawej strony ciągu.
Funkcja InStrRev szuka z prawej strony. InStrRev Funkcja działa bardzo podobnie do InStr funkcja i znajdzie ci pozycję tekstu z prawa strona ciągu.
Zobacz poniższe przykłady, aby zrozumieć różnicę.
- Jeśli uruchomimy następujący kod z InStr funkcja wtedy,
daje nam pozycję ( 16 ) pierwszego tekstu " wybór ".
- Ale jeśli uruchomimy ten sam kod z InStrRev Funkcja wtedy,
daje nam pozycję ( 27 ) ostatniego tekstu " wybór ".
Podobne Lektury:
- FindNext Używanie VBA w Excelu (2 przykłady)
- Jak znaleźć i zastąpić za pomocą VBA (11 sposobów)
- Znajdź Dokładne dopasowanie za pomocą VBA w Excelu (5 sposobów)
5. VBA, aby znaleźć pozycję znaku w łańcuchu.
Możesz również znaleźć pozycję określonego znaku w ciągu w ten sam sposób, w jaki znalazłeś tekst.
- Skopiuj następujący kod do swojego VBA okno kodu
Sub Find_Character() Dim z As Long z = InStr("Szczęście to wybór", "e") MsgBox z End Sub
- Oraz Uruchom makro.
Pierwszy " e " w naszym podanym ciągu znajduje się pod numerem 7 stanowisko.
6. VBA, aby znaleźć podłańcuch w łańcuchu.
Tutaj dowiemy się, jak znaleźć, czy ciąg znaków zawiera podciąg lub nie.
Aby to uzyskać, musimy uruchomić IF Statement w naszym kodzie.
- W taki sam sposób jak poprzednio, otwórz Edytor Visual Basic od Deweloper zakładka i Wkładka a Moduł w oknie kodu.
- W oknie kodu skopiuj poniższy kod i wklej go.
Public Sub FindSub() If InStr("Szczęście to wybór", "wybór") = 0 Then MsgBox "Nie znaleziono dopasowania" Else MsgBox "Znaleziono dopasowanie" End If End Sub
Twój kod jest teraz gotowy do uruchomienia.
- Uruchom makro.
Jeśli twój łańcuch zawiera podłańcuch to dostaniesz znaleziony mecz W naszym przykładzie chcieliśmy dowiedzieć się, czy nasz podstawowy ciąg znaków " Szczęście to wybór " zawiera słowo " wybór " lub nie. Jak to zrobi, dostaniemy Znaleziono dopasowanie wynik.
7. VBA, aby znaleźć ciąg w zakresie komórek
Możesz wyszukać określony tekst w zakresie komórek z ciągiem i zwrócić określony ciąg.
Spójrz na poniższy przykład, gdzie znajdziemy " Dr. ", a gdy nastąpi dopasowanie, zwróci " Doktor ".
- Poniżej znajduje się kod pozwalający uzyskać omawiany wyżej wynik,
Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub
- Uruchom kod i wynik jest pokazany poniżej
- Możesz zmodyfikować makro w zależności od swoich potrzeb. Na przykład, jeśli chcesz znaleźć " Prof. " w dowolnej komórce ciągu, a także uzyskać " Prof. " jako zwrot, to po prostu przekaż " Prof. " jako wartość zamiast " Dr ." w 4. linii makra oraz " Prof. " zamiast " Doktor " w 5. linii makra i odpowiednio zdefiniować numer zakresu komórek.
8. VBA, aby znaleźć ciąg znaków w komórce
Można również wyszukiwanie określonego tekstu w pojedynczej komórce ciągu znaków i zwrócić określony ciąg znaków.
- Skopiuj poniższy kod i wklej go do okna kodu.
Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doktor" End If End Sub
Wyszuka on " Dr. " w Komórka B5 i jeśli znajdzie dopasowanie, to zwraca " Doktor " w Komórka C5 .
- Możesz zmodyfikować makro w zależności od swoich potrzeb. Na przykład, jeśli chcesz znaleźć " Prof. " w dowolnej komórce ciągu, i otrzymujemy " Prof. " jako zwrot, to po prostu przekaż " Prof. " jako wartość zamiast " Dr ." w 2. linii makra oraz " Prof. " zamiast " Doktor " w 3. linii makra i odpowiednio zdefiniować numer referencyjny komórki.
Wniosek
W tym artykule pokazano, jak znaleźć określone teksty w ciągu w Excelu za pomocą Makro VBA. Mam nadzieję, że ten artykuł był dla Ciebie bardzo korzystny. Zapraszam do zadawania wszelkich pytań związanych z tematem.