Funkcja INSTR
Funkcja VBA Instr sprawdza, czy ciąg tekstowy został znaleziony w innym ciągu tekstowym. Zwraca 0, jeśli tekst nie zostanie znaleziony. W przeciwnym razie zwraca pozycję znaku, w której znajduje się tekst.
Funkcja Instr wykonuje dokładny mecze. Zamiast tego można użyć operatora podobnego do VBA, aby wykonać niedokładne dopasowania/dopasowanie wzorców za pomocą symboli wieloznacznych.
Przykład instrukcji
Poniższy fragment kodu przeszukuje ciąg „Szukaj w tym ciągu” dla słowa „Wygląd”. Funkcja Instr zwraca 1, ponieważ tekst znajduje się na pierwszej pozycji.
123 | Sub ZnajdźJakiTekst()MsgBox InStr("Spójrz w tym ciągu", "Spójrz")Napis końcowy |
Ten drugi przykład zwraca 7, ponieważ tekst znajduje się od siódmej pozycji:
123 | Sub ZnajdźJakiTekst2()MsgBox InStr("Nie szukaj w tym ciągu", "Spójrz")Napis końcowy |
Ważny! Funkcja Instr to wielkość liter ma znaczenie domyślnie. Oznacza to, że „wygląd” nie będzie pasował do „wyglądu”. Aby uczynić test niewrażliwym na wielkość liter, przeczytaj poniżej.
Składnia instrukcji
Składnia funkcji Instr jest następująca:
1 | Instr( [start], ciąg, podciąg, [porównaj] ) |
[start] (opcjonalnie) - Ten opcjonalny argument jest początkową pozycją wyszukiwania. Wpisz 1, aby rozpocząć wyszukiwanie od pozycji 1 (lub pozostaw puste). Wpisz 5, aby rozpocząć wyszukiwanie od pozycji 5. Ważny! Funkcja INSTR oblicza pozycję znaku, licząc od 1 NIE z pozycji [start].
strunowy – ciąg tekstu do wyszukania.
podciąg – ciąg tekstu do znalezienia w ciągu podstawowym.
[porównaj] (opcjonalnie) - Domyślnie w Instr jest rozróżniana wielkość liter. Ustawiając ten argument, możesz sprawić, że Instr Case będzie niewrażliwy:
Argument vb Wartość | Liczba całkowita argumentu | Opis |
vbBinaryCompare |
0 | (Domyślnie) Wielkość liter ma znaczenie |
vbTextPorównaj |
1 | Nie uwzględnia wielkości liter |
vbDatabasePorównaj |
2 | Tylko dostęp MS. Wykorzystuje informacje z bazy danych do porównania. |
Pozycja początkowa instrumentu
Pozycja startowa Instr pozwala wskazać pozycję znaku, od której rozpoczniesz wyszukiwanie. Należy jednak pamiętać, że wynik Instr zawsze będzie liczony od 1.
Tutaj ustawiamy pozycję początkową na 3, aby pominąć pierwsze B:
123 | Sub Instr_StartPosition()MsgBox InStr(3, "ABC ABC", "B")Napis końcowy |
Wynik to 6, ponieważ drugie B jest szóstym znakiem w ciągu.
Test INSTR bez rozróżniania wielkości liter
Domyślnie VBA traktuje „L” inaczej niż „l”. Innymi słowy, w VBA rozróżniana jest wielkość liter. Dotyczy to wszystkich funkcji tekstowych. Aby VBA nie uwzględniała wielkości liter, ustaw argument [compare] na 1 lub vbTextCompare.
123 | Public Sub FindText_IgnoreCase()MsgBox InStr(1, "Nie szukaj w tym ciągu", "look", vbTextCompare)Napis końcowy |
Alternatywnie możesz dodać Option Compare Text na górze modułu kodu:
1 | Opcja Porównaj tekst |
12345 | Opcja Porównaj tekstPublic Sub FindText_IgnoreCase2()MsgBox InStr("Nie szukaj w tym ciągu", "wyglądaj")Napis końcowy |
Opcja Porównaj tekst wpłynie na cały kod w tym module. Osobiście umieszczam to na górze każdego modułu, który zajmuje się tekstem, ponieważ nigdy nie dbam o różnice w wielkościach liter.
Funkcja InstrRev
Funkcja Instr wyszukuje od lewej. Zamiast tego możesz wyszukiwać od prawej za pomocą funkcji InstrRev. Funkcja InstrRev działa bardzo podobnie do funkcji Instr.
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Spójrz w tym ciągu", "Spójrz")Napis końcowy |
Podobnie jak funkcja Instr, zwróci 1, ponieważ w tekście jest tylko jedno wystąpienie „Look”. Ale jeśli dodamy drugi „Wygląd”, zobaczysz, że zwraca on pozycję najbardziej po prawej „Wyglądu”:
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Szukaj w tym ciągu Look", "Look")Napis końcowy |
Następnie omówimy więcej przykładów Instr.
Przykłady InString
Jeśli ciąg zawiera podciąg
Tutaj użyjemy instrukcji If, aby sprawdzić, czy ciąg zawiera podciąg tekstu:
123456789 | Public Sub FindSomeText()If InStr("Szukaj w tym ciągu", "look") = 0 WtedyMsgBox "Brak dopasowania"W przeciwnym razieMsgBox "Przynajmniej jeden mecz"Zakończ, jeśliNapis końcowy |
Znajdź ciąg tekstowy w komórce
Możesz również znaleźć ciąg w komórce:
12345 | Sub Find_String_Cell()If InStr(Range("B2").Value, "Dr.") > 0 WtedyZakres("C2").Value = "Doktor"Zakończ, jeśliNapis końcowy |
Lub wykonaj pętlę przez zakres komórek, aby sprawdzić, czy komórki zawierają jakiś tekst:
12345678910 | Sub Search_Range_For_Text()Przyciemnij komórkę jako zakresDla każdej komórki w zakresie("b2:b6")If InStr(cell.Value, "Dr.") > 0 Wtedycell.Offset(0, 1).Value = "Doktor"Zakończ, jeśliNastępna komórkaNapis końcowy |
Znajdź pozycję postaci w ciągu
Ten kod znajdzie pozycję pojedynczego znaku w ciągu i przypisze pozycję do zmiennej:
1234 | Sub Znajdź_znak()Dim n As Longn = InStr("Spójrz tutaj", "L")Napis końcowy |
Wyszukaj ciąg słowa
Ten kod przeszuka ciąg dla słowa:
12345678910 | Sub Search_String_For_Word()Dim n As Longn = InStr("Spójrz tutaj", "Spójrz")Jeśli n = 0 WtedyMsgBox "Nie znaleziono słowa"W przeciwnym razieMsgBox "Słowo znalezione w pozycji: " & nZakończ, jeśliNapis końcowy |
Jeśli zmienna zawiera ciąg
Ten kod sprawdzi, czy zmienna ciągu zawiera ciąg tekstu:
12345678 | Sub Variable_Contains_String()Dim str As Stringstr = "Spójrz tutaj"If InStr(str, "Tutaj") > 0 WtedyMsgBox "Tu znaleziono!"Zakończ, jeśliNapis końcowy |
Instr i lewa funkcja
Instr może być używany wraz z innymi funkcjami tekstowymi, takimi jak Left, Right, Len i Mid, do przycinania tekstu.
Za pomocą funkcji Left możesz wyprowadzić tekst przed ciągiem tekstu:
1234567891011 | Sub Instr_Left()Dim str As StringDim n As Longstr = "Spójrz tutaj"n = InStr(str, "Tutaj")MsgBox Left (str, n - 1)Napis końcowy |
Korzystanie z Instr w Microsoft Access VBA
Wszystkie powyższe przykłady działają dokładnie tak samo w Access VBA, jak w Excel VBA.
Aby dowiedzieć się więcej, przeczytaj nasz artykuł: Funkcje tekstowe VBA