INSTR функция
Функцията VBA Instr проверява дали низ от текст е намерен в друг низ от текст. Връща 0, ако текстът не е намерен. В противен случай връща позицията на знака, където е намерен текстът.
Функцията Instr изпълнява точно мачове. Операторът като VBA Like може да се използва вместо това за извършване на неточни съвпадения / съвпадение на шаблони с помощта на заместващи символи.
Пример Instr
Следният кодов фрагмент търси в думата „Погледни в този низ“ думата „Погледнете“. Функцията Instr връща 1, защото текстът се намира на първа позиция.
123 | Sub FindSomeText ()MsgBox InStr ("Погледни в този низ", "Погледни")End Sub |
Този втори пример връща 7, защото текстът е намерен, започвайки от 7 -ма позиция:
123 | Sub FindSomeText2 ()MsgBox InStr ("Не гледайте в този низ", "Погледнете")End Sub |
Важно! Функцията Instr е различаващ главни от малки букви по подразбиране. Това означава, че „поглед“ няма да съвпада с „Поглед“. За да направите чувствителността на тестовия регистър прочетена по-долу.
Instr синтаксис
Синтаксисът за функцията Instr е следният:
1 | Instr ([начало], низ, подниза, [сравни]) |
[старт] (по избор) - Този незадължителен аргумент е началната позиция на търсенето. Въведете 1, за да започнете търсенето от позиция 1 (или оставете празно). Въведете 5, за да започнете търсенето от позиция 5. Важно! Функцията INSTR изчислява позицията на знака, като брои от 1 НЕ от позицията [начало].
низ - Низ текст за търсене.
подниза - Низ текст, който да се намери в основния низ.
[сравни] (по избор) - По подразбиране Instr е чувствителен към регистър. Като зададете този аргумент, можете да направите Instr Case нечувствителни:
Аргумент vb Стойност | Аргумент Цело число | Описание |
vbBinaryCompare |
0 | (По подразбиране) Чувствителен към регистър |
vbTextCompare |
1 | Не са чувствителни към малки и големи букви |
vbDatabaseCompare |
2 | Само MS достъп. Използва информация в базата данни за извършване на сравнение. |
Instr начална позиция
Началната позиция Instr ви позволява да посочите позицията на знака, където ще започнете търсенето. Имайте предвид обаче, че изходът Instr винаги ще се брои от 1.
Тук задаваме началната позиция на 3, за да пропуснем първата B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")End Sub |
Резултатът е 6, защото вторият B е 6 -ият знак в низа.
Чувствителен към регистър INSTR тест
По подразбиране VBA третира „L“ различно от „l“. С други думи, VBA чувствителен към регистър. Това важи за всички текстови функции. За да направите VBA нечувствителен към регистъра, задайте аргумента [compare] на 1 или vbTextCompare.
123 | Публичен под FindText_IgnoreCase ()MsgBox InStr (1, "Не гледай в този низ", "поглед", vbTextCompare)End Sub |
Като алтернатива можете да добавите Option Compare Text в горната част на кодовия модул:
1 | Опция Сравняване на текст |
12345 | Опция Сравняване на текстПубличен под FindText_IgnoreCase2 ()MsgBox InStr ("Не гледайте в този низ", "погледнете")End Sub |
Опция Сравняване на текст ще повлияе на целия код в този модул. Аз лично поставям това в горната част на всеки модул, който се занимава с текст, защото никога не ме интересуват различията в регистрите.
InstrRev функция
Функцията Instr търси отляво. Вместо това можете да търсите отдясно с помощта на функцията InstrRev. Функцията InstrRev работи много подобно на функцията Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Погледни в този низ", "Погледни")End Sub |
Точно като функцията Instr, това ще върне 1, защото има само един екземпляр на „Погледни“ в текста. Но ако добавим втори „Поглед“, ще видите, че той връща позицията на най-десния „Поглед“:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Погледни в този низ Погледни", "Погледни")End Sub |
След това ще разгледаме още примери за Instr.
Примери за InString
Ако низът съдържа подниза
Тук ще използваме оператор If, за да проверим дали низ съдържа подниза от текст:
123456789 | Public Sub FindSomeText ()Ако InStr ("Погледни в този низ", "погледни") = 0 ТогаваMsgBox "Няма съвпадение"ИначеMsgBox „Най -малко едно съвпадение“Край АкоEnd Sub |
Намерете текстов низ в клетка
Можете също да намерите низ в клетка:
12345 | Sub Find_String_Cell ()Ако InStr (Диапазон ("B2"). Стойност, "Д -р")> 0 ТогаваДиапазон ("C2"). Стойност = "Доктор"Край АкоEnd Sub |
Или преминете през диапазон от клетки, за да проверите дали клетките съдържат някакъв текст:
12345678910 | Sub Search_Range_For_Text ()Затъмняване на клетката като обхватЗа всяка клетка в обхвата ("b2: b6")Ако InStr (cell.Value, "Dr.")> 0 Тогаваcell.Offset (0, 1) .Value = "Доктор"Край АкоСледващата клеткаEnd Sub |
Намерете позицията на знак в низ
Този код ще намери позицията на един символ в низ и ще определи позицията на променлива:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Тук вижте тук", "L")End Sub |
Търсете низа за Word
Този код ще търси низ за дума:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Тук погледнете тук", "Погледнете")Ако n = 0, тогаваMsgBox „Думата не е намерена“ИначеMsgBox "Думата е намерена на позиция:" & nКрай АкоEnd Sub |
Ако променливата съдържа низ
Този код ще тества дали низова променлива съдържа низ от текст:
12345678 | Sub Variable_Contains_String ()Dim str As Stringstr = "Погледни тук"Ако InStr (str, "Тук")> 0 ТогаваMsgBox "Тук е намерено!"Край АкоEnd Sub |
Instr и лявата функция
Instr може да се използва заедно с други текстови функции като ляво, дясно, Len и средна за подрязване на текст.
С функцията Left можете да изведете текста преди низ от текст:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = "Погледни тук"n = InStr (str, "Тук")MsgBox вляво (str, n - 1)End Sub |
Използване на Instr в Microsoft Access VBA
Всички горепосочени примери работят абсолютно същото в Access VBA като в Excel VBA.
За да научите повече, прочетете нашата статия: VBA текстови функции