VBAsic.eu: Profesjonalna automatyzacja zadań MS Excel

[VBA] InStr, InStrRev – pozycja w tekście

Zdarza się, że podczas przetwarzania zmiennych tekstowych potrzebujemy określić położenie w tekście określonych znaków lub słów. Żeby na przykład rozpocząć wycinanie fragmentu tekstu od określonej pozycji. Na szczęście Visual Basic for Application (VBA) wyposażony jest w dwie funkcje, które ułatwiają nam te zadanie.

zobacz również artykuły:
[VBA] Left, Right, Mid, Len, (L/R)Trim
[VBA] Replace – zamiana testu w komórkach

Funkcje określania pozycji szukanej w tekście

Obie funkcje zawsze zwracają indeks (pozycję) pierwszego znaku szukanej odnalezionej w tekście licząc od początku tekstu.
InStr – Jeśli szukana wartość zawiera się w przeszukiwanym tekście, funkcja zwróci indeks znaku od którego szukana się zaczyna. Poszukiwanie wartości szukanej następuje od początku do końca tekstu źródłowego.

Składnia: InStr(znak_początku,tekst_źródłowy,szukana,typ_przeszukania)

InStrRev – Jeśli szukana wartość zawiera się w przeszukiwanym tekście, funkcja zwróci indeks znaku od którego szukana się zaczyna. Funkcja przeszukuje wartości od końca tekstu do początku.

Składnia: InStr(znak_początku,tekst_źródłowy,szukana,typ_przeszukania)

Funkcje InStr i InStrRev w przykładach

InStr – pozycja znaku – przeszukanie od początku

Sub InStr_p1()
 Dim tekst1, tekst2 As String
 Dim startOD, typ1, typ2 As Integer
 
 tekst1 = "dłUższy tekstiusz"
 tekst2 = "u"
 
 '//   TYP   //
 'wartość - wartość słownie; opis
 '0 - vbBinaryCompare; Porównanie binarne. u <> U
 '1 - vbTextCompare; Porównanie tekstowe u = U
 '2 - vbDatabaseCompare; tylko dla MS Access
 typ1 = 0
 typ2 = 1
 
 'indeks znaku od którego zaczynamy przeszukiwanie
 'musi to być liczba całkowita > 0
 startOD = 1
 
 'porównanie binarne
 Debug.Print "bin: "; InStr(startOD, tekst1, tekst2, typ1)
 'porównanie tekstowe
 Debug.Print "txt: "; InStr(startOD, tekst1, tekst2, typ2)
 
End Sub

InStr – pozycja słowa – przeszukanie od początku

Sub InStr_p2()
 Dim tekst1, tekst2 As String
 Dim startOD, typ1, typ2 As Integer
 
 tekst1 = "dłUższy test tekstiusz"
 tekst2 = "TeSt"
 
 'określenie typu porównania
 typ1 = 0
 typ2 = 1
 
 'indeks znaku od którego zaczynamy przeszukiwanie
 'musi to być liczba całkowita > 0
 startOD = 1
 
 'porównanie binarne
 Debug.Print "bin: "; InStr(startOD, tekst1, tekst2, typ1)
 'porównanie tekstowe
 Debug.Print "txt: "; InStr(startOD, tekst1, tekst2, typ2)
 
End Sub

InStrRev – pozycja znaku przeszukanie od końca

Sub InStrRev_p1()
 Dim tekst1, tekst2 As String
 Dim startOD, typ1, typ2 As Integer
 
 tekst1 = "dłUższy TeSt test tekstiusz"
 tekst2 = " " 'spacja
 
 'określenie typu porównania
 typ1 = 0
 typ2 = 1
 
 'porównanie binarne
 Debug.Print "bin: "; InStrRev(tekst1, tekst2, , typ1)
 'porównanie tekstowe
 Debug.Print "txt: "; InStrRev(tekst1, tekst2, , typ2)
 
End Sub

InStrRev – pozycja słowa przeszukanie od końca

Sub InStrRev_p2()
 Dim tekst1, tekst2 As String
 Dim startOD, typ1, typ2 As Integer
 
 tekst1 = "dłUższy TeSt test tekstiusz"
 tekst2 = "TeSt"
 
 'określenie typu porównania
 typ1 = 0
 typ2 = 1
 
 'porównie binarne
 Debug.Print "bin: "; InStrRev(tekst1, tekst2, , typ1)
 'porównanie tekstowe
 Debug.Print "txt: "; InStrRev(tekst1, tekst2, , typ2)
 
 'InStr vs. InStrRev - porównanie tekstowe
 pozycjaInStr = InStr(1, tekst1, tekst2, typ2)
 pozycjaInStrRev = InStrRev(tekst1, tekst2, , typ2)
 'wykazanie różnicy przy wyszukiwaniu tekstowym
 'od przodu i tyłu tekstu
 Debug.Print pozycjaInStr; pozycjaInStrRev
 
End Sub

InStr – wszystkie pozycje szukanej w tekście

Sub InStr_p3()
 Dim tekst1, tekst2 As String
 Dim startOD, typ As Integer
 
 tekst1 = "dłUższy teSt tekStiusz"
 tekst2 = "s"
 
 'określenie typu porównania
 typ = 1
 
 'indeks znaku od którego zaczynamy przeszukiwanie
 'musi to być liczba całkowita > 0
 pozInStr = 1
 
  Do Until pozInStr = 0
   'przeszukanie tekstu źródłowego
   pozInStr = InStr(pozInStr + 1, tekst1, tekst2, typ)
   'warunek wyjścia jeśli nie znaleziono szukanej
   If pozInStr = 0 Then Exit Do
 
   'wyświetlenie indeksów do okna Immediate
   Debug.Print pozInStr
  Loop
End Sub


Potrzebujesz pomocy w stworzeniu narzędzia ?

Pamiętaj

Serwis VBAsic.eu oferuje pomoc w zakresie automatyzacji zadań MS Excel z wykorzystaniem VBA. Potrzebujesz makro lub funkcji niestandardowej, której nie ma w Excel ? Nie zwlekaj czekamy na Twoje zgłoszenie.

Wyślij zgłoszenie z pomocą formularza na stronie