Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.
InStr – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую. Она возвращает значение типа Variant (Long).
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.
Синтаксис, параметры, значения
Синтаксис функции InStr
Полный вариант:
InStr([start], string1, string2, [compare]) |
Сокращенный вариант:
Чаще всего в VBA Excel используется сокращенный вариант функции со значениями необязательных параметров по умолчанию.
Параметры функции InStr
Параметр | Описание | Значение по умолчанию |
---|---|---|
start | Необязательный аргумент.* Числовое выражение, которое задает начальную позицию для поиска. | 1 |
string1 | Обязательный аргумент. Строковое выражение, в котором выполняется поиск. | – |
string2 | Обязательный аргумент. Искомое строковое выражение. | – |
compare | Необязательный аргумент. Задает тип сравнения строк. | –1** |
* Если задан аргумент compare, аргумент start является обязательным.
** Если аргумент compare не указан, используется значение инструкции Option Compare, заданное на уровне модуля. Если инструкция Option Compare в начале модуля отсутствует, используется ее значение по умолчанию – 0 (двоичное сравнение).
Если параметр start или параметр compare содержит значение NULL, возникает ошибка.
Значения аргумента «compare»
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | Сравнение с помощью параметра инструкции Option Compare. |
vbBinaryCompare | 0 | Двоичное (бинарное) сравнение.* |
vbTextCompare | 1 | Текстовое сравнение.* |
vbDatabaseCompare | 2 | Сравнение на основе сведений из базы данных. Только для Microsoft Access. |
* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.
Значения функции InStr
Если | Возвращаемое значение |
---|---|
string2 найдена в string1 | Позиция первого найденного соответствия. |
string2 не найдена в string1 | 0 |
string2 является пустой | start |
string2 равна Null | Null |
string1 является пустой | 0 |
string1 равна Null | Null |
start больше длины string1 | 0 |
Примеры использования в VBA Excel
Пример 1
Самый простой пример:
Sub Test1() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «Фернандо») MsgBox x ‘Здесь x будет равен 9 End Sub |
Пример 2
В этом примере, используя одинаковые строки, в которых выполняется поиск, и искомые подстроки, применим разные виды сравнения – двоичное (бинарное) и текстовое, и посмотрим на результаты.
Sub Test2() Dim x As Variant x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 0) MsgBox x ‘Здесь x будет равен 36 (поиск с учетом регистра символов) x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 1) MsgBox x ‘Здесь x будет равен 18 (поиск без учета регистра символов) End Sub |
Обратите внимание: несмотря на то, что начало поиска мы задали с 10 символа, номер позиции первого вхождения считается с начала строки, в которой выполняется поиск.
Пример 3
В этом примере посмотрим на результаты посимвольного и побайтового сравнения, опять же используя одинаковые строки и искомые подстроки.
Sub Test3() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 4 x = InStrB(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 7 End Sub |
Результат 7 при побайтовом сравнении получен для кодировки, у которой один символ составляет 2 байта.
In this Article
- INSTR Function
- Instr Example
- Instr Syntax
- Instr Start Position
- Case-Insensitive INSTR Test
- InstrRev Function
- VBA Coding Made Easy
- InString Examples
- If String Contains Substring
- Find Text String in a Cell
- Find Position of a Character in a String
- Search String for Word
- If Variable Contains String
- Instr and the Left Function
- Using Instr in Microsoft Access VBA
INSTR Function
The VBA Instr Function checks if a string of text is found in another string of text. It returns 0 if the text is not found. Otherwise it returns the character position where the text is found.
The Instr Function performs exact matches. The VBA Like Operator can be used instead to perform inexact matches / pattern matching by using Wildcards.
Instr Example
The following code snippet searches the string “Look in this string” for the word “Look”. The Instr Function returns 1 because the text is found in the first position.
Sub FindSomeText()
MsgBox InStr("Look in this string", "Look")
End Sub
This second example returns 7 because the text is found starting in the 7th position:
Sub FindSomeText2()
MsgBox InStr("Don't Look in this string", "Look")
End Sub
Important! The Instr Function is case-sensitive by default. This means “look” will not match with “Look”. To make the test case-insensitive read below.
Instr Syntax
The syntax for the Instr function is as follows:
Instr( [start], string, substring, [compare] )
[start] (optional) – This optional argument is the starting position of the search. Enter 1 to start searching from position 1 (or leave blank). Enter 5 to start searching from position 5. Important! The INSTR function calculates the character position by counting from 1 NOT from the [start] position.
string – The string of text to search in.
substring – The string of text to find in the primary string.
[compare] (optional) – By default, Instr is case-sensitive. By setting this argument you can make Instr Case insensitive:
Argument vb Value |
Argument Integer | Description |
vbBinaryCompare |
0 |
(Default) Case-sensitive |
vbTextCompare |
1 |
Not Case-sensitive |
vbDatabaseCompare |
2 |
MS Access Only. Uses information in the database to perform comparison. |
Instr Start Position
The Instr start position allows you to indicate the character position where you will begin your search. Keep in mind however, the Instr output will always count from 1.
Here we set the start position to 3 to skip the first B:
Sub Instr_StartPosition()
MsgBox InStr(3, "ABC ABC", "B")
End Sub
The result is 6 because the second B is the 6th character in the string.
Case-Insensitive INSTR Test
By default, VBA treats “L” different from “l”. In other words, VBA is case-sensitive. This is true of all text functions. To make VBA case-insensitive, set the [compare] argument to 1 or vbTextCompare.
Public Sub FindText_IgnoreCase()
MsgBox InStr(1, "Don't Look in this string", "look", vbTextCompare)
End Sub
Alternatively, you can add Option Compare Text to the top of your code module:
Option Compare Text
Option Compare Text
Public Sub FindText_IgnoreCase2()
MsgBox InStr("Don't Look in this string", "look")
End Sub
Option Compare Text will impact all of the code in that module. I personally place this at the top of any module that deals with text because I never care about case differences.
InstrRev Function
The Instr Function searches from the left. Instead you can search from the right using the InstrRev Function. The InstrRev Function works very similarly to the Instr function.
Sub FindSomeText_FromRight()
MsgBox InStrRev("Look in this string", "Look")
End Sub
Just like the Instr function this will return 1 because there is only one instance of “Look” in the text. But if we add a second “Look”, you’ll see that it returns the position of the right-most “Look”:
Sub FindSomeText_FromRight()
MsgBox InStrRev("Look in this string Look", "Look")
End Sub
Next we will review more Instr examples.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
InString Examples
If String Contains Substring
Here we will use an If statement to test if a string contains a a substring of text:
Public Sub FindSomeText()
If InStr("Look in this string", "look") = 0 Then
MsgBox "No match"
Else
MsgBox "At least one match"
End If
End Sub
Find Text String in a Cell
You can also find a string in a cell:
Sub Find_String_Cell()
If InStr(Range("B2").Value, "Dr.") > 0 Then
Range("C2").Value = "Doctor"
End If
End Sub
Or loop through a range of cells to test if the cells contain some text:
Sub Search_Range_For_Text()
Dim cell As Range
For Each cell In Range("b2:b6")
If InStr(cell.Value, "Dr.") > 0 Then
cell.Offset(0, 1).Value = "Doctor"
End If
Next cell
End Sub
VBA Programming | Code Generator does work for you!
Find Position of a Character in a String
This code will find the position of a single character in a string and assign the position to a variable:
Sub Find_Char()
Dim n As Long
n = InStr("Here Look Here", "L")
End Sub
Search String for Word
This code will search a string for a word:
Sub Search_String_For_Word()
Dim n As Long
n = InStr("Here Look Here", "Look")
If n = 0 Then
MsgBox "Word not found"
Else
MsgBox "Word found in position: " & n
End If
End Sub
If Variable Contains String
This code will test if a string variable contains a string of text:
Sub Variable_Contains_String()
Dim str As String
str = "Look Here"
If InStr(str, "Here") > 0 Then
MsgBox "Here found!"
End If
End Sub
Instr and the Left Function
Instr can be used along with other text functions like Left, Right, Len, and Mid to trim text.
With the Left function you can output the text prior to a string of text:
Sub Instr_Left()
Dim str As String
Dim n As Long
str = "Look Here"
n = InStr(str, "Here")
MsgBox Left(str, n - 1)
End Sub
Using Instr in Microsoft Access VBA
All of the above examples work exactly the same in Access VBA as in Excel VBA.
To learn more, read our article: VBA text functions
<<Return to VBA Examples
На чтение 12 мин. Просмотров 18.2k.
Функция VBA InStr является одной из наиболее часто используемых функций в VBA. Он используется для нахождения текста внутри строки и действительно отлично справляется с работой.
Тем не менее, она часто используется, чтобы помочь извлечь часть строки, и эту задачу она выполняет плохо.
Если вы обнаружили, что извлечение текста в VBA является болезненным процессом, тогда читайте дальше. Эта статья покажет вам более простой и лучший способ, используя три реальных примера!
Содержание
- Краткое руководство к статье
- Краткая справка
- Введение
- Когда VBA InStr, Left, Right и Mid полезны
- Работа со строками различной длины
- Использование функции VBA InStr с Mid
- Функция Split
- Пример 1: Получение части имени файла
- Пример 2: диапазон IP-адресов
- Пример 3. Проверьте правильность имени файла
- Заключение
Краткое руководство к статье
В следующей таблице приведено краткое руководство к тому, что рассматривается в этой статье.
Строка | Тип | Задача | Как |
1234ABC334 | Фиксированный размер | Оставить слева 4 символа | Left(s,4) |
1234ABC334 | Фиксированный размер | Оставить справа 3 символа |
Right(s,3) |
1234ABC334 | Фиксированный размер | Оставить 5, 6, 7 символы | Mid(s,5,3) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить имя | Split(s,» «)(0) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить отчество |
Split(s,» «)(1) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить фамилию |
Split(s,» «)(2) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить фамилию |
Dim v As Variant v = Split(s, » «) lastname= v(UBound(v)) |
Краткая справка
Чтобы узнать больше об элементах, упомянутых в статье, перейдите по следующим ссылкам:
- Если вы хотите узнать больше о функциях InStr или InStrRev, пожалуйста, прочитайте Поиск в строке.
- Если вы хотите узнать больше о функциях Mid, Left или Right, посмотрите раздел Извлечение части строки.
- Для получения дополнительной информации о функции Split проверьте Строка в массив, используя Split.
- Оператор Like включен в Сравнение строк с шаблоном
Я использую Debug.Print в моих примерах. Он печатает значения в Immediate Window, которое вы можете просмотреть, нажав Ctrl + G (или выберите View-> Immediate Window)
Введение
В этой статье я собираюсь показать вам лучший способ извлечения символов из строки, чем использование функции VBA InStr с Left, Right или Mid.
Эта статья разбита следующим образом:
- Раздел 1: Как извлечь из строк фиксированного размера.
- Раздел 2: Как извлечь из строк переменного размера.
- Раздел 3: Как извлечь из строки переменного размера, используя функцию Split.
- Разделы с 4 по 6: некоторые примеры из реальной жизни.
Когда VBA InStr, Left, Right и Mid полезны
Если вы хотите проверить, содержит ли строка значение, InStr подходит для этой работы. Если вы хотите сделать простое извлечение, то отлично подойдут Left, Right и Mid.
Использование InStr для проверки, содержит ли строка текст
В следующем примере мы проверяем, содержит ли ФИО «Петрович». Если возвращаемое значение InStr больше нуля, то строка содержит значение, которое мы проверяем.
' Проверьте, содержит ли строка Петрович If InStr("Иван Петрович Сидоров", "Петрович") > 0 Then Debug.Print "Найдено" End If
Извлечение с Left, Right и Mid
Функция Left используется для получения символов слева от строки.
Функция Right используется для получения символов справа от строки.
Функция Mid используется для середины строки. Она такая же, как
Left, за исключением того, что вы даете ему стартовую позицию.
Sub IzvlechTekst() Dim s As String: s = "ABCD-7789.WXYZ" Debug.Print Left(s, 2) ' Печатает AB Debug.Print Left(s, 4) ' Печатает ABCD Debug.Print Right(s, 2) ' Печатает YZ Debug.Print Right(s, 4) ' Печатает WXYZ Debug.Print Mid(s, 1, 2) ' Печатает AB Debug.Print Mid(s, 6, 4) ' Печатает 7789 End Sub
Эти три функции работают нормально, если требуемый текст всегда одинакового размера и в одном и том же месте. Для других сценариев они требуют использования InStr, чтобы найти определенную позицию в строке. Это усложняет их использование.
Используйте Left, Right или Mid, когда символы всегда будут в одной и той же позиции.
Работа со строками различной длины
Многие из строк, с которыми вы имеет дело, разной длины. Простой пример — когда у вас есть дело со списком имен. Длина строки и требуемая часть (например, имя) могут каждый раз отличаться. Например:
Brooke Hilt
Pamela Jurado
Zack Kinzel
Eddy Wormley
Kaitlyn Rainer
Jacque Trickett
Kandra Stanbery
Margo Hoppes
Berenice Meier
Garrett Hyre
(Если вам нужен случайный список имен, попробуйте этот генератор случайных имен)
Использование функции VBA InStr с Left
В следующем примере мы собираемся получить имя из строки. В этой строке первое имя — это имя перед первым пробелом.
Мы используем функцию VBA InStr, чтобы получить позицию первого пробела. Мы хотим получить все символы до пробела. Мы вычитаем одну из позиции, так как это дает нам позицию последней буквы имени.
Sub PoluchitImya() Dim s As String, lPosition As Long s = "John Henry Smith" ' Печатает John lPosition = InStr(s, " ") - 1 Debug.Print Left(s, lPosition) s = "Lorraine Huggard" ' Печатает Lorraine lPosition = InStr(s, " ") - 1 Debug.Print Left(s, lPosition) End Sub
Давайте посмотрим на первый пример в приведенном выше коде. Первый пробел находится в позиции 5. Мы вычтем 1, что дает нам позицию 4. Это позиция последней буквы John, т.е.
Затем мы даем 4 функции Left, и она возвращает первые четыре символа, например, «John»
Мы можем выполнить ту же задачу в одной строке, передав возвращаемое значение из InStr в функцию Left.
Dim s As String s = "John Henry Smith" ' Печатает John Debug.Print Left(s, InStr(s, " ") - 1)
Использование функции VBA InStr с Right
В этом примере мы получим последнее слово в строке, то есть Smith. Мы можем использовать функцию InStrRev. Это то же самое, что InStr, за исключением того, что поиск выполняется с конца строки.
Важно отметить, что InStrRev дает нам позицию с начала строки. Поэтому нам нужно использовать его немного иначе, чем мы использовали InStr и Left.
Sub PoluchitFamiliyu() Dim s As String: s = "John,Henry,Smith" Dim Position As Long, Length As Long Position = InStrRev(s, ",") Length = Len(s) ' Печатает Smith Debug.Print Right(s, Length - Position) ' Альтернативный метод. Печатает Smith - делает в одну строку Debug.Print Right(s, Len(s) - InStrRev(s, ",")) End Sub
Как работает приведенный выше пример:
- Мы получаем позицию последнего пробела, используя InStrRev: 11
- Мы получаем длину строки: 16.
- Вычитаем позицию из длины: 16-11 = 5
- Мы даем 5 функции Right и возвращаем Smith
Использование функции VBA InStr с Mid
В следующем примере мы получим «Henry» из строки. Слово, которое мы ищем, находится между первым и вторым пробелом.
Мы будем использовать функцию Mid здесь.
Sub PoluchitVtoroeImya() Dim s As String: s = "John Henry Smith" Dim firstChar As Long, secondChar As Long Dim count As Long ' Найти пробел плюс 1. Результат 6 firstChar = InStr(s, " ") + 1 ' Найти 2-й пробел. Результат 11 secondChar = InStr(firstChar, s, " ") ' Получить число символов. Результат 5 count = secondChar - firstChar ' Печатает Henry Debug.Print Mid(s, firstChar, count) End Sub
Как видите, это сложно сделать и требует немного усилий, чтобы выяснить. Нам нужно найти первое место. Тогда нам нужно найти второе место. Затем мы должны вычесть одно из другого, чтобы дать нам количество символов, которые нужно взять.
Если у вас есть строка с большим количеством слов, то это может быть очень сложно. К счастью для нас, гораздо проще было извлечь символы из строки. Это называется функцией Split.
Функция Split
Мы можем использовать функцию Split для выполнения приведенных выше примеров. Функция Split разбивает строку на массив. Тогда мы можем легко получить доступ к каждому элементу.
Давайте попробуем те же три примера еще раз, и на этот раз мы будем использовать Split.
Dim s As String: s = "John Henry Smith" Debug.Print Split(s, " ")(0) ' John Debug.Print Split(s, " ")(1) ' Henry Debug.Print Split(s, " ")(2) ' Smith
Ого! Какая разница с использованием Split. Как это работает:
- Функция Split разбивает строку везде, где есть пробел.
- Каждый элемент помещается в массив, начиная с нуля.
- Используя номер местоположения, мы можем получить доступ к элементу массива.
В следующей таблице показано, как может выглядеть массив после использования Split.
Примечание: первая позиция в массиве равна нулю. Наличие нулевых массивов является стандартным в языках программирования.
0 | 1 | 2 |
John | Henry | Smith |
В приведенном выше коде мы разделяем строку каждый раз, когда ее используем. Мы также можем разделить строку один раз и сохранить ее в переменной массива. Тогда мы можем получить к нему доступ, когда захотим.
Sub SplitName() Dim s As String: s = "John Henry Smith" Dim arr() As String arr = Split(s, " ") Debug.Print arr(0) ' John Debug.Print arr(1) ' Henry Debug.Print arr(2) ' Smith End Sub
Если вы хотите узнать больше о массивах, я написал о них целую статью под названием «Полное руководство по использованию массивов в Excel VBA».
В следующих разделах мы рассмотрим примеры из реальной жизни. Вы увидите преимущество использования Split вместо функции InStr.
Пожалуйста, не стесняйтесь попробовать это сами. Это отличный способ учиться, и вы можете повеселиться, пытаясь понять их (или, может быть, только у меня так!)
Пример 1: Получение части имени файла
Представьте, что мы хотим извлечь числа из следующих имен файлов
«VB_23476_Val.xls»
«VV_987_Val.txt»
«VZZA_12223_Val.doc»
Это похоже на пример, где мы получаем второй элемент. Чтобы получить значения здесь, мы используем подчеркивание (то есть «_»), чтобы разбить строку. Смотрите пример кода ниже:
Sub PoluchitNomer() ' Печатает 23476 Debug.Print Split("VB_23476_Val.xls", "_")(1) ' Печатает 987 Debug.Print Split("VV_987_Val.txt", "_")(1) ' Печатает 12223 Debug.Print Split("ABBZA_12223_Val.doc", "_")(1) End Sub
В реальном мире вы обычно читаете такие строки из разных ячеек. Допустим, эти имена файлов хранятся в ячейках от А1 до А3. Мы немного изменим приведенный выше код:
Sub ChitatNomera() Dim c As Range For Each c In Range("A1:A3") ' Разделите каждый элемент по мере его прочтения Debug.Print Split(c, "_")(1) Next c End Sub
Пример 2: диапазон IP-адресов
Пример здесь взят из вопроса на веб-сайте StackOverflow.
У пользователя есть строка с IP-адресом в формате «BE-ABCDDD-DDS 172.16.23.3».
Он хочет, чтобы IP в диапазоне от 172,16 до 172,31 был действительным. Так например:
- «BE-ABCDDD-DDS 172.16.23.3» действителен
- «BE-ABCDDD-DDS 172.25.23.3» действителен
- «BE-ABCDDED-DDS 172.14.23.3» не действителен
- «BE-ABCDDDZZ-DDS 172.32.23.3» не действителен
Вот как бы я это сделал. Сначала я разбил строку по периодам. Число, которое мы ищем, находится между первым и вторым периодом. Поэтому это второй пункт. Когда мы разделяем строку, она помещается на первую позицию в массиве (помните, что массив начинается с нулевой позиции).
Полученный массив будет выглядеть так:
0 | 1 | 2 | 3 |
BE-ABCDDD-DDS 172 | 31 | 23 | 3 |
Код ниже показывает, как это сделать.
Sub IPAdd() ' Проверьте номер, чтобы проверить разные IP-адреса Dim s1 As String: s1 = "BE-ABCDDD-DDS 172.31.23.3" ' Разбить строку, используя символ точки Dim num As Long num = Split(s1, ".")(1) ' Проверьте правильность номера Debug.Print num >= 16 And num <= 31 End Sub
Пример 3. Проверьте правильность имени файла
В этом последнем примере мы хотим проверить правильность имени файла. Есть три правила.
- Должно заканчиваться на .pdf
- Он должен содержать АА
- Он должен содержать 1234 после А
В следующих таблицах показаны некоторые допустимые и недействительные элементы:
Имя файла | Статус |
AA1234.pdf | Действителен |
AA_ljgslf_1234.pdf | Действителен |
AA1234.pdf1 | Недействительно — не заканчивается на .pdf |
1234 AA.pdf | Недействительно — АА не до 1234 |
12_AA_1234_NM.pdf | Действителен |
Сначала мы сделаем это, используя функции InStr и Right.
Sub IspInstr() Dim f As String: f = "AA_1234_(5).pdf" ' Сначала найдите АА, так как 1234 должен идти после Dim lPos As Long: lPos = InStr(f, "AA") ' Ищите 1234 и убедитесь, что последние четыре символа - .pdf Debug.Print InStr(lPos, f, "1234") > 0 And Right(f, 4) = ".pdf" End Sub
Этот код очень грязный. К счастью для нас, у VBA есть Сравнение с шаблоном. Мы можем проверить шаблон строки без необходимости искать элементы и позиции и т.д. Мы используем оператор Like в VBA для сопоставления с шаблоном. Пример ниже показывает, как это сделать.
Sub IspSravnenie() Dim f As String: f = "AA_1234_(5).pdf" ' Определить шаблон Dim pattern As String: pattern = "*AA*1234*.pdf" ' Проверьте каждый элемент по шаблону Debug.Print f Like pattern ' ИСТИНА End Sub
В приведенном выше примере звездочка в шаблоне относится к любому количеству символов.
Давайте разберем этот паттерн * AA * 1234 * .pdf
*- любая группа символов
AA — точные символы AА
*- любая группа символов
1234 — точные символы 1234
*- любая группа символов
.pdf — точные символы .pdf
Чтобы показать, что это работает правильно, давайте попробуем это на всех именах примеров в таблице.
Sub IspSravnenieTest() ' Создать коллекцию имен файлов Dim coll As New Collection coll.Add "AA1234.pdf" coll.Add "AA_ljgslf_1234.pdf" coll.Add "AA1234.pdf1" coll.Add "1234 AA.pdf" coll.Add "12_AA_1234_NM.pdf" ' Определить шаблон Dim pattern As String: pattern = "*AA*1234*.pdf" ' Проверьте каждый элемент по шаблону Dim f As Variant For Each f In coll Debug.Print f Like pattern Next f End Sub
На выходе:
ИСТИНА
ИСТИНА
ЛОЖЬ
ЛОЖЬ
ИСТИНА
Чтобы узнать больше о сопоставлении с шаблоном и ключевом слове Like, ознакомьтесь с этой публикацией.
Заключение
InStr и InStrRev действительно полезны только для простых задач, таких как проверка наличия текста в строке.
Left, Right и Mid полезны, когда положение текста всегда одинаково.
Функция Split — лучший способ извлечь переменную строку.
При попытке проверить формат строки, которая не является фиксированной по размеру, ключевое слово Like (т.е. Сопоставление с образцом) обычно обеспечивает более простое решение.
InStr Function in Excel VBA
The VBA InStr function helps find the position of a given substring within a string. It returns the first occurrence of the substring in the form of an integer (output). A string is a series of characters or text supplied to the function in double quotation marks.
For example, the InStr can extract a substring from a sentence, apply the desired font to a particular string, find the position of a character within the string, and so on.
The VBA InStr function in excel begins searching from left to right.
Table of contents
- InStr Function in Excel VBA
- The Syntax of the VBA InStr Function
- VBA InStr Examples
- Example #1–“Start” Argument is Omitted
- Example #2–“Start” Argument is Specified
- Example #3–Case-sensitive Search
- Example #4–Case-insensitive Search
- Example #5–Advanced Level
- Properties of VBA InStr Function
- Frequently Asked Questions
- Recommended Articles
You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA InStr (wallstreetmojo.com)
The Syntax of the VBA InStr Function
The syntax of the function is shown in the following image:
The function accepts the following arguments:
- Start: This is the position from which the function begins to search. For example, if “start” is set at 3 and the character “a” is to be found in the word “Bangalore,” the output is 5.
- String 1: This is the actual string within which the substring is to be found. For example, if the character “a” is to be found in the word “Bangalore,” “string 1” is “Bangalore.”
- String 2: This is the substring to be found. For example, if the character “a” is to be found in the word “Bangalore,”“string 2” is “a.”
- Compare: This is the type of comparison to be performed. The types of comparison methods are shown in the following image.
The three comparison methods are explained as follows:
1. vbBinaryCompare: This is a binary comparison and can be entered as zero (0). It is a case-sensitive search of the substring (string 2) in the actual string (string 1).
For example, if 0 is specified in the argument and:
a. The character “a” is to be found in the word “Bangalore,” the output is 2.
b. The character “A” is to be found in the word “Bangalore,” the output is 0. This is because the supplied string is in uppercase which is not found in “string 1.”
2. vbTextCompare: This is a textual comparison and can be entered as one (1). It is a case-insensitive search of the “string 2” in the “string 1.”
For example, if 1 is specified in the argument and:
a. The character “a” is to be found in the word “Bangalore,” the output is 2.
b. The character “A” is to be found in the word “Bangalore,” the output is 2. This is because this comparison method ignores the casing of the substring.
3. vbDatabaseCompare: This can be entered as two (2). It compares based on the information of the Microsoft Access database.
The “string 1” and “string 2” are required arguments, while “start” and “compare” are optional.
Note 1: If the “start” parameter is omitted, the default is 1, implying that the search begins from the first position.
Note 2: If the “compare” parameter is omitted, the default method is “vbBinaryCompare.”
VBA InStr Examples
You can download this VBA Instr Function Excel Template here – VBA Instr Function Excel Template
Example #1–“Start” Argument is Omitted
We have to find the position of character “a” in the word “Bangalore.”
Step 1: Enter the following code.
Sub Instr_Example1() Dim i As Variant i = InStr("Bangalore", "a") MsgBox i End Sub
Step 2: Press F5 or run the VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more manually, as shown in the following image.
Step 3: The output is 2, as shown in the following image. Hence, the character “a” is at the second position in the word “Bangalore.”
Example #2–“Start” Argument is Specified
We have to find the position of character “a” in the word “Bangalore.” The search should begin from the third position.
Step 1: Enter the following code.
Sub Instr_Example2() Dim i As Variant i = InStr(3, "Bangalore", "a") MsgBox i End Sub
Step 2: Press F5 or run the VBA code manually, as shown in the following image.
Step 3: The output is 5, as shown in the following image. Since the search begins from the third letter (n), the VBA InStr function in excel ignores the first occurrence (second position) of the character “a.”
Hence, in this case, the character “a” is at the fifth position in the word “Bangalore.”
Example #3–Case-sensitive Search
We have to find the character “A” in the word “Bangalore.”
Let us supply the compare argument “vbBinaryCompare” to the VBA InStr function.
Step 1: Enter the following code.
Sub Instr_Example3() Dim i As Variant i = InStr(1, "Bangalore", "A", vbBinaryCompare) MsgBox i End Sub
Step 2: Press F5 or run the VBA code manually, as shown in the following image.
Step 3: The output is 0, as shown in the following image. Since the argument “vbBinaryCompare” is supplied, the VBA InStr function in excel searches for the uppercase letter “A.”
Hence, the function returns 0 because it could not find the uppercase letter “A” in the word “Bangalore.”
Example #4–Case-insensitive Search
We have to find the character “A” in the word “Bangalore” using the case-insensitive approach.
Let us supply the compare argument “vbTextCompare” to the VBA InStr function.
Step 1: Enter the following code.
Sub Instr_Example4() Dim i As Variant i = InStr(1, "Bangalore", "A", vbTextCompare) MsgBox i End Sub
Step 2: Press F5 or run the VBA code manually, as shown in the following image.
Step 3: The output is 2, as shown in the following image. Since the argument “vbTextCompare” is supplied, the InStr function ignores the casing of the substring “A.”
Hence, the function returns 2 because the letter “A” or “a” is present at the second position in the word “Bangalore.”
Example #5–Advanced Level
Let us consider an example of the advanced level of VBA InStr function in excel.
The succeeding image shows five worksheets in Excel with the names, “Data,” “Summary 1,” “Summary 2,” “Summary 3,” and “Summary 4.”
We want to hide all worksheets except for the sheet “Data.”
Step 1: Enter the following code to hide all those sheets which contain the word “Summary” in their name.
Sub To_Hide_Specific_Sheet() Dim Ws As Worksheet For Each Ws In ActiveWorkbook.Worksheets If InStr(Ws.Name, "Summary") > 0 Then Ws.Visible = xlSheetVeryHidden End If Next Ws 'InStr function looks for word or phrase in the sheet name 'If it finds then it will be hidden End Sub
Step 2: Press F5 or run the VBA code manually, as shown in the following image. In the output, only the sheet “Data” is visible. The remaining four sheets are hidden.
Likewise, we can unhide those sheetsThere are different methods to Unhide Sheets in Excel as per the need to unhide all, all except one, multiple, or a particular worksheet. You can use Right Click, Excel Shortcut Key, or write a VBA code in Excel. read more which contain the word “Summary” in their name.
Step 1: Enter the following code to unhide all the sheets.
Sub To_UnHide_Specific_Sheet() Dim Ws As Worksheet For Each Ws In ActiveWorkbook.Worksheets If InStr(Ws.Name, "Summary") > 0 Then Ws.Visible = xlSheetVisible End If Next Ws 'InStr function looks for word or phrase in the sheet name 'If it finds then it will be hidden End Sub
Step 2: Press F5 or run the VBA code manually, as shown in the following image. In the output, all the five sheets are unhidden.
Properties of VBA InStr Function
The properties of the function are listed as follows:
- It is a case-sensitive function. To eliminate this issue, supply the “compare” argument “vbTextCompare.”
- It is a VBA functionVBA functions serve the primary purpose to carry out specific calculations and to return a value. Therefore, in VBA, we use syntax to specify the parameters and data type while defining the function. Such functions are called user-defined functions.read more and cannot be used like other in-built formulas of Excel.
- It returns zero if it cannot find “string 2” in “string 1.”
Frequently Asked Questions
Define the VBA InStr function.
The VBA InStr function returns the position of one string within another string. This position corresponds to the first occurrence of the substring. The function returns an integer as the output. It returns zero (0) if the substring is not found within the string.
The syntax and the arguments of the function are listed as follows:
“InStr([start],string1,string2,[compare])”
• Start: It specifies the position from which search should begin. The default value is 1.
• String 1: It is the actual string within which the substring is to be searched.
• String 2: It is the substring to be searched.
• Compare: It specifies the comparison method to be used. The methods are stated as follows:
a. vbBinaryCompare or 0: It is used for a case-sensitive search of the substring within the string.
b. vbTextCompare or 1: It is used for a case-insensitive search of the substring within the string.
c. vbDatabaseCompare or 2: It is used for comparison with Microsoft Access database.
The arguments “string 1” and “string 2” are mandatory, while “start” and “compare” are optional.
What is the difference between the InStr and the InStrRev functions of VBA?
How to use the VBA InStr function in excel with wildcards?
With the usage of wildcards, the InStr function returns “true” or “false” depending on whether it has found the specified substring within the string or not.
The function supports the usage of the following wildcards:
1. Asterisk (*): It represents one or more characters of a string and works as follows:
• “a*” refers to the text that begins with the character “a.”
• “*a” refers to the text that ends with the character “a.”
• “*a*” refers to the text that has the character “a” in the middle.
2. Question mark (?): It represents one character of a string and works as follows:
• “a?” refers to two characters beginning with “a.”
• “?a” refers to two characters ending with “a.”
• “?a?” refers to three characters having “a” in the middle.
Likewise, the VBA InStr function can be used with the tilde (~) as well.
Recommended Articles
This has been a guide to VBA InStr Function in Excel. Here we learn how to use the InStr function along with step by step examples and a downloadable excel template. Below you can find some useful Excel VBA articles-
- VBA FileCopy Function
- Excel VBA FileDialog
- Excel VBA String Functions
- Excel VBA SubString
- VBA Name Worksheet
Функция InStr
Смотрите также и вот так 0 ? «!» из всех: А может отдаться ребята и напишут, макроса, нашлось слово, значений из столбца: между ними. Поэтому помощью vba же, с элементами массива: + 1 Loop не понял, какStartСправочник разработчикаOption CompareПримечание: вот «попал»If InStr(k, aStringArray(i строк.
на откуп рекордеру? и протестируют, и или даже лучше АПисал бы сразу я в 99% это сделать оказалось
Авторские программы, библиотеки,
While VBA.Mid(Cells(1, 1).Value,
делать. Нужно, что >в раскрывающемся списке. Мы стараемся как можноikki — 1), «!»)Sub Print() DimCells.Find(What:=»т*к», After… готовый код мне
слова (записанные напримерfor I=1 to — все в
случаев использую ПОИСК. |
значительно проще, аккуратней |
надстройки и шаблоны |
ST + LN, бы в экселеString2 рядом с полемvbBinaryCompare оперативнее обеспечивать вас: после последнего «!» <> 0 ThenСмысл aStringArray(), aWordStringArray() Asкорректно работает. напишут. И ещё через запятую), введенные CInt(Sheets(1).Cells(Rows.Count, 3).End(xlUp).Row) + сад!По файлу еще |
и красивей |
(«И для любителей 1) <> « в ячейке А1 |
0 |
Поиск0 |
актуальными справочными материалами |
отрабатывает (в том данного условия, на String Dim aStringNew скажут: «Да, не в другую ячейку. 1 »цикл начинаемSkyPro вариантКазанский экстрима») » With Cells(1, выполнялся поиск слов,Параметрыи введите одноВыполняется двоичное сравнение. на вашем языке. |
числе) строка мой взгляд, заключется As String Dim: т.е. ты хочешь волнуйся ты так, Как делать - с 1, т.к.
: VictorM, если вы
200?’200px’:»+(this.scrollHeight+5)+’px’);»>=—ЕЧИСЛО(ПОИСК(B$1;$A2)): В принципе можноИли работать с 1).Characters(Start:=ST, Length:=LN).Font .Color
записанных через запятую |
Элемент |
или несколько слов |
vbTextCompare |
Эта страница переведена |
32 в следующем. aQuantitySymbols, aQuantityExclam, aQuantityExclamMax сказать, что твой |
всё прекрасно работает |
мне не вспомнить. |
номера сток в |
хотите доп столбец |
VictorM |
и формулой одной |
указателями, чтобы копировать |
= RGB(0, 0, |
в столбец А2,Описание в поле поиска.1 автоматически, поэтому ее |
, переменная
Если функция InStr(k, |
As Integer Dim |
код не находит |
и со знаком |
Казанский |
Excel »начинается с |
и поиск пустой |
: Да, действительно, так |
для всех: |
символ в другую |
255) .Bold = |
а результат, и |
Start |
В данном примере функция |
Выполняется текстовое сравнение. |
текст может содержать |
k
aStringArray(i — 1), i, j, k, слово «телекс» на вопроса и со: Функция Instr 1. Далее идет строки, то луче удобнее, т.к. вполне=ПОДСТАВИТЬ(ПРАВСИМВ(ЛЕВСИМВ(«№»&ПОДСТАВИТЬ($A$1;»№»;ПОВТОР(«№»;999));999*СТРОКА(A2));999);»№»;»») строку или переменную True End With
Примеры
найденные слова, сНеобязательный. Числовое выражение, котороеInStrvbDatabaseCompare неточности и грамматическиестановится больше, чем «!») возвращает не m, l As листе? звёздочкой, т.е. сBeaRRR выражение, »которое показывает уж отдельную формулу возможно, что потребуетсяСТРОКА(A2) — это
другого типа:
End SubМожно сделать числом их повторений задает первую позициюиспользуется для получения2 ошибки. Для нас длина строки и 0, то выполняем Long ‘счетчики DimВот я сейчас любым символом подстановки».
: Да, функцию нашел, кол-во строк на для него: поиск и по номер вхождения. ЕслиКак написать функцию, что бы искало
(если такое возможно)
для каждого поиска. позиции первого вхожденияТолько в Microsoft Office важно, чтобы эта цикл операторы после THEN, lLastRow As Long написал слово «телекс»Я прав? Нафига спасибо. но как 1-м листе if200?’200px’:»+(this.scrollHeight+5)+’px’);»>=—($A2=»») другим символам. вытягиваете не по
переворачивающую строку и не с в искомом тексте,
Если параметр опущен, одной строки в Access 2007. Выполняется статья была вамDo While иначе идем в Dim lLastColums As на листе, включил было создавать тему, саму программу писать instr(sheets(1).cells(I,2), sheets(1).cells(I,2)) <>VictorMСпасибо. строкам, а поКак выделить числовую начала слова, а
записались в другую, поиск начинается с другую. сравнение на основе полезна. Просим васзаканчивается при проверке
ELSE
Long aQuantitySymbols = запись макроса и если вы даже
все равно не 0 then ''тут: Спасибо, то, что
VictorM столбцам, то замените часть текста? (в по части слова.
третью, ячейку. (ещё позиции первого символа.
Dim SearchString, SearchChar, MyPos сведений из базы уделить пару секунд условия продолжения цикла.
Функция InStr(k, aStringArray(i 0 aQuantityExclamMax =
ввёл строку поиска не успели столкнуться
знаю. Не могли ищем строку из
нужно.: Это я начинаю на СТОЛБЕЦ(B1)
коде строки 93-110).Но это уже лучше бы было,
support.office.com
Функция InStr
В том случае, когда
SearchString ="XXpXXpXXPXXP" '
данных. и сообщить, помогла так что даже — 1), «!») 0 ‘Вычисляем кол-во «т*к», нажал «Найти с проблемой? бы подсказать? столбца А, вЦитата только сейчас понимать,На всякий случайpashulka на самостоятельную разработку если б они значение параметра String to searchВозвращаемые значения ли она вам,
замена
возвращает 0 только строк с данными далее», макрос нашёлSub Макрос1()Казанский подстроке В sheets(1).cells(I,3)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Думаю, тут есть варианты ни разу не UDF Function ТриНомера(ByVal: Ёще один вариант,BeaRRR выделялись (ну илиStart
in.
Если с помощью кнопокна в данном случае в случае, если
и вносим текст
ячейку со словом | Dim rFoundRng As |
: С Вас - = sheets(1).cells(I,1) & | и короче, но |
приходилось применять ни x) Dim i& | который, впрочем, уже |
: вау! шикарно!! ОГРОМНОЕ подчеркивались) каким ни | равно Null, возникает |
SearchChar = «P»Возвращаемое значение | внизу страницы. Для |
не спасает. символа «!» нет | каждой строки в |
«телекс». Вот код Range файл XLS: исходный | «, » end для этого нужно |
то, ни другое. On Error Resume упоминался ранее … | СПАСИБО!) |
будь образом в
ошибка. | ‘ Search for |
строка1 является пустой | удобства также приводимпс. для реальной в строке и массив aStringArray lLastRowSub Макрос2()Dim sTextToSearch As данные и в if next i быть Мастером ЭкселяПро НАЙТИ почитал, Next ReDim t(1Private Sub Test()А что там первой ячейке…что быПараметр «P». |
0 | ссылку на оригинал работы удобнее такой |
в моем примере | = Cells(Rows.Count, 1).End(xlUp).Row |
Cells.Find(What:=»т*к», After:=ActiveCell, LookIn:=xlFormulas, | String каком виде надоАпостроффНе скромничайте ) а вот про To 3) x Dim strX As насчёт поиска по их сразу видноStart’ A textualстрока1 равна NULL |
(на английском языке).
способ для нахождения почему-то данное условие MsgBox («Кол-во заполненных
LookAt:= _ | sTextToSearch = «т*к» | получить результат. |
: Sub Search() Dim | Все просто супер. | ПОИСК и не = Split(x, «№») String, arrX() As |
части слова? мне | было. но не | является обязательным, если |
comparison starting at | NULL | Возвращает значение типа |
количества определенного символа | не срабатывает. Вот | строк = «xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,Set rFoundRng =BeaRRR |
ra As Long, И дело вовсе подумал даже, что For i = Byte, c As бы очень и знаю, возможно ли задан параметр position 4. Returnsстрока2 является пустойVariant в строке: я и пытаюсь & lLastRow) ReDim MatchCase:=False _ Cells.Find(sTextToSearch, , xlFormulas,: да без разницы, rb As Long не в длине его можно применить. 1 To 3 Variant strX = очень пригодилось это... такое) По семуCompare 6.начало(n=len(s)-len(Replace(s, sSymbol, "")) разобраться... aStringArray(lLastRow - 1), SearchFormat:=False).Activate xlPart) в каком виде
Columns(3).ClearContents For ra
(кол-ве знаков) в
Поиск подстроки в строке
Спасибо, будем учить t(i) = Val(x(i)) » Private Sub как записать? вкладываю файл-пример. МнеString1MyPos = Instr(4,строка2 равна NULLLongАпостроффУкажите, пожалуйста, к For i =End SubIf Not rFoundRng результат в принципе) = 1 To формуле. матчасть Next ТриНомера = Test2() Dim strX$,Alex77755 нужен сам макрос,Обязательный. Строковое выражение,в котором SearchString, SearchChar, 1)NULL), определяющее положение первого: Спасибо, Уважаемые Diskretor каким переменным относится 1 To lLastRowТак что и Is Nothing Then мне даже в 65536 If Cells(ra,
Думаю, что тутRAN t End FunctionВводить arrX() As Byte,: Не охота снова сама программа, ибо ведется поиск
’ A binaryстрока2 не найдена вхождения одной строки и ikki. Очень ваш комментарий, а aQuantityExclam = 0
мой код иMsgBox «Найдено: « голову не идет
1) = «» дело в понимании: SkyPro, можно и как формулу массива, i& strX = создавать файл для писать их яString2 comparison starting at0 в другую. помогли. Разобрался в то я не aStringArray(i — 1)
записанный рекордером - & rFoundRng, 64, ничего %) Then Exit For процесса. не прибедняться. выделив 3 соседние « проверки. не умею. ЗаранееОбязательный. Отыскиваемое строковое выражение position 1. Returnsстрока2 найдена в строке1Некоторые примеры чем косяк =). догоняю… = Cells(i, 1) оба находят слово «Поиск»ну пусть, например, For rb =До чего, кстати,Формулы вполне на ячейки и нажимаяiDeusДа и к благодарюCompare 9.Позиция найденного соответствияСинтаксис И за кодPiton777 ‘Вычисляем максимальную длину «телекс» по поискуElse окно выдаст с
1 To 65536 мне еще учиться уровне… Ctrl+Shift+Enter.
: Здравствуйте, подскажите пожалуйста, тому же изначальноAlex77755Необязательный. Задает тип сравненияMyPos = Instr(1,начало > строка2Instr спасибо.: Смысл понятен. И строки, и максимальное «т*к»MsgBox «На листе найденными словами…..или в If Cells(rb, 2) и учиться)SkyProVictorM как можно решить
говорил: В принципе возможно
для строк. SearchString, SearchChar, 0)0
(Есть еще 1 его писал явно кол-во восклицательных знаковЮрий М ничего не найдено!»,
исходном тексте их = «» ThenСпасибо всем за: Но я ведь
: Здравствуйте, уважаемые! такую задачу:На словах: добавить
очень многое, ноЕсли значение параметра’ Comparison is
Замечания[
вопрос. За VBA человек, знающий С. в каждой строке: А вот так: 48, «Поиск» выделит, если так Exit For If участие и науку.
прав былСобственно, вопрос вВ таблице Excel ещё один цикл ты должен отдавать
Compare binary by defaultФункцияначало,
сел только пару1) Проблема в If (Len(aStringArray(i -Sub Макрос3()
Exit Sub можно (последнее лучше) InStr(1, Cells(rb, 2),
KotaaaУ Александра формула названии темы. Нужно
есть столбец со Do-Loop. себе отчёт, что
CyberForum.ru
Цикл по символам строки
равно Null, возникает’ (last argumentInStrB] дней назад. Иногда, строке 29 (последний 1)) > aQuantitySymbols)Cells.Find(What:=»т*к», After:=ActiveCell, LookIn:=xlFormulas,End If
исходные данные не Cells(ra, 1), vbTextCompare): Всем хорошего дня!
короче. найти определенный символ строками вида:
Только смещать начало(ST) в первом тексте ошибка. is omitted).используется с байтовымистрока1, строка2 случайно, запускаю бесконечный «!» не будет Then aQuantitySymbols = LookAt:= _End Sub важны — мне
Then Cells(rb, 3)Пытаюсь решить такуюВсе равно спасибо. в строке и«ЭРТ №2 Такой-то влево до пробела нет слова «Бомба»
В том случае,MyPos = Instr(SearchString, данными, содержащимися в[ цикл и VBA
распознан; нулевого литерала Len(aStringArray(i — 1))xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,Данный код находит
нужен сам алгоритм = Cells(rb, 3) задачу. Если коротко, Я и сам если он есть,
край, Такой-то район,BeaRRR
BeaRRR когда параметр SearchChar) ‘ Returns
строке. Функция, сравнение тупо зависает. Ctrl в бейсике нет).
‘Для проверки выводим MatchCase:=False _ такие слова как: этот. что бы, & Cells(ra, 1) то ищу ключевые не ожидал, что то 1, если в/г ВоенныйГородок №: Да если бы
CyberForum.ru
Простой парсинг строки в Excel, поиск значения после символа
: Мне важен самCompare 9.InStrB
] + Break неДолжно быть 2)
сообщение о новом, SearchFormat:=False).Activate- тук как уже говорил, & «,» End (так называемые META выдам столько вариантов.
нет — то 42 Кот 174 я ещё умел алгоритм, сам макросопущен,тип сравнения определяетсяMyPos = Instr(1,
возвращает позицию байта,) помогает. не посоветуете Проблема в логике:
макс значении кол-ваEnd Sub- так искал содержимое одной If Next rb Keywords) в наименованиях
VictorM 0.
Здание контрольно-пропускного пункта это делать… Я (прошу написать)) а установками оператора SearchString, «W») ‘ а не позициюФункция таблетку против этой даже если п.1 символов MsgBox (aQuantitySymbols)На листе два- тампакс ячейки в другой Next ra End товаров.: Уважаемые, а можноЯ вроде как (караулка)(встроенная) №174» без ноль почти в текст я поменяюOption Compare Returns 0.
знака первого вхожденияInStr напасти? Как остановить сделать, последний «!»
End If k слова: Ток и- томскЗаранее благодарю SubПодробнее. Есть столбик вопрос вдогонку, чтобы что-то сделал, написал
кавычек. программировании. И именно потом. помогите пожалуйстаУстановкиInStr([Start,]String1,String2[,Compare]) одной строки вимеет следующие аргументы: макрос?
в строке выполнит = 1 Do Телекс. Находится ток.- телексКазанскийKotaaa «А» с определенными
уж все решить.200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(НАЙТИ(«Ф»;A2);1;0)Необходимо в три поэтому прошу помощи
Alex77755
Для параметраInStrB([Start,]String1,String2[,Compare]) другую.АргументPiton777 первую часть if,
While k <Да ладно -Юрий М: Вам лень рисовать: Спасибо! А что фразами (может бытьСделал вывод единицы,НО. Определяется только соседних ячейки той здесь.: Вот так загоняешьCompareФункцияИспользование функции InStr вОписание: не запускать бесконечный
CyberForum.ru
Найти символ в строке (Функция ЕСЛИ)
и команды в Len(aStringArray(i — 1))
я сам вижу,: Павел, что-то мне пример — мне за переменная «I» одно слово,может состоять если строка пустая символ в зависимости же строки, выдернуть
Alex77755 в массив слова:
используются следующие установки:
InStr выражении.начало цикл. else будут опущены. If InStr(k, aStringArray(i что и в
показалось подозрительным: по тем более. здесь? из двух и (может быть и
от регистра. Мне числа после первого,: По большому счёту
Dim m() AsКонстанта( Функцию
Необязательный аргумент. Числовое выражение,
а вообще кнопка3) Объявляйте Dim - 1), "!")
Word поиск не
маске «т*к» слово
Выделить часть часть
Апострофф более), короче столбик
такое) вот так же нужно ,
второго и третьего
помощь это когда String If InStr(1,
ЗначениеIn Str
InStr которое задает начальное
reset правильно. <> 0 Then
совсем так. Я телекс не должно
текста в ячейке
, «А» со строками.200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИ(A2;»») чтобы символ определялся
символа «№» соответственно. делаешь сам и Cells(1, 2).Value, «,»)Описаниеing) служит для поиска
можно использовать в положение для каждогона корпусе ещё4) Для Instr aQuantityExclam = aQuantityExclam про подстановки. Только находиться. Вот если — ищитеСпасибо! Прикинул в И столбик «В»Работает. вне зависимости оУчитывая, что между
тебе помогают. > 0 Then
vbUseCompareOption
номера символа(номера байта любых выражениях. Например, поиска. Если аргумент ни разу не пользуйтесь вот такой + 1 k
хотел сказать, что
бы «т*к*», тоCharacters уме сначала, что с наименованиями товаровА вот в регистра.
№ и цифройНе смотря на m = Split(Replace(Cells(1,-1 для
если требуется определить не задан, поиск
подводила логикой: = InStr(k, aStringArray(i
корректнее было бы да. Штатный поиск
в сочетании с будет происходить - (взятый из прайс-листа).
понравившихся мне вариантахИ если такого
может быть или это несоответствие я 2).Value, » «,Сравнение выполняется с использованием
InStrB позицию первой точки начинается с первогоPiton777
k = 0: — 1), «!») выполнение поиска по именно так и
InStr
коротко и логично.
Нужно искать вхождение из постов №8 символа нет, мне
не быть пробел.
показал как это
«»), «,») Else
установок для оператора
), с которого начинается (
символа. Если аргумент
: Меня Ctrl + aQuantityExclam = 0 + 1 MsgBox
маске, например, для сработает. А Ваш
(можно в сочетании И все работает! (точное соответствие фразы)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИ($A2;»*»&B$1&»*») нужен 0, а
Я так понимаю, можно сделать. ReDim m(0): m(0)Option Compare
в заданной строке.начало Break всегда спасал
Do k = («Номер символа в слов токсин, такси, макрос нашёл и с моим ником).Интересно, что Вы фразы из столбикаи №9
у меня пишется необходимо 3 формулы,И даже больше = Trim(Cells(1, 2).Value)vbBinaryCompare образец поиска. Поиск) в поле, котороесодержит значение NULL,Ну попробуй InStr(k + 1, строке » & таксофон не «т*к», слово «стук», хотя
vladk просто число 65536 «А» в каждойКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=—ЕЧИСЛО(ПОИСК(B$1;$A2)) ошибка #ЗНАЧ! но никак не
того: показал как End IfА потом
0 идет от указанной содержит IP-адрес (IPAddress),
возникает ошибка. ЕслиDoEvents aStringArray(i — 1), i & « а «т*к*». Т.е. не должен был.: Подскажите, пожалуйста, можно
поставили для цикла.
из ячеек столбикане получается сделать.Подскажите, пожалуйста, как
получается сообразить, как можно сделать выделение в цикле поВыполняется побитовое сравнение позиции слева направо.
можно использовать функцию
задан аргументв цикл вставить? «!») If k равен » & после К любое
Или я чего-то ли в маске Это реально ускоряет
«В» и, еслиМожно как-то это можно все это
получить число неизвестной по началу слова.
excelworld.ru
Поиск подстроки в строке — сравнение строк в VBA
всем словам ищешь(опятьvbTextCompare
Поиск вхождения однойInStrсравнениеИз полностью безопасных <> 0 Then k — 1)
количество любых символов. не того? строки поиска (VBA)методом обработку? вхождение найдено, то победить? сделать. длинны после символа.Там осталась самая же в цикле.1 строки в другуюдля его поиска:, аргумент способов знаю такие: aQuantityExclam = aQuantityExclam Else k = И ведь вNew FindА как мне в столбик «С»,Спасибо.
Скорее всего нужнаExcel 7-10 года,
малость. на словах
во вложенном)
Выполняется текстовое сравнение
весьма часто используемая
InStr(1,[IPAddress],».»)
начало
1) Вставить в
+ 1 MsgBox
Len(aStringArray(i — 1))
командере именно так: а по-моему, должно
использовать *,? для кнопку влепить на
напротив ячейки, вSkyPro
другая формула, но
Windows.
я её рассказал.Option Compare Text
vbDatabaseCompare операция. Нумерация символов
Функцияявляется обязательным. подозрительный цикл команду: «Номер символа в If aQuantityExclam > и происходит. ) расширения вариантов поиска этот лист? Буду
которой сейчас ищется:
это все чтоАпострофф
Как я говорю Option Explicit Sub2 всегда начинается сInStrстрока1DoEvents2) внимательно за
строке » & aQuantityExclamMax Then aQuantityExclamMaxNewВот ещё пример как в обычном вставлять во 2-ю совпадение — вписывать200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ($A2=»»;1;СЧЁТЕСЛИ($A2;»*»&B$1&»*»)) я смог придумать): Информация к размышлению своему внуку: включай QWERT() Dim R,Только для Microsoft Access. единицыпроверяет каждое значениеОбязательный аргумент. Представляет собой этим следить и i & «
= aQuantityExclam MsgBox: По-моему, я понял! поиска слова «телекс» поиске колонку наименования и эту фразу сЭто если долгоСпасибо. — MsgBox Val(Split(«ЭРТ голову(или доставай кошелёк) N, K Dim Сравнение выполняется сПримечание в поле IPAddress строковое выражение, в успеть нажать Ctrl+Break, равен » & («На данный моментТут важную рольsTextToSearch = «т???к»Excel или Windows затем кнопку нажимать, «,» в конце.
не думать.SkyPro №2 Такой-то край,Четыре бокала пива
m() As String применением сведений из
В функции и возвращает позицию котором выполняется поиск. пока еще не k End If
максимальное кол-во воскл играет аргумент LookAt,А, чтобы найтиNew чтобы в редактор
Ну скажем такойRAN: Такой-то район, в/г — смешно назвать If InStr(1, Cells(1, базы данных пользователяInStr первой точки. Следовательно,
строка2 прошло секунды 3
Loop Until k
знаков равно « который может быть «стук» можно так: Может это поможет?
не входить лишний вот пример:: Сереж, на одном200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИОШИБКА(—(ПОИСК(«ф»;A2;1)>0);0) ВоенныйГородок № 42 это ценой! 2).Value, «,») >Примерпри очень длинных если значение первого
Обязательный аргумент. Искомое строковое бесконечного цикла. = 0 If & aQuantityExclamMax) End либо xlPart, либоsTextToSearch = «т?к»vladk раз.
»А» из форумов (неКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ЕОШ(ПОИСК(«ф»;A2;1));0;1)
Кот 174 Зданиеsku144 0 Then m’ В данном примере
CyberForum.ru
Банальный поиск подстроки в строке
строках при текстовом октета IP-адреса равно выражение.3) Внимательно писать aQuantityExclam > aQuantityExclamMax If End If xlWhole, т.е. искатьТ.е. Звёздочка (*): Эта тема проАпостроффмеханизм помню, на каком)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=—НЕ(ЕНД(ВПР(«*ф*»;A1;1;0)))
контрольно-пропускного пункта (караулка)(встроенная): Есть непустая строковая
= Split(Replace(Cells(1, 2).Value, функция InStr ‘ методе сравнения, возможно10.сравнение циклы и не Then aQuantityExclamMax =
Loop Next i часть ячейки или заменяет любое количество другое.:механизм выключателя
прозвучалоКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИ(A2;»*ф*») №174″, «№»)(1)) MsgBox переменная x, хочу » «, «»), возвращает позицию первого возникновение ошибки времени
, функция возвращает значениеНеобязательный аргумент. Задает тип допускать такого. Предусматривать aQuantityExclam MsgBox «На End SubВопрос, почему ячейка целиком (галочка
символов и вТак как нетНе по теме:механизм переключателя»Нормальные люди меряются,VictorM Val(Split(«ЭРТ №2 Такой-то
перебрать ее посимвольно
«,») Else ReDim появления ‘ одной исполнения Stack overflow. 3.
сравнения строк. Если обязательный выход из данный момент максимальное нижеприведенный кусок кода снята или поставлена) примере «т*к» буквы ответов, то ,наверное,Нет, просто мне лень
CyberForum.ru
Как методом Find в VBA найти строку с использованием *,? как в обычном поиске Windows
адаптер у кого длиннее,: Во как. край, Такой-то район, в цикле. Умеет
m(0): m(0) = строки внутри другой Избежать этой ошибкиМожно использовать другие функции,
аргумент
него по условию. кол-во воскл знаков
ниразу не срабатывает,Так вот, если «т» и «к»
такая возможность нереализвана каждый раз вспоминатьадаптер питания а формулисты -Сразу три варианта в/г ВоенныйГородок № ли VBA как
Trim(Cells(1, 2).Value) End строки Dim SearchString,
можно, переведя исходную использующие результат функциисравнение
Это хороший тон. равно » &
если известно, что мы задаём критерий
не обязательно должны в стандартных процедурах
конструкции типа
рамка у кого короче.» формул!
42 Кот 174 в пайтоне запускать
If For R SearchChar, MyPos SearchString строку и образецInStrсодержит значение NULL,Из небезопасных: aQuantityExclamMax End If строки без «!» поиска «т*к», то быть «т» - VBA. Тогда, какCInt(Sheets(1).Cells(Rows.Count, 3).End(xlUp).Row) + 1выключатель двойнойНо короче -СПАСИБО! Здание контрольно-пропускного пункта цикл по элементам = 0 To =»Русский_Проект» ‘ Исходная в один регистр, для извлечения значения возникает ошибка. Если1) Ctrl+Esc, «Приложения»,
ikki имеются, и в если xlPart - первой буквой в это можно сделать
Для ускорения обработки
»В» не есть лучше.
jakim (караулка)(встроенная) №174″, «№»)(2))
строки?
UBound(m) N = строка SearchChar = и перейдя на
октета IP-адреса, который аргумент
выбрать программу, снять: должен срабатывать. каждой строке ограниченное
то код ищет
слове, а «к» оптимальным образом. (если в этом
Berker механизм выключателя
Оставь это для
: Может так?
MsgBox Val(Split(«ЭРТ №2For Each i
1 If InStr(1,
«Р» ‘ Следует
бинарное сравнение
предшествует первой точке,
сравнение
задачу -> Ждать…не будет срабатывать кол-во знаков «!». и телекс и — последней. ТожеБуду признателен за есть необходимость), следует проходного МШ!VictorM Такой-то край, Такой-то in x … Cells(1, 1).Value, m(R)) найти «P» ‘Возвращаемое значение
например:опущен, тип сравнения если не помогает:
для строк, заканчивающихсяElse k =
ток и т.д.,
самое и со помощь.
использовать массивы или
JUNG механизм переключателя_Boroda_: Тоже вариант, спасибо. район, в/г ВоенныйГородок Next i > 0 Then Посимвольное сравнение, начинаяВозвращает значение типа Variant(Long),Left([IPAddress],(InStr(1,[IPAddress],».»)-1)) определяется параметром2) там же, символом «!»
Len(aStringArray(i — 1)) а если xlWhole, знаком вопроса (?).ytk5kyky стандартный метод в сборе: Да какая разница?Все в копилку, № 42 Котsnipe K = InStr(N, с позиции 4. указывающее позицию первогоВ этом примере функцияOption ПКМ -> Перейти
но, возможно, вы If aQuantityExclam > то код найдётЮрий М: Что-то не увиделFindMerten механизм переключателя Что за мания пригодится!
174 Здание контрольно-пропускного: dim stroka as Cells(1, 1).Value, m(R))
Возвращает 10 MyPos
появления одной строки
InStr(1,[IPAddress],».»)Compare к процессу -> этого и добивались? aQuantityExclamMax Then aQuantityExclamMax только ток, тук,
: Павел, я вот проблемы.+ отключать с контрольной лампой укорачивания? Главное, чтобыSkyPro пункта (караулка)(встроенная) №174″, string stroka=» Do ПОКРАСИТЬ K,
=
внутри другойвозвращает позицию первой
. Укажите допустимый LCID Завершить процесс ->
вы уверены? у
= aQuantityExclam MsgBox
так тут вспомнил временавот что записалApplication.ScreenUpdatingF2234 адаптер работала быстро, а
: Добавил еще один «№»)(3))
sku144
Len(m(R)) N =Instr
Перечень возвращаемых значений точки. В результате
(код языка), чтобы
Да.Вот reset -ом
меня процедура с («На данный моментВроде загадка разгадана)
DOS и NC. макрорекордер:+ много чегоR2234 адаптер питания сколько символов будет вариантiDeus: да, спасибо большое, K + Len(m(R))(4, SearchString, SearchChar, vbTextCompare)Вариант вычитания 1 определяется использовать для сравнения до сих пор таким именем даже максимальное кол-во воскл можно спать спокойно Так вот там
Cells.Find(What:=»Т?к», After:=ActiveCell, LookIn:=xlFormulas, ещё…
рамка 2-ая, цвет — это неVictorM: Апострофф, спасибо, это конечно можно и K = InStr(N, ‘ Двоичное сравнение,Значение, возвращаемое функцией InStr
количество знаков, предшествующих правила, определяемые языковым и пользуюсь не компилируется знаков равно « ) такой вариант не LookAt:= _Kotaaa серый важно.
: Нет предела совершенству как раз то, мидом вычленять по
Cells(1, 1).Value, m(R)) начиная с позиции
String1 первой точке, в стандартом.
planetaexcel.ru
Проверка наличия символа в строке + подсчет
Спасибо, функция реальноPiton777
& aQuantityExclamMax)Юрий М
сработает. Преемники NCxlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,: Возможно этого будетBerker выключатель двойной,У меня тутСпасибо! что нужно. символу, но вопрос Loop While K 1. Возвращает 1имеет нулевую длину данном случае —Совет:
помогает, буду вставлять: Так я иPiton777: :-) Windows/Total командиры продолжают MatchCase:=False _ достаточно. 1-я колонка 2-клав. на работе недавноSkyProiDeus все-таки о возможности > 0 End MyPos =0 2. Затем функция во все циклы не понял -: В отличие отGuest его традиции: создал, SearchFormat:=False).Activate ориентировочно 200-300 строкОсновная проблема в было — написал: В вашем файле: запуска цикла по If Next RInstrString1LeftВ Access 2010 построитель на момент отладки, почему… Судя по языка C, в: тема на 10 сейчас файл сПри прогоне нашел будет содержать в том, что не формулу с несколькими будет удобнее так:iDeus элементам строки а End Sub Sub(1, SearchString, SearchChar, 0)имеет значение Nullполучает эти символы выражений включает функцию ибо умудряюсь запороть всему, Diskretor пытается бейсике любой строковой строк ниже именем «телекс». Попросил и «так» и будущем, а 2-я понимаю, как искать СМЕЩ символов на200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИ($A2;»*»&B$1&»*»), но во втором не по его ПОКРАСИТЬ(ST, LN) With ‘ Сравнение являетсяNull из левой части IntelliSense, которая указывает даже простейшие циклыНе мне объяснить ПОЧЕМУ, тип не содержитPiton777 командира по маске «тук» реально может быть строку, состоящую из
120 примерно, размножилДумаю, тут есть сообщении решение с длине с последующими Cells(1, 1).Characters(Start:=ST, Length:=LN).Font двоичным по умолчаниюString2 поля IPAddress, возвращая требуемые аргументы.
забывайте потом удалять, но я не в конце литеры: Всем, Здравствуйте. «т*к» найти егоvladk в 49000 строк.
одного или нескольких на диапазон, а варианты и короче,
помощью VBA, а калькуляциями нужного на .Color = RGB(0, (последний аргумент опущен)имеет нулевую длину значение 10.
если это не понимаю, в чем ,
Помогите разобраться в — нету, говорит.: Спасибо за помощь.А можете пример слов, в другой она тормозит. Пришлось
но для этого вы хотели с данной итерации символа 0, 255) .Bold MyPos =StartИспользование функции InStr в
Параметры будет мешать работе тут смысл иа значит всю следующем примере Набираю маску «т*к*»New привести? Как это строке. Нужно точное переписывать, вместо СМЕЩ(…) нужно быть Мастером
помощью формул.Казанский = True EndInstrString2
коде VBAАргумент и не будет почему если «!»
логику последней конструкцииИмеется таблица (excel — находится.: Иными словами вы работает?
совпадение, т.е. задача написал ИНДЕКС(…):ИНДЕКС(…). Итог ЭкселяThe_Prist: With End Sub(SearchString, SearchChar) ‘ Возвращаетимеет значение Null
сравнение
приводить к дальнейшим стоит в конце, Вам придется переписывать.
2003) с данными.New задаёте вопрос наКак в VBA немного легче. — формула за_Boroda_:sku144Добавлено через 15 минут 1 MyPos =NullПримечание:может принимать следующие зависаниям. то моё условиеP.S. Каждую переменную Информация имеется только: конечно, я согласен форуме, хотя сами будет выглядеть операторЗаранее благодарен за полтыщи символов, а
: НАЙТИ реагирует наСкрипт
, а что ВыА вот такInstr
String2 В примерах ниже показано,
значения:Процедура имеет свойство работает не так нужно отдельно объявлять
в первом столбце. с вами. Какой-то даже не попробовалиFind любую помощь! работает намного быстрее. регистр, а ПОИСКверно, но я хотите делать с будет искать по(1, SearchString, «W») ‘не найдена как использовать этуКонстанта притормаживать работу цикла как мне бы variable1 AS [тип], Необходимо проверить имеется
косячок ). Отсюда написать и строчкииз Excel?S.V.I.N.
Да, вспомнил я, не реагирует. В пробовал сделать это символами и почему началу слова а Возвращает 00 функцию в модулеЗначение (сказывается на быстродействии).Спасибо хотелось… Тупо воспользуюсь variable2 as [тип], ли символ «!» резонный вопрос, как кода? Типа «Аdnb_dnb: Добрый день!
что я тут этом (и еще с помощью формул, Mid не устраивает? выделять всё слово
Категория
String2 Visual Basic дляОписание за совет, не его примером и иначе тип автоматически в каждой из
найти слово(а) начинающиеся нафига мне писать: Help! нужно, чтоМожно рассмотреть такой модератор вроде. Если в возможности использования получается страшная жесть,Если по быстродействиюSub ПОКРАСИТЬ(ST, LN)Функции обработки строкнайдена внутри приложений (VBA). Чтобы
vbUseCompareOption сразу увидел эффективность будут учить «Матчасть».
присваивается Variant. строк, узнать кол-во на «т» и код и его бы в определенном
вариант. В цикле еще потрепаться охота подстановочных знаков -
вроде: — можно отобразить LN = LN
BeaRRRString1
получить дополнительные сведения–1
данного кода в =)ikki символов «!» в заканчивающиеся на «к»… тестировать, если можно
тексте, введенном в проходим все строки — в свободное в ПОИСКе можно,=ЕСЛИ( ПСТР(C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+1;1)=» «; символьный массив на
— 1 Do
: Тему уже создавал,Позиция, в которой обнаружено о работе сВыполняется сравнение с помощью
решении моего вопросаПереименовал произвольно при: Немного не понял. каждой строке и надо подумать) создать тему на одну ячейку в
и просматривать столбец общение. в НАЙТИ нельзя) ПСТР(C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+2;(ПОИСК(» «;C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+1)-ПОИСК(» «;C7;ПОИСК(« строку и работать LN = LN но так и совпадение VBA, выберите параметра инструкции =). переносе на форум
Вы про этот найти максимальное кол-воЮрий М форуме, а там эксель, с помощью В на наличиеRAN и заключается разница
CyberForum.ru
«;C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+1)+1)); ПСТР(C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+1;(ПОИСК(» «;C7;ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)+1)-ПОИСК(«№»;C7;ПОИСК(«№»;C7;1)+1)-1)))с
This Excel tutorial explains how to use the Excel INSTR function with syntax and examples.
Description
The Microsoft Excel INSTR function returns the position of the first occurrence of a substring in a string.
The INSTR function is a built-in function in Excel that is categorized as a String/Text Function. It can be used as a VBA function (VBA) in Excel. As a VBA function, you can use this function in macro code that is entered through the Microsoft Visual Basic Editor.
Syntax
The syntax for the INSTR function in Microsoft Excel is:
InStr( [start], string, substring, [compare] )
Parameters or Arguments
- start
- Optional. It is the starting position for the search. If this parameter is omitted, the search will begin at position 1.
- string
- The string to search within.
- substring
- The substring that you want to find.
- compare
-
Optional. It is the type of comparison to perform. It can be one of the following values:
VBA Constant Value Explanation vbUseCompareOption -1 Uses option compare vbBinaryCompare 0 Binary comparison vbTextCompare 1 Textual comparison
Returns
The INSTR function returns a numeric value. The first position in string is 1.
If substring is not found in string, then the INSTR function will return 0.
Note
- When finding the location of a substring in a string, the INSTR function performs a case-sensitive search.
Applies To
- Excel for Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 for Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Type of Function
- VBA function (VBA)
Example (as VBA Function)
The INSTR function can only be used in VBA code in Microsoft Excel.
Let’s look at some Excel INSTR function examples and explore how to use the INSTR function in Excel VBA code:
InStr("Tech on the Net", "T") Result: 1 'Shows how start is defaulted to 1 if omitted InStr(1, "Tech on the Net", "T") Result: 1 InStr(1, "Tech on the Net", "t") Result: 9 'Shows that search is case-sensitive InStr(10, "Tech on the Net", "t") Result: 15 InStr(1, "Tech on the Net", "the") Result: 9 InStr(1, "Tech on the Net", "M") Result: 0 'Shows what is returned if substring is not found
For example:
Dim LPosition As Integer LPosition = InStr(10, "Tech on the Net", "t")
In this example, the variable called LPosition would now contain the value 15.