VBA Excel. Функция InStr (синтаксис, параметры, примеры)
Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.
Описание функции InStr
InStr – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую. Она возвращает значение типа Variant (Long).
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.
Синтаксис, параметры, значения
Синтаксис функции InStr
Полный вариант:
InStr([start], string1, string2, [compare]) |
Сокращенный вариант:
InStr(string1, string2) |
Чаще всего в 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
Самый простой пример:
1 2 3 4 5 6 | Sub Test1() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «Фернандо») MsgBox x ‘Здесь x будет равен 9 End Sub |
Пример 2
В этом примере, используя одинаковые строки, в которых выполняется поиск, и искомые подстроки, применим разные виды сравнения – двоичное (бинарное) и текстовое, и посмотрим на результаты.
1 2 3 4 5 6 7 8 9 | 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
В этом примере посмотрим на результаты посимвольного и побайтового сравнения, опять же используя одинаковые строки и искомые подстроки.
1 2 3 4 5 6 7 8 9 | Sub Test3() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 4 x = InStrB(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 7 End Sub |
Результат 7 при побайтовом сравнении получен для кодировки, у которой один символ составляет 2 байта.
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
Функция InStr (Visual Basic для приложений)
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Возвращает значение типа Variant (Long), определяющее положение первого вхождения одной строки в другую.
Примечание
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Синтаксис
InStr([ начало ], строка1, строка2, [ сравнение ])
В синтаксисе функции InStr используются следующие аргументы:
| Часть | Описание |
|---|---|
| начало | Необязательно. Числовое выражение, которое задает начальную точку для поиска. Если этот аргумент опущен, поиск начинается с первого знака строки. Если аргумент начало содержит значение Null, возникает ошибка. Аргумент начало является обязательным, если задан аргумент сравнение. |
| строка1 | Обязательно. Строковое выражение, поиск в котором выполняется. |
| строка2 | Обязательно. Искомое строковое выражение. |
| сравнение | Необязательно. Определяет тип сравнения строк. Если аргумент сравнение содержит значение Null, возникает ошибка. Если аргумент сравнение опущен, тип сравнения определяется параметром Option Compare . Укажите допустимый LCID (код языка), чтобы использовать для сравнения правила, определяемые языковым стандартом. |
Параметры
Аргумент сравнение может принимать следующие значения:
| Константа | Значение | Описание |
|---|---|---|
| vbUseCompareOption | –1 | Выполняется сравнение с помощью параметра оператора Option Compare. |
| vbBinaryCompare | 0 | Выполняется двоичное сравнение.![]() |
| vbTextCompare | 1 | Выполняется текстовое сравнение. |
| vbDatabaseCompare | 2 | Только Microsoft Access. Выполняется сравнение на основе сведений из базы данных. |
Возвращаемые значения
| Если | Возвращаемое значение |
|---|---|
| строка1 является пустой | 0 |
| строка1 равна Null | Null |
| строка2 является пустой | начало |
| строка2 равна Null | Null |
| строка2 не найдена | 0 |
| строка2 найдена в строке1 | Позиция найденного соответствия |
| начало > строка2 | 0 |
Функция InStrB используется с байтовыми данными, содержащимися в строке.
Функция InStrB возвращает позицию байта, а не позицию знака первого вхождения одной строки в другую.
Пример
В данном примере функция InStr используется для получения позиции первого вхождения одной строки в другую.
Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' String to search in. SearchChar = "P" ' Search for "P". ' A textual comparison starting at position 4. Returns 6. MyPos = Instr(4, SearchString, SearchChar, 1) ' A binary comparison starting at position 1. Returns 9. MyPos = Instr(1, SearchString, SearchChar, 0) ' Comparison is binary by default (last argument is omitted). MyPos = Instr(SearchString, SearchChar) ' Returns 9. MyPos = Instr(1, SearchString, "W") ' Returns 0.
См. также
- Функции (Visual Basic для приложений)
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см.
в статье Поддержка Office VBA и обратная связь.
Извлекаем символы из строк в Excel с помощью функций руководство для чайников
Функция 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 полезны
Если вы хотите сделать простое извлечение, то отлично подойдут 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 (т.е. Сопоставление с образцом) обычно обеспечивает более простое решение.
Функции VBA для работы с текстом
Главная » Функции VBA »
28 Апрель 2011 Дмитрий 343188 просмотров
- ASC()— эта функция позволяет вернуть числовой код для переданного символа. Например, ASC(
"D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду.Варианты этой функции — AscB() и AscW():- AscB() — возвращает только первый байт числового кода для символа.

- AscW() — возвращает код для символа в кодировке Unicode
- AscB() — возвращает только первый байт числового кода для символа.
- Chr() — возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например кавычки —
"), т.к. кавычки просто так в VBA-коде не ввести(нужно ставить двойные). Я обычно именно эту функцию и использую.Dim sWord As String sWord = Chr(34) & "Слово в кавычках" & Chr(34)Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично таким же вариантам для функции Asc().
- InStr() и InStrRev()— одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной символ или последовательность символов и вернуть их позицию. Если последовательность не обнаружена, то возвращается 0.

Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Then MsgBox "Искомое слово присутствует!" Else MsgBox "Искомое слово отсутствует!" End IfРазница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() с конца строки
- Left(), Right(), Mid()— возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.
Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5) - Len() — возможность получить число символов в строке. Часто используется с циклами, операциями замены и т.п.
- LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно.
Часто используется для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т.п.). - LSet() и RSet() — возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
- LTrim(), RTrim(), Trim() — возможность убрать пробелы соответственно слева, справа или и слева, и справа.
- Replace()— возможность заменить в строке одну последовательность символов на другую.
Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello", "Bay") - Space() — получить строку из указанного вами количества пробелов;
Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль.
Она размножает пробелы с учетом ширины командной строки. - StrComp() — возможность сравнить две строки.
- StrConv() — возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.):
Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!", vbUpperCase)В качестве второго параметра параметра могут применяться константы:
- vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
- vbLowerCase: Преобразует все текстовые символы в нижний регистр
- vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
- *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
- *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
- **vbKatakana: Преобразует символы Hiragana в символы Katakana
- **vbHiragana: Преобразует символы Katakana в символы Hiragana
- ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
- ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию
* применимо для локализацией Дальнего востока
** применимо только для Японии
*** не поддерживается операционными системами под управлением Macintosh - StrReverse() — «перевернуть» строку, разместив ее символы в обратном порядке.
Функция работает только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово? - Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
- String() — позволяет получить строку из указанного количества символов (которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().
Статья помогла? Сделай твит, поделись ссылкой с друзьями!
© 2022 Excel для всех Войти
Функция Excel VBA InStr — объяснение с примерами
Содержание
- Функция Excel VBA InStr
Вчера я получил письмо от одного из моих читателей — Джун.
Она хотела знать, как применить жирный шрифт к определенной части строки в ячейке. Например, выделите жирным шрифтом только слово «Hello» из «Hello World».
И она хотела сделать это сразу для сотен ячеек.
Поскольку в Excel нет встроенных функций, которые могли бы это сделать, я создал простой макрос, который использует Функция Excel VBA InStr (вы увидите, как это сделать, в примере 4 этого руководства).
Но сначала давайте посмотрим, как работает функция Excel VBA InStr!
В этом руководстве я объясню использование функции InStr в Excel VBA и увижу несколько практических примеров, где ее можно использовать.
Функция Excel VBA InStr — Введение
Функция InStr находит позицию указанной подстроки в строке и возвращает первую позицию ее появления.
Например, если вы хотите найти положение «x» в «Excel», использование функции Excel VBA InStr вернет 2.
Синтаксис функции InStr
InStr ([Начало], String1, String2, [Сравнить])
- [Начинать] — (необязательный аргумент) это целое число, которое сообщает функции InStr начальную позицию, с которой она должна начать поиск.
Например, если я хочу, чтобы поиск начинался с самого начала, я введу значение 1. Если я хочу, чтобы он начинался с третьего символа и далее, я буду использовать 3. Если не указано, будет использовано значение по умолчанию 1. - Строка1 — Это основная строка (или родительская строка), в которой вы хотите выполнить поиск. Например, если вы ищете позицию x в Excel, строка 1 будет «Excel».
- Строка2 — Это подстрока, которую вы ищете. Например, если вы ищете позицию x в Excel, String2 будет x.
- [Сравнивать] — (необязательный аргумент) Вы можете указать одно из следующих трех значений для аргумента [сравнить]:
- vbBinaryCompare — Это сделает персонажа путем сравнения символов. Например, если вы ищете «x» в «Excel», он вернет 2, но если вы ищете «X» в «Excel», он вернет 0, так как X в верхнем регистре. Вы также можете использовать 0 вместо vbBinaryCompare. Если аргумент [Сравнить] опущен, он используется по умолчанию.

- vbTextCompare — Это будет текстовое сравнение. Например, если вы ищете «x» или «X» в Excel, в обоих случаях будет возвращено 2. Этот аргумент игнорирует регистр букв. Вы также можете использовать 1 вместо vbTextCompare.
- vbDatabaseCompare — Используется только для Microsoft Access. Он использует информацию из базы данных для сравнения. Вы также можете использовать 2 вместо vbDatabaseCompare.
- vbBinaryCompare — Это сделает персонажа путем сравнения символов. Например, если вы ищете «x» в «Excel», он вернет 2, но если вы ищете «X» в «Excel», он вернет 0, так как X в верхнем регистре. Вы также можете использовать 0 вместо vbBinaryCompare. Если аргумент [Сравнить] опущен, он используется по умолчанию.
Дополнительные примечания к функции Excel VBA InStr:
- InStr — это функция VBA, а не функция рабочего листа. Это означает, что вы не можете использовать его на рабочем листе.
- Если String2 (то есть подстрока, позицию которой вы ищете) пуста, функция вернет значение аргумента [Start].
- Если функция InStr не может найти подстроку в основной строке, она вернет 0.
Теперь давайте посмотрим на пример использования функции Excel VBA InStr.
Пример 1 — Поиск позиции с самого начала
В этом примере я буду использовать функцию InStr, чтобы найти позицию «V» в «Excel VBA» с самого начала.
Код для этого будет:
Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub
Когда вы запустите этот код, он покажет окно сообщения со значением 7, которое является позицией «V» в строке «Excel VBA».
Пример 2 — Поиск позиции от начала второго слова
Предположим, я хочу найти позицию «the» в предложении — «Быстрая коричневая лисица перепрыгивает через ленивую собаку».
Однако я хочу, чтобы поиск начинался со второго слова и далее.
В этом случае нам нужно изменить аргумент [Start], чтобы убедиться, что он указывает позицию, с которой начинается второе слово.
Вот код, который это сделает:
Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, «Быстрая коричневая лиса перепрыгивает через ленивую собаку», «the», vbBinaryCompare) MsgBox Position End Sub
Этот код покажет окно сообщения со значением 32, поскольку мы указали начальную позицию как 4.
Следовательно, он игнорирует первый «The» и находит второй «the» в предложении.
Если вы хотите сделать его более динамичным, вы можете улучшить код, чтобы он автоматически игнорировал первое слово.
Вот расширенный код, который сделает это:
Sub FindFromSecondWord () Dim StartingPosition как целое число Dim Position As Integer StartingPosition = InStr (1, «Быстрая коричневая лиса перепрыгивает через ленивую собаку», «», vbBinaryCompare) Position = InStr (StartingPosition, «Быстрая коричневая лиса перепрыгивает через ленивого dog "," the ", vbBinaryCompare) MsgBox Position End Sub
Этот код сначала находит позицию символа пробела и сохраняет ее в переменной StartingPosition.
Затем он использует эту переменную в качестве начальной позиции для поиска слова «the».
Следовательно, он возвращает 32 (что является начальной позицией «the» после первого слова).
Пример 3 — Определение позиции @ в адресе электронной почты
Вы можете легко создать настраиваемую функцию для поиска позиции @ в адресе электронной почты с помощью функции Excel VBA InStr.
Вот код для создания настраиваемой функции:
Функция FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, «@») FindPosition = Position End Function
Теперь вы можете использовать эту настраиваемую функцию как любую другую функцию рабочего листа. Он примет ссылку на ячейку в качестве входных данных и выдаст вам позицию @ в ней.
Точно так же вы можете создать настраиваемую функцию для поиска позиции любой подстроки в основной строке.
Пример 4 — Выделение части строки внутри ячеек
Это вопрос, который задал Джун (мой читатель, который также вдохновил меня на написание этого руководства).
Вот пример данных в формате, который мне прислал июнь:
Ее запрос заключался в том, чтобы выделить числа вне скобок жирным шрифтом.
Вот созданный мной код, который делает это:
Sub Bold () Dim rCell As Range Dim Char As Integer For Each rCell In Selection CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.
Characters (1, Char - 1) .Font.Bold = True Next rCell End SubВ приведенном выше коде цикл For Each используется для просмотра каждой из выделенных ячеек. Он определяет позицию символа открывающей скобки с помощью функции InStr. Затем он изменяет шрифт текста перед скобкой.
Чтобы использовать этот код, вам нужно скопировать и вставить модуль в редакторе VB.
После того, как вы скопировали вставленный код, выберите ячейки, в которых вы хотите выполнить это форматирование, и запустите макрос (как показано ниже).
Вам также могут понравиться следующие руководства по Excel VBA:
- Функция Excel VBA SPLIT.
- Функция VBA TRIM.
- Полное руководство по циклам Excel VBA.
- Руководство для начинающих по использованию цикла For Next Loop в Excel VBA.
- Как создать и использовать надстройку Excel.
- Как объединить несколько книг в одну книгу Excel.
- Как посчитать цветные ячейки в Excel.
- Полезные примеры макросов Excel VBA для начинающих.

- Как отсортировать данные в Excel с помощью VBA (пошаговое руководство)
Excel vba работа со строками
Функция InStr
Смотрите также
Else: MsgBox Mid(ProbeString,
Exit Sub End названием которого является на одну и Right$(о, 3) С_конца_буквы_1234_Оо = «1234567891011»lumn) String Dim Sum поможем Type mismatch, String a = события щелчка по вы ребята» должноВозвращаемое значениеOption CompareString2InStr([Start,]String1,String2[,Compare]) sympos) End Select If nstroka = год работы.
ту же ошибку:
= Right$(о, 4) Буква_1_О = Left$(о,Я бы написал As Double DimKuklPчто понятно, т.к. Text1.Text b = кнопке и откроет получиться «еынссалк выФункцияvbBinaryCompareнайдена внутриInStrB([Start,]String1,String2[,Compare])
End Sub
Right(stroka, (ls -Заранее очень благодарен! «Ошибка времени выполнения С_конца_буквы_12345_О = Right$(о,
1) Буква_1_О_м =
| так Directory = | DirColumn As Double |
| : Кросс: пытаетесь объединить строку | UCase(a) Text2. Text = |
| окно кода формы ребята». | Str |
| 0String1 | Функция |
| dashulja index) + 1) | Watcher_1 |
| Basic. Переменная типа 5) С_конца_буквы_123456_О = | Mid$(о, 1, 1) |
| Cells(7, DirColumn) Application.Volatile True Forhttp://www.excel-vba.ru/forum/index.php?topic=2491.0 | (результат функции b End Sub |
| с этой процедурой.Нужно и с(Expression) возвращает значение Number, | Выполняется побитовое сравнение |
Позиция, в которой обнаружено
| InStr | : Даны 3 строки |
| MsgBox nstroka, vbInformation, | : Держите Object не установлена» Right$(о, 6) С_конца_буквы_1234567_О Буква_2_я_О = Right$((Left$(о,beryllium Each cell InberylliumReplace Программа записывает все Вам остается только помошью Sub, и преобразованное в текстовыйvbTextCompare совпадение( символов, содержащие пробелы. |
| «поиск в строке» | IseeYOU на строчках соответственно |
| = Right$(о, 7) | 2)), 1) Буква_3_я_О |
| : нда.. все печально | DirRange If cell: Добрый день.), а не массив. слова с заглавной вписать туда строчки, с помощью Function. тип данных String.1StartIn Str Вывести в столбцы End SubМожно даже |
: Огромное спасибо =)
«For i = С_конца_буквы_12345678_О = Right$(о, = Right$((Left$(о, 3)),
| . давно не кодил | = DirNumber Then | Столкнулся со задачкой, |
| Без | ((( | данныеЯ знаю какПри преобразовании в |
| Выполняется текстовое сравнение | > | ing) служит для поиска |
| А, В, С | немного сократить. |
alex2476 |
| 1 To ActiveDocument.Paragraphs.Count» | 8) С_конца_буквы_123456789_О = | 1) Буква_4_я_О = просто. надо изучить DirColumn = cell.Column начал писать, но |
JoinМираРизовнаIgor_Tr просто перевести строку начале строки возвращаемогоvbDatabaseCompareString2 номера символа(номера байта активного рабочего листаalex2476: Знатоки подскажите пожалуйста, и "InsPreLast$ = Right$(о, 9) С_конца_буквы_12345678910_О Right$((Left$(о, 4)), 1) как правильно дебагить End If Next что-то не идетвариант работает, но: Private Sub CommandButton1_Click(), плюс одну команду наоборот, но чтобы значения резервируется место20 для слова из соответствующих: Спасибо уважаемый Профессор, как в VBA VBA.Left$(S, Len(S) - = Right$(о, 10) Буква_5_я_О = Right$((Left$(о, в среде VBA Directory = DirRange(1, пока, поскольку c есть подводный камень
Dim c() As
Функция Str
для вывода данных
отдельное слово - для знака числа.
Только для Microsoft Access.ПараметрыInStrB строк, содержащие по всё заработало как вывести строку начинающуюся
1) & «?»
С_конца_буквы_без_первой_буквы_О = Right$(о, 5)), 1) Буква_6_я_О в экселе и DirCulumn) End Function VBA только знакомлюсь.
(возможно, и не String c=split(Text1.Text) c(1)=ucase(c(1)) во второе текстовое нет. Если число положительно, Сравнение выполняется сЭлемент), с которого начинается крайней мере по надо!!
с конкретно заданного & VBA.Right$(S, 1)». (Len(о) — 1)) = Right$((Left$(о, 6)), найти есть лиІгор Гончаренко Необходимо сделать справочник, один)
Text2.Text=join(c) End Sub поле:если мы переводим то в этом
применением сведений из
Описание в заданной строке 2 буквы «д»Sasha_Smirnov символа(не путать сСейчас я в
Без_первой_и_последней_буквы = Left$
1) Буква_7_я_О =
там подстветка переменных.
: Public Function Directory(DirNumber
Работа со строками
основанный на таблицеtext1=»Скажите, один меньшеIgor_TrPrivate Sub CommandButton1_Click() просо строку : месте будет пробел, базы данных пользователяStart образец поиска. ПоискПомогите, пожалуйста, решить: Sub ToTypeFromDefiniteSign() Const номером позиции символа ОпенОфис, а завтра ((Right$ (о, (Len(о) Right$((Left$(о, 7)), 1)спасибо! As String, DirRange из 4 столбцов.
одинадцати»: Спасибо Вам большущее!!!!!! Dim a AsSub 12() Dim
если число отрицательно,ПримерНеобязательный. Числовое выражение, которое
идет от указанной одну задачку!!!просто очень ProbeString = «023_1387658762-;-;#» в строке ). попробую на Office2009
— 1))), (Len(Right$ Буква_8_я_О = Right$((Left$(о,
Hugo As Range) As При вводе данныхрезультат:Апострофф String, а As a As String, то выводится знак’ В данном примере задает первую позицию
позиции слева направо.
срочно нужно к sym = Left(InputBox(«Г‘èìâîë, Например 023_1387658762-;-;# , эти макросы прогнать. (о, (Len(о) -
8)), 1) Буква_9_я_О: option explicit используйте, String Dim Sum в ячейку, написаннаяtext2=»Скажите, ОДИН меньше: Дайте пошутить (но String a = b As String минус.
функция InStr ‘
для каждого поиска. Поиск вхождения одной зачету решить кучу
Г± êîòîðîãî ГЇГҐГ·Г*ГІГ*ГІГј06578_324576873654-;-;# нужно вывестиPS. Знаки вопроса
1))) — 1))для = Right$((Left$(о, 9)), будет Вам «подсветка» As Double, DirColumn на VBA функция ОДИНадцати» серьйозно!). Application.Trim(TextBox1.Text) а =
a=Text1.Text n=Len(a) b=»В качестве десятичного возвращает позицию первого Если параметр опущен, строки в другую задач и я ñòðîêó.», «Г‚âîä», «_»), строку начиная с нужно ставить не понимания, про Мид 1) Буква_10_я_О =Kuzmich As Long For должна искать значениеЕсли честно -Если делать сборку, Replace(a, Split(a, Space(1))(0),
» For K= разделителя дроби функция появления ‘ одной поиск начинается с весьма часто используемая не успеваю всё!!! 1) If sym символа «_».
Функция именно в предпоследние не забываем Right$((Left$(о, 10)), 1): Если вы желаете Each cell In ячейки в таблице не проверял. Очень как у меня StrReverse(Split(a, Space(1))(0)), 1)
1 To nStr
строки внутри другой позиции первого символа. операция. Нумерация символовpetr-sev = Empty Then Mid это делает позиции, а вАпострофф Буква_последняя_О = Right$((Left$(о, использовать свою конструкцию DirRange If cell
— справочнике (все вечером устал. Поле в начале, тогда TextBox2.Text = а b = mid(a,K,1)+bвоспринимает только точку. строки Dim SearchString,В том случае, когда всегда начинается с: Sub NN() Dim Exit Sub sympos по номеру позиции
соответственно в 3-ю: Function InsPreLast$(S$) InsPreLast$ Len(о))), 1) Буква_1_О Directory = DirRange(1, = DirNumber Then значения в ячейках выматывает. Спасибо за код от Апострофф ‘осторожно: в коде, Next K Text2.Text При использовании других
SearchChar, MyPos SearchString значение параметра единицы I As Long = InStr(1, ProbeString,
символа в строке.
и 4-ю позицию
= VBA.Left$(S, Len(S) = Left$(о, 1) DirColumn)то надо ее
DirColumn = cell.Column числовые, но поскольку подсказку. будет так предложенном Igor_Tr, используются
= b End десятичных разделителей (например, =»Русский_Проект» ‘ ИсходнаяStartПримечание Dim J As sym) MsgBox «Г‘èìâîë Заранее благодарен в данном примере, — 1) & Буквы_12_О = Left$(о,
подкорректировать Directory = — DirRange.Column + многие начинаются сОлежаText2.Text = Join(Replace(Application.Trim(text1.Text), как латинская a, Sub запятой) следует использовать строка SearchChar =равно Null, возникаетВ функции Long Dim K «» & symSasha_Smirnov но теперь я «?» & VBA.Right$(S, 2) Буквы_123_О = DirRange(1, DirColumn -
1: Exit For 0, то формат: Дан текст в _ Split(Application.Trim(text1.Text)(1)), UCase(Split(Application.Trim(text1.Text))(1)), ‘так и славянскаяIgor_Tr функцию CStr «Р» ‘ Следует
ошибка.
InStr As Long Dim & «» ñòîèò: Попробуйте номер этого
разберусь, там мне 1) End Function Left$(о, 3) Буквы_1234_О 2) Next Directory = данных везде текстовый)
поле ввода(TextBox). Слова 1))это просто как
а. В выражении
: Я уже хотелПараметры
найти «P» ‘Параметрпри очень длинных numRow As Long Г*Г* » &
CyberForum.ru
Работа со строками (Функции Function)
символа (для дальнейшего подробно описали ).. Sub Example_InsPreLast() MsgBox = Left$(о, 4)How_much_watch DirRange.Cells(1, DirColumn) End и возвращать значение в предложение имеющим вариант. От Апостроф TextBox2.Text = а комп выключить! АNumberЛюбое выражение, которое Посимвольное сравнение, начиная
Start строках при текстовом Dim strIn(1 To sympos & «-Г¬ употребления в Mid)Ципихович Эндрю InsPreLast(«1234») End Sub Буквы_12345_О = Left$(о,: Помогите пожалуйста сделать Function первой строки того самое большое количество и понятней, и буква а должна тут такие обещания!!! можно записать в с позиции 4.
является обязательным, если методе сравнения, возможно 3) As String ìåñòå.» Select Case искать перебором в: Не стоит удивлятся!Казанский
5) Буквы_123456_О = макрос. Он не
V
excelworld.ru
VBA: поиск числа в текстовом формате в таблице и работа со строками
столбца, где есть символов в словах(
проще. А у быть славянской! End Не хочу быть виде строки Возвращает 10 MyPos задан параметр возникновение ошибки времени Dim Words() As sympos = 0 цикле. В жОпенОфисе все: Left$(о, 6) Буквы_1234567_О должен быть сложным,: =ИНДЕКС(C7:F7;;СУММПРОИЗВ(($C$8:$F$29=$D$2)*СТОЛБЕЦ(A1:D1))) совпадение. пробелы не считать) меня, если б SubС уважением, Aksima грешником.Пример =Compare
исполнения Stack overflow. String For I Case True: MsgBoxXoFfiCEr через ж… делается.Не по теме: = Left$(о, 7) просто я имиberylliumКод приведен ниже. расположить в обратном еще чуть длиннееIgor_TrТам нет проблемы.
Dim retval retval =
Instr
String1 Избежать этой ошибки = 1 To Mid(ProbeString, sympos) Case: Sub Poisk() DimdzugЦипихович Эндрю Буквы_12345678_О = Left$(о, еще не занимался.: Ігор Гончаренко,спасибо. Не
Подскажите пожалуйста что порядке, а в — было бы: Огромное спасибо. Вытягиваете первое словоStr(4, SearchString, SearchChar, vbTextCompare)Обязательный. Строковое выражение,в котором можно, переведя исходную 3 strIn(I) = Else: MsgBox Mid(ProbeString, stroka As String: что за зверь?, даже я на
8) Буквы_123456789_О = У меня есть понял сразу как там не так. остальных предложениях заменить что-то от формулМираРизовна ((123)’ получаем » 123″ ‘ Двоичное сравнение, ведется поиск строку и образец InputBox(«Введите » & sympos) End Select Dim nstroka AsКруто написяно..
такое не способен Left$(о, 9) Буквы_12345678910_О
список многих строк именно нумеруются ячейки И, если не последнюю букву в аэродинамики .
: To Aksima. Спасибоsplit(a, space(1))(0) retval=
начиная с позицииString2 в один регистр CStr(I) & «-ую End SubЭто я
String Dim lsIseeYOU :D = Left$(о, 10) в Wordовском файле
в общей таблице сложно, подскажите для слове на верхнийTo Aksima. Очень за подстраховку -
), выкручиваете (Str 1. Возвращает 1
Обязательный. Отыскиваемое строковое выражение и перейдя на строку») Next For как-то сразу не
As Integer Dim: Всем доброго времениЗачот
Буквы_с_начала_без_последней_буквы_О = Left$(о, из 3 и в том диапазоне, VBA функцию, которая регистр. Вас уважаю, поверьте я только зstrreverse(split(a, space(1))(0))(-12.3)’ получаем «-12.3″
MyPos =
Compare бинарное сравнение I = 1
сообразил. Может, пригодится. index As Integer суток!How_much_watch (Len(о) — 1)) 4 символов в который был передан позволяла бы «резать»
planetaexcel.ru
Работа со строками в Word’овском файле
Poltava на слово, но поля вернулся.
Вот), делаете замену черезСмотри такжеInstrНеобязательный. Задает тип сравненияВозвращаемое значение To 3 WordsSasha_Smirnov Dim i AsНужно написать программу
: Если каждая строка
С_конца_буква_1_я_О = Left$((Right$(о,
виде, например: в функцию. строки, т.к. отрезать: Используя split делите очень не люблю
только как могли
replace
CStr(1, SearchString, SearchChar, 0) для строк.Возвращает значение типа Variant(Long), = Split(strIn(I)) numRow: Sub ToTypeFromDefiniteSign() Const Integer Dim sm
на VBA. ТАк образует абзац И 1)), 1) или
123V, ваш способ
от строковой переменной на предложения, перебираете личные сообщения. У появиться разные «а»,. И все.Категория ‘ Сравнение являетсяЕсли значение параметра указывающее позицию первого = 1 For ProbeString = «023_1387658762-;-;#» As String r: как сам я надо вставить «?» ЛУЧШЕ С_конца_буква_1_О =1234 гениален, но на 2 последний разряда, получившийся массив в меня нет проблем если я билВот так, где-то:Функции обработки строк двоичным по умолчаниюCompare появления одной строки J = 0 sym = Left(InputBox(«Символ, stroka = InputBox(«Введите в vba не перед предпоследним символом Right$(о, 1) С_конца_буква_2_я_ОМне нужно во большем объеме данных к примеру.
Версия поисках самого длинного с комплексами. Если прямо здесь вa=application.trim(Text1.Text) а=replace(a, split(a,ПоцелуюНежно (последний аргумент опущен)равно Null, возникает внутри другой To UBound(strIn) - с которого печатать строку», «поиск в особо силён, то абзаца, то можно = Left$((Right$(о, 2)), все строки вставить почему-то работает не справочника есть в предложения заменяя перед делаю ошибки, а окне при лат. space(1))(0), strreverse(split(a, space(1))(0)),: Допустим, у нас MyPos = ошибка.Перечень возвращаемых значений 1 K = строку.», «Г‚âîä», «_»), строке», «023_1387658762-;-;#») ls очень прошу помочь. так: Sub How_much_watch() 1) С_конца_буква_3_я_О = «?» чтобы все всегда. прикрепленном файле, функция подсчетом все пробелы Вы хотите их раскладке? 1) есть 4 слова,InstrВ том случае,Вариант
InStr(1, Words(J), «д») 1) If sym = Len(stroka) IfСуть задания: Dim i&, s$ Left$((Right$(о, 3)), 1) они стали вІгор Гончаренко
находится в ячейке на пустоту.
Затем
указать, ну очень
АпостроффПоцелуюНежно вводим их в(SearchString, SearchChar) ‘ Возвращает
когда параметр
Значение, возвращаемое функцией InStr If K > = Empty Then ls < 1Имеется фаил эксель, For i = С_конца_буква_4_я_О = Left$((Right$(о, виде:: =ИНДЕКС(C7:F7;;СУММПРОИЗВ(($C$8:$F$29=$D$2)*СТОЛБЕЦ(A1:D1)))не сработает, когда E3. узнав индекс наибольшего Вас прошу -: Вопрос по теме: А как она форму, в которой 1 MyPos =Compare
String1 0 Then K Exit Sub sympos Then GoTo r в нём хранятся 1 To ActiveDocument.Paragraphs.Count 4)), 1) С_конца_буква_5_я_О12?3 в диапазоне данныхСпасибо! предложения делите его указывайте здесь. Думаю, работы со строками. полностью будет выглядеть? 2 тестовых поляInstrопущен,тип сравнения определяетсяимеет нулевую длину = InStr(K +
= InStr(1, ProbeString, End If index данные вида With ActiveDocument.Paragraphs(i).Range s
= Left$((Right$(о, 5)),123?4 есть несколько искомыхP.
S. Сначала пытался все тем же другим чужие ошибки Почти такая жеПоцелуюНежно и одна кнопка.(1, SearchString, «W») ‘
установками оператора0 1, Words(J), «д») sym) MsgBox «Символ
= 0 For|Фамилия студента|Группа.|Вид работы|Название………..|Год…|
= .Text .Text
CyberForum.ru
Работа со строками
1) С_конца_буква_6_я_О =Задача упрощена, но значений
сделать это стандартными split на слова тоже интересные. Иногда задачка,но не надо: Добавьте в ваш В одно текст.
Возвращает 0
Option CompareString1 If K >
«» & sym
i = 1
|——————|———|————|——————|——|
= Left$(s, Len(s)
Left$((Right$(о, 6)), 1)
я по аналогииСУММПРОИЗВ заменить на
средствами с помощью и собираете цыклов больше пользы, чем символы записывать в проект пользовательскую форму поле мы вводимКатегорияУстановки
имеет значение Null
0 Then ActiveSheet.
Cells(numRow, & » стоит
To ls sm|Петров Николай…|МЗ-415.|Диплом……|Автоматизация.. |2008|
CyberForum.ru
Работа со строками
— 2) & С_конца_буква_7_я_О = Left$((Right$(о, сам доделаю.. . МАКС и формулу ЕСЛИ и ГПР, в обратном порядке. от удач. Но обратной последовательности. А и в режиме
исходную строку соФункции обработки строкДля параметраNull I) = Words(J) на » & = Mid(stroka, i,
|——————|———|————|——————|——| «?» & Right$(s, 7)), 1) С_конца_буква_8_я_О Помогите, кому не ввести, как формулу но так тоже
оставшиеся элементы первого это просто мое просто второе слово дизайна формы разместите словами, нажимаем кнопкуStr(Number)CompareString2 numRow = numRow sympos & -м 1) If sm|Иванов Анатолий..|КО-143.|Курсовая…|Проектирование.|2010| 2) End With = Left$((Right$(о, 8)), сложно. Не хочется массива (Ctrl+Shift+Enter) - ничего не фурычит.
масива перебираете аналогично мнение. в строке чтобы на ней два и в рез-теФункцияиспользуются следующие установки:имеет нулевую длину + 1 End месте.» Select Case = «_» Thenи так далее Next End Sub 1) С_конца_буква_9_я_О = ради этого раза будет работать всегда. Подозреваю, что именно но только изменяяIgor_Tr с заглавными буквами текстовых поля и
чего, во второмStrКонстантаStart
If Next Next sympos = 0 index = i много-много строкАпострофф Left$((Right$(о, 9)), 1) лопатить много литературы..Kuzmich из за текстового регистр. Нелюблю студентов: записывало. Именно второе кнопку. тект. поле появляется(ЗначениеString2 End Sub Case True: MsgBox Exit For EndЗадача состоит в: спасибо большое, коды С_конца_буква_10_я_О = Left$((Right$(о,Ципихович Эндрю
: Не так в формата данных для халявщиков! Если будутIgor_Tr слово,не трогая первое.Затем (в этом ответ. А вStrОписаниеимеет значение Nulldashulja «Строка » & If Next i том, что если полезные, всё то 10)), 1) С_конца_буква_1_О: и куда именно строке чисел.
от вас попытки,Private Sub CommandButton1_Click() же режиме) дважды ответе первое словоing) используется для приведенияvbUseCompareOption
CyberForum.ru
Работа со строками и символами
Null: ОГРОМНОЕ СПАСИБО!!!!!!!!!!!! ProbeString & « If index = работа является дипломом, что нужно для = Right$(о, 1) вопрос ставить?Directory = DirRange(1,Public Function Directory(DirNumber
решения и конкретныеJoin Dim a As щелкните по кнопке. должно быть написано числового выражения типа
-1String2вот блин(((сначала работала не содержит символа 0 Then MsgBox то вся строка меня. Правда таки С_конца_буквы_12_О = Right$(о,на многие случаи DirC As String, DirRange вопросы то тогдав Вашем примере String, b As Среда разработчика автоматически наоборот. Long в строку(типСравнение выполняется с использованиемне найдена программка, а потом ‹» & sym «Не найдено!», vbExclamation, копируется в таблицу заминочка выходит.
Оба 2) С_конца_буквы_123_О = жизни:u As Range) As милости просим подскажем вызывает ошибку 13: String, c() As создаст процедуру обработкит.е. из «Классные String) установок для оператора
0 перестала!!!
& «›.» Case «поиск в строке» на второй лист,
CyberForum.ru
последних примера вылетают
- Формулы для работы в excel
- Excel работа с фильтрами
- Excel работа с массивами данных
- Excel совместная работа с файлом excel
- Как в excel поменять строки и столбцы местами
- Vba excel перенос строки
- Excel преобразовать строки в столбцы в excel
- Для предотвращения потери данных excel не позволяет вставить строку
- Как в excel закрепить и строку и столбец одновременно
- Работа в excel с таблицами и формулами
- Работа с excel из с
- Как в excel сделать автоподбор высоты строки
Найти текст в строке (функция instr)
В этой статье
- Функция instr
- Пример instr
- Syntax Instr
- Инструмент старта Made Easy
- Примеры InString
- Если строка содержит подстроку
- Поиск текстовой строки в ячейке
- Поиск позиции символа в строке
- Поиск строки для Word
- Если переменная содержит строку
- Instr и функция Left
- Использование Instr в Microsoft Access VBA
Функция INSTR
Функция VBA Instr проверяет, найдена ли текстовая строка в другой текстовой строке.
Возвращает 0, если текст не найден. В противном случае он возвращает позицию символа, в которой находится текст.Функция Instr выполняет точных совпадений. Вместо этого можно использовать оператор VBA Like для выполнения неточных совпадений/сопоставления шаблонов с использованием подстановочных знаков.
Instr Example
Следующий фрагмент кода ищет в строке «Искать в этой строке» слово «Искать». Функция Instr возвращает 1, поскольку текст находится в первой позиции.
Sub FindSomeText() MsgBox InStr("Посмотреть в этой строке", "Посмотреть") End SubЭтот второй пример возвращает 7, потому что текст найден, начиная с 7-й позиции:
Sub FindSomeText2() MsgBox InStr("Не смотреть в этой строке", "Искать") Конец субВажно! Функция Instr по умолчанию имеет значение с учетом регистра . Это означает, что «look» не будет совпадать с «Look».
Чтобы сделать тест нечувствительным к регистру, читайте ниже.Синтаксис Instr
Синтаксис функции Instr следующий:
Instr( [start], string, substring, [compare] )
[start] (необязательно) — этот необязательный аргумент является начальной позицией поиска. Введите 1, чтобы начать поиск с позиции 1 (или оставьте поле пустым). Введите 5, чтобы начать поиск с позиции 5. Важно! Функция INSTR вычисляет позицию символа, считая от 1 НЕ от [начальной] позиции .
строка — строка текста для поиска.
подстрока — строка текста для поиска в основной строке.
[сравнить] (необязательно) — по умолчанию Instr чувствителен к регистру. Установив этот аргумент, вы можете сделать Instr нечувствительным к регистру:
Аргумент vb Значение
Целочисленный аргумент Описание vbBinaryCompare 0
(по умолчанию) С учетом регистра vbTextCompare
1
Без учета регистра vbDatabaseCompare
2
Только доступ MS.
Использует информацию в базе данных для выполнения сравнения.Начальная позиция инструкции
Начальная позиция инструкции позволяет указать позицию символа, с которой вы начнете поиск. Имейте в виду, однако, что вывод Instr всегда будет считаться с 1.
Здесь мы устанавливаем начальную позицию на 3, чтобы пропустить первую B:
Sub Instr_StartPosition() MsgBox InStr(3, "ABC ABC", "B") End Sub
Результат равен 6, потому что вторая буква B является шестым символом в строке.
Тест INSTR без учета регистра
По умолчанию VBA рассматривает «L» иначе, чем «l». Другими словами, VBA чувствителен к регистру. Это справедливо для всех текстовых функций. Чтобы сделать VBA нечувствительным к регистру, установите для аргумента [compare] значение 1 или vbTextCompare.
Общедоступная подпрограмма FindText_IgnoreCase() MsgBox InStr(1, "Не смотреть в этой строке", "смотреть", vbTextCompare) End Sub
Кроме того, вы можете добавить Текст сравнения параметров в верхнюю часть модуля кода:
Текст сравнения параметров
Текст сравнения параметров Общедоступная подпрограмма FindText_IgnoreCase2() MsgBox InStr("Не смотреть в этой строке", "смотреть") Конец субOption Compare Text повлияет на весь код в этом модуле.
Я лично помещаю это в начало любого модуля, который имеет дело с текстом, потому что меня никогда не волнуют различия регистров.Функция InstrRev
Функция InstrRev выполняет поиск слева. Вместо этого вы можете искать справа, используя функцию InstrRev. Функция InstrRev работает очень похоже на функцию Instr.
Sub FindSomeText_FromRight() MsgBox InStrRev("Посмотреть в этой строке", "Посмотреть") Конец субКак и функция Instr, она вернет 1, потому что в тексте есть только один экземпляр «Look». Но если мы добавим второй «Look», вы увидите, что он возвращает позицию самого правого «Look»:
Sub FindSomeText_FromRight() MsgBox InStrRev("Посмотреть в этой строке "Посмотреть", "Посмотреть") End SubДалее мы рассмотрим другие примеры Instr.
Кодирование VBA стало проще
Прекратите поиск кода VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области программирования и множеством функций, позволяющих сэкономить время для всех пользователей!
Узнайте больше!
Примеры InString
Если строка содержит подстроку
Здесь мы будем использовать оператор If, чтобы проверить, содержит ли строка подстроку текста:
Public Sub FindSomeText() Если InStr("Посмотреть в этой строке", "посмотреть") = 0 Тогда MsgBox "Нет совпадений" Еще MsgBox "По крайней мере одно совпадение" Конец, если End SubНайти текстовую строку в ячейке
Вы также можете найти строку в ячейке:
Sub Find_String_Cell() Если InStr(Range("B2").
Value, "Dr.") > 0 Тогда
Диапазон("C2").Value = "Доктор"
Конец, если
End Sub Или прокрутите диапазон ячеек, чтобы проверить, содержат ли ячейки текст:
Sub Search_Range_For_Text() Затемнить ячейку как диапазон Для каждой ячейки в диапазоне («b2: b6») Если InStr(cell.Value, "Доктор") > 0 Тогда cell.Offset(0, 1).Value = "Доктор" Конец, если Следующая ячейка Конец субПрограммирование VBA | Генератор кода работает на вас!
Найти позицию символа в строке
Этот код найдет позицию одиночного символа в строке и присвоит позицию переменной:
Sub Find_Char() Dim N As Long n = InStr("Вот, смотри сюда", "L") End SubСтрока поиска для Word
Этот код будет искать слово в строке:
Sub Search_String_For_Word() Dim N As Long n = InStr("Вот Смотри Здесь", "Смотри") Если п = 0 Тогда MsgBox "Слово не найдено" Еще MsgBox "Слово найдено в позиции: " & n Конец, если Конец субЕсли переменная содержит строку
Этот код проверяет, содержит ли строковая переменная строку текста:
Sub Variable_Contains_String() Dim str As String ул = "Посмотри сюда" Если InStr(str, "Здесь") > 0 Тогда MsgBox "Вот нашел!" Конец, если End SubInstr и Left Function
Instr можно использовать вместе с другими текстовыми функциями, такими как Left, Right, Len и Mid, для обрезки текста.

С помощью функции Left вы можете вывести текст перед текстовой строкой:
Sub Instr_Left() Dim str As String Dim N As Long ул = "Посмотри сюда" n = InStr(str, "Здесь") MsgBox Left(str, n - 1) End SubИспользование Instr в Microsoft Access VBA
Все приведенные выше примеры работают точно так же в Access VBA, как и в Excel VBA.
Чтобы узнать больше, прочитайте нашу статью: Текстовые функции VBA
<<Вернуться к примерам VBAФункция InStr (Visual Basic для приложений)
Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 2 минуты на чтение
Возвращает вариант Variant ( Long ), указывающий позицию первого вхождения одной строки в другую.
Примечание
Заинтересованы в разработке решений, расширяющих возможности Office на различных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любые технологии веб-программирования, такие как HTML5, JavaScript, CSS3 и XML.
Синтаксис
InStr ([ начало ], строка1 , строка2 , [ сравнить ])
Синтаксис функции InStr имеет следующие аргументы:
Часть Описание начало Дополнительно. Числовое выражение, задающее начальную позицию для каждого поиска.
Если этот параметр опущен, поиск начинается с позиции первого символа. Если start содержит Null, возникает ошибка. Аргумент start требуется, если указано сравнение .строка1 Обязательно. Искомое строковое выражение. строка2 Обязательно. Искомое строковое выражение. сравнить Дополнительно. Указывает тип сравнения строк. Если сравнить с Null , возникает ошибка. Если параметр compare опущен, параметр Option Compare определяет тип сравнения. Укажите действительный LCID (LocaleID), чтобы использовать при сравнении правила, специфичные для локали. Параметры
Параметры аргумента сравнения следующие.
Константа Значение Описание vbUseCompareOption -1 Выполняет сравнение, используя настройку оператора Option Compare . 
vbBinaryCompare 0 Выполняет двоичное сравнение. vbTextCompare 1 Выполняет текстовое сравнение. vbDatabaseCompare 2 Только Microsoft Access. Выполняет сравнение на основе информации из вашей базы данных. Возвращаемые значения
Если InStr возвращает string1 имеет нулевую длину 0 string1 равно Null Нулевой string2 имеет нулевую длину начало string2 равно Null Нулевой строка2 не найдена 0 строка2 находится в строке 1 Позиция, в которой найдено совпадение начало > строка2 0 Функция InStrB используется с байтовыми данными, содержащимися в строке.
Вместо того, чтобы возвращать позицию символа первого вхождения одной строки в другую, InStrB возвращает позицию в байте.Пример
В этом примере функция InStr используется для возврата позиции первого вхождения одной строки в другую.
Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' Строка для поиска. SearchChar = "P" ' Поиск "P". ' Текстовое сравнение, начинающееся с позиции 4. Возвращает 6. MyPos = Instr(4, SearchString, SearchChar, 1) ' Двоичное сравнение, начинающееся с позиции 1. Возвращает 9. MyPos = Instr(1, SearchString, SearchChar, 0) ' Сравнение по умолчанию бинарное (последний аргумент опущен). MyPos = Instr(SearchString, SearchChar) ' Возвращает 9. MyPos = Instr(1, SearchString, "W") ' Возвращает 0.
См. также
- Функции (Visual Basic для приложений)
Поддержка и отзывы
У вас есть вопросы или отзывы об Office VBA или этой документации? См.
раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.VBA InStr — Как использовать функцию Excel VBA InStr? (Примеры)
Функция VBA InStr помогает найти позицию заданной подстроки в строке. Он возвращает первое вхождение подстроки в виде целого числа (вывод). Строка — это последовательность символов или текста, передаваемого функции в двойных кавычках.
Например, InStr может извлекать подстроку из предложения, применять нужный шрифт к определенной строке, находить положение символа в строке и т.д.
Функция VBA InStr в Excel начинает поиск слева направо.
Содержание
- Функция InStr в Excel VBA
- Синтаксис функции VBA InStr
- Примеры VBA InStr
- Пример №1 — Аргумент «Start» опущен
- Пример №2 — «ArgumentStar isgument» Указано
- Пример № 3-чувствительный к примеру Поиск
- Пример № 4-нечувствительный поиск
- Пример № 5-Адвентный уровень
- Свойства VBA Instrance
- Часто задаваемые вопросы
- Рекомендованные статьи

Вы можете использовать это изображение на своем веб-сайте, в шаблонах и т. д. Пожалуйста, предоставьте нам ссылку на авторство. Как указать авторство? Ссылка на статью должна быть гиперссылкой
Синтаксис функции VBA InStr
Например:
Источник: VBA InStr (wallstreetmojo.com)Синтаксис функции показан на следующем рисунке:
Функция принимает следующие аргументы:
- Начало: Это позиция, с которой начинается функция искать. Например, если «начало» установлено на 3, а символ «а» должен быть найден в слове «Бангалор», вывод равен 5.
- Строка 1: Это фактическая строка, в которой находится подстрока. быть найденным. Например, если в слове «Бангалор» встречается символ «а», «строка 1» — это «Бангалор».
- Строка 2: Это искомая подстрока. Например, если в слове «Бангалор» встречается символ «а», «строка 2» — это «а».
- Сравнить: Это тип выполняемого сравнения.
Типы методов сравнения показаны на следующем изображении.
Три метода сравнения объясняются следующим образом:
1. vbBinaryCompare: Это двоичное сравнение, которое можно ввести как ноль (0). Это поиск подстроки (строка 2) в фактической строке (строка 1) с учетом регистра.
Например, если в аргументе указан 0 и:
a. В слове «Бангалор» встречается символ «а», выход 2.
b. Символ «A» должен быть найден в слове «Bangalore», вывод равен 0. Это связано с тем, что предоставленная строка находится в верхнем регистре, которого нет в «строке 1».
2. vbTextCompare: Это текстовое сравнение, которое можно ввести как единицу (1). Это нечувствительный к регистру поиск «строки 2» в «строке 1».
Например, если в аргументе указано 1 и:
a. В слове «Бангалор» встречается символ «а», выход 2.
b. Символ «А» должен быть найден в слове «Бангалор», вывод равен 2. Это связано с тем, что этот метод сравнения игнорирует регистр подстроки.

3. vbDatabaseCompare: Можно ввести как два (2). Он сравнивает на основе информации из базы данных Microsoft Access.
«Строка 1» и «Строка 2» являются обязательными аргументами, а «начало» и «сравнение» — необязательными.
Примечание 1: Если параметр «начало» опущен, значение по умолчанию равно 1, что означает, что поиск начинается с первой позиции.
Примечание 2: Если параметр «compare» опущен, метод по умолчанию — «vbBinaryCompare».
Примеры VBA InStr
Вы можете скачать этот шаблон Excel для функции VBA Instr здесь — Шаблон Excel для функции VBA Instr
Пример № 1. Аргумент «Start» опущенНам нужно найти позицию символа «a» в слове «Бангалор».
Шаг 1: Введите следующий код.
Sub Instr_Example1() Dim i как вариант i = InStr("Бангалор", "а") MsgBox я End SubШаг 2: Нажмите F5 или запустите код VBA Код VBA Код VBA представляет собой набор инструкций, написанных пользователем на языке программирования приложений Visual Basic в редакторе Visual Basic (VBE) для выполнения определенной задачи.
вручную, как показано на следующем рисунке.Шаг 3: Результат равен 2, как показано на следующем рисунке. Следовательно, символ «а» стоит на второй позиции в слове «Бангалор».
Пример 2. Аргумент «Start» указанНам нужно найти позицию символа «a» в слове «Bangalore». Поиск следует начинать с третьей позиции.
Шаг 1: Введите следующий код.
Sub Instr_Example2() Dim i как вариант i = InStr(3, "Бангалор", "а") MsgBox я End Sub
Шаг 2: Нажмите F5 или запустите код VBA вручную, как показано на следующем рисунке.
Шаг 3: Результат равен 5, как показано на следующем рисунке. Поскольку поиск начинается с третьей буквы (n), функция VBA InStr в Excel игнорирует первое вхождение (вторая позиция) символа «a».
Следовательно, в данном случае символ «а» стоит на пятой позиции в слове «Бангалор».
Пример №3. Поиск с учетом регистраНам нужно найти букву «А» в слове «Бангалор».

Давайте передадим аргумент сравнения «vbBinaryCompare» в функцию VBA InStr.
Шаг 1: Введите следующий код.
Sub Instr_Example3() Dim i как вариант i = InStr(1, "Бангалор", "А", vbBinaryCompare) MsgBox я Конец суб
Шаг 2: Нажмите F5 или запустите код VBA вручную, как показано на следующем рисунке.
Шаг 3: Результат равен 0, как показано на следующем рисунке. Поскольку указан аргумент «vbBinaryCompare», функция VBA InStr в Excel ищет заглавную букву «A».
Следовательно, функция возвращает 0, так как не смогла найти заглавную букву «А» в слове «Бангалор».
Пример № 4. Поиск без учета регистраМы должны найти букву «А» в слове «Бангалор», используя подход без учета регистра.
Давайте добавим аргумент сравнения «vbTextCompare» в функцию VBA InStr.
Шаг 1: Введите следующий код.
Sub Instr_Example4() Dim i как вариант i = InStr(1, "Бангалор", "A", vbTextCompare) MsgBox я End Sub
Шаг 2: Нажмите F5 или запустите код VBA вручную, как показано на следующем рисунке.

Шаг 3: Выход равен 2, как показано на следующем рисунке. Поскольку указан аргумент «vbTextCompare», функция InStr игнорирует регистр подстроки «A».
Следовательно, функция возвращает 2, так как буква «А» или «а» присутствует на второй позиции в слове «Бангалор».
Пример №5 – Расширенный уровеньРассмотрим пример расширенного уровня функции VBA InStr в Excel.
На следующем изображении показаны пять рабочих листов Excel с именами: «Данные», «Сводка 1», «Сводка 2», «Сводка 3» и «Сводка 4».
Мы хотим скрыть все рабочие листы, кроме листа «Данные».
Шаг 1: Введите следующий код, чтобы скрыть все листы, в названии которых содержится слово «Сводка».
Sub To_Hide_Specific_Sheet() Dim Ws As рабочий лист Для каждого W в ActiveWorkbook.Worksheets Если InStr(Ws.Name, "Сводка") > 0 Тогда Ws.Visible = кслшитверихидден Конец, если Следующая Вт 'Функция InStr ищет слово или фразу в названии листа 'Если найдет, то скроется Конец суб
Шаг 2: Нажмите F5 или запустите код VBA вручную, как показано на следующем рисунке.
В выводе виден только лист «Данные». Остальные четыре листа скрыты.Аналогично, мы можем отобразить эти листыОткрыть эти листыСуществуют различные способы отображения листов в Excel в соответствии с необходимостью отобразить все, все, кроме одного, нескольких или определенного рабочего листа. Вы можете использовать правую кнопку мыши, сочетание клавиш Excel или написать код VBA в Excel. читать далее, которые содержат слово «Резюме» в своем названии.
Шаг 1: Введите следующий код, чтобы отобразить все листы.
Sub To_UnHide_Specific_Sheet() Dim Ws As рабочий лист Для каждого W в ActiveWorkbook.Worksheets Если InStr(Ws.Name, "Сводка") > 0 Тогда Ws.Visible = кслшитвисибле Конец, если Следующая Вт 'Функция InStr ищет слово или фразу в названии листа 'Если найдет, то скроется End Sub
Шаг 2: Нажмите F5 или запустите код VBA вручную, как показано на следующем рисунке. На выходе все пять листов отображаются.
Свойства функции VBA InStrНиже перечислены свойства функции:
- Это функция с учетом регистра.
Чтобы устранить эту проблему, укажите аргумент «сравнить» «vbTextCompare». - Это функция VBA Функция VBA Функции VBA служат основной цели для выполнения определенных вычислений и возврата значения. Поэтому в VBA мы используем синтаксис для указания параметров и типа данных при определении функции. Такие функции называются определяемыми пользователем функциями. Подробнее, и их нельзя использовать, как другие встроенные формулы Excel.
- Возвращает ноль, если не может найти «строку 2» в «строке 1».
Определение функции VBA InStr.
Функция VBA InStr возвращает позицию одной строки в другой строке. Эта позиция соответствует первому вхождению подстроки. Функция возвращает целое число в качестве вывода. Возвращает ноль (0), если подстрока не найдена в строке.
Синтаксис и аргументы функции перечислены ниже:
«InStr([start],string1,string2,[compare])»
• Start: Указывает позицию, с которой должен начинаться поиск.
Значение по умолчанию — 1.
• Строка 1: Это фактическая строка, в которой следует искать подстроку.
• Строка 2: Это подстрока для поиска.
• Сравнить: Указывает используемый метод сравнения. Методы указаны следующим образом:
а. vbBinaryCompare или 0: Используется для поиска подстроки в строке с учетом регистра.
б. vbTextCompare или 1: Используется для поиска подстроки в строке без учета регистра.
в. vbDatabaseCompare или 2: Используется для сравнения с базой данных Microsoft Access.Аргументы «строка 1» и «строка 2» являются обязательными, а «начало» и «сравнение» — необязательными.
В чем разница между функциями InStr и InStrRev VBA?
Различия между двумя функциями указаны ниже:
• VBA InStr выполняет поиск слева направо, в то время как функция VBA InStrRevVBA InStrRevVBA INSTRREV или функция реверсирования строки возвращает позицию одной строки, которая встречается внутри другой.
Он сортирует, начиная с конца строки (справа налево), из которой мы ищем доступную для поиска строку. Читать далее поиск справа налево.
• Синтаксис VBA InStr: «InStr([start],string1,string2,[compare])». Для сравнения, синтаксис InStrRev — «InStrRev(строка1,строка2,[начало,[сравнить]])».
• Если аргумент «начало» опущен, InStr начинает поиск с начальной (первой позиции) строки. Напротив, InStrRev начинает поиск с конца (последней позиции) строки.Как использовать функцию VBA InStr в Excel с подстановочными знаками?
При использовании подстановочных знаков функция InStr возвращает «истина» или «ложь» в зависимости от того, нашла ли она указанную подстроку в строке или нет.
Функция поддерживает использование следующих подстановочных знаков:
1. Звездочка (*): Представляет один или несколько символов строки и работает следующим образом:
• «a*» относится к тексту, который начинается с символа «a».
• «*a» относится к тексту, который заканчивается символом «a».
• « *a*» относится к тексту, в середине которого есть символ «a».
2. Вопросительный знак (?): Представляет один символ строки и работает следующим образом:
• «a?» относится к двум символам, начинающимся с «а».
• «?a» относится к двум символам, оканчивающимся на «a».
• «?а?» относится к трем символам, имеющим «а» в середине.
Аналогично, функция VBA InStr также может использоваться с тильдой (~).Рекомендуемые статьи
Это руководство по функции VBA InStr в Excel. Здесь мы узнаем, как использовать функцию InStr вместе с пошаговыми примерами и загружаемым шаблоном Excel. Ниже вы можете найти несколько полезных статей по Excel VBA:
- VBA FileCopy Function
- Excel VBA FileDialog
- Строковые функции Excel VBA
- Excel VBA SubString
- Рабочий лист имени VBA
Как найти строку с помощью VBA в Excel (8 примеров)
Реализация — самая быстрая и эффективная, V6BA
- 5 самый безопасный метод для выполнения любой операции в Excel.
- По умолчанию функция InStr вычисляет позицию символа, считая с 1, а не с начальной позиции. Таким образом, вы можете оставить это поле пустым, если хотите.
- vbBinaryCompare -> выполняет двоичное сравнение, возвращает значение 0
- vbTextCompare -> выполняет сравнение текста, возвращает значение 1
- vbDatabaseCompare -> выполняет сравнение базы данных, возвращает значение 2
- Нажмите Alt + F11 на клавиатуре или перейдите на вкладку Разработчик -> Visual Basic , чтобы открыть Редактор Visual Basic .
- Во всплывающем окне кода в строке меню нажмите Вставить -> Модуль .
- Теперь в окне кода напишите простую программу InStr внутри подпроцедуры VBA (см. ниже).
В этой статье мы покажем вам, как найти определенные строки в другой заданной строке, используя VBA в Excel.Скачать шаблон практики
Функция InStr
8 простых примеров поиска определенной позиции строки в заданной строке с использованием VBA
1. VBA для поиска позиции текста в строке
2. VBA для поиска текста из определенной позиции в строке
3. VBA для поиска текста с помощью функции InStr без учета регистра в строке
4. VBA для поиска текста справа от строки
5. VBA для поиска позиции символа в строке
6. VBA для поиска подстроки в строке
7. VBA для поиска строки в диапазоне ячеек
8. VBA для поиска строки в ячейке
Вывод
Вам также может понравиться исследовать
Скачать шаблон практикиВы можете скачать бесплатный шаблон Excel для практики отсюда.
Функция InStrMicrosoft Excel имеет встроенную функцию под названием Функция InStr для поиска положения определенных строк в заданной строке.

Общий синтаксис:
InStr([начало], строка1, строка2, [сравнить])Здесь,
Аргументы Требуется/дополнительно Определение начало Дополнительно Начальная позиция поиска. строка1 Обязательно Строка для поиска, основная строка. строка2 Обязательно Строка для поиска в основной строке. сравнить Дополнительно Функция InStr по умолчанию чувствительна к регистру.
Но если вы хотите запустить нечувствительный к регистру InStr , вы можете передать аргумент здесь, чтобы выполнить определенное сравнение. Этот аргумент может принимать следующие значения:По умолчанию InStr принимает vbBinaryCompare в качестве аргумента сравнения.
8 простых примеров поиска определенной позиции строки в заданной строке с помощью VBAДавайте рассмотрим несколько простых примеров, чтобы получить позиции определенных строк в заданной строке, используя VBA .
1. VBA для поиска позиции текста в строкеНиже приведен пример InStr для поиска позиции текста в строке.

Sub INSTR_Example() MsgBox InStr("Счастье — это выбор", "выбор") Конец субТеперь ваш код готов к запуску.
- Нажмите F5 на клавиатуре или в строке меню выберите Выполнить -> Выполнить Sub/UserForm . Вы также можете просто щелкнуть маленький значок воспроизведения в строке подменю, чтобы запустить макрос.
Вы увидите, что всплывающее окно сообщения даст вам число , объявляющее позицию текста, который вы хотели проверить.

Объяснение:
Наша основная строка « Счастье — это выбор » представляет собой предложение из 21 буквы (с пробелами), и мы хотели найти позицию текста « выбор ” в этой строке. Текст « Choice » начинался с 16-й позиции основной строки, поэтому мы получили номер 16 в качестве вывода в окне сообщения.
2. VBA для поиска текста из определенной позиции в строкеТеперь давайте выясним, что произойдет, если мы захотим получить позицию из определенного числа.
- Так же, как и раньше, откройте Редактор Visual Basic из Вкладка Developer и Вставьте модуль в окно кода.
- В окне кода напишите простую программу InStr , показанную выше, и передайте значение в начальном аргументе в соответствии с позицией, с которой вы хотите отсчитывать текст.

Sub INSTR_Example() MsgBox InStr(17, "Счастье — это выбор", "выбор") Конец сабвуфера
- Далее, Запустить код.
Вы увидите, что всплывающее окно сообщения даст вам число, объявляющее позицию текста , начиная с определенной позиции , которую вы хотели проверить.
Объяснение:
Поскольку мы уже знали (из обсуждения фазы 1), что текст « выбор » начинается с позиции 16 , поэтому мы вставили два « выбор » в основную строку и установили 17 в качестве нашего первого параметра, чтобы пропустить первый » выбор ». Итак, мы Запустили приведенный выше макрос, и он показал нам номер позиции 27 , который точно соответствует номеру позиции второго « выбора » в данной строке.

3. VBA для поиска текста с помощью функции InStr без учета регистра в строкеИз введения функции InStr вы уже знаете, что по умолчанию функция InStr чувствительна к регистру. Давайте выясним это на примере.
См. следующий код VBA , в котором мы хотели найти позицию слова « Choice » с заглавной «C» в строке « Счастье — это выбор », где выбор пишется с маленькой буквы «с» .
- Запустите код и найдите 0 в качестве вывода.
Это потому, что функция InStr обрабатывает заглавную букву «C» и маленькие «с» по-разному. Поэтому он искал слово « Choice » в строке и не нашел совпадений, поэтому вернул 0 .
- Чтобы сделать функцию InStr нечувствительной к регистру , установите для аргумента сравнения значение vbTextCompare (см.
ниже).
Sub INSTR_Example() MsgBox InStr(1, "Счастье — это выбор и выбор", "Выбор", vbTextCompare) Конец суб
- Запустите код.
Вы получите позицию текста из строки, независимо от того, написан ли текст заглавными буквами или строчными буквами.
4. VBA для поиска текста справа от строкиДо сих пор функция InStr давала нам позицию только с левой стороны строки. Но что, если вы хотите найти позицию текста с правой стороны строки.
Функция InStrRev выполняет поиск справа. Функция InStrRev работает очень похоже на функцию InStr и находит позицию текста с правой стороны строки.
См. следующие примеры, чтобы понять разницу.
- Если мы запустим следующий код с функцией InStr , то
дает нам позицию ( 16 ) первого текста « на выбор ».

- Но если мы запустим тот же код с функцией InStrRev , тогда
дает нам позицию ( 27 ) последнего текста « выбор ».
Аналогичные показания:
- FindNext Использование VBA в Excel (2 примера)
- Как найти и заменить с помощью VBA (11 способов)
- Найти точное совпадение с помощью VBA в Excel (5 способов)
5. VBA для поиска позиции символа в строкеВы также можете найти позицию определенного символа в строке так же, как вы нашли текст.
- Скопируйте следующий код в окно кода VBA
Sub Find_Character() Dim z As Long z = InStr("Счастье - это выбор", "e") MsgBox г Конец суб- А Запустить макрос.
Первый « e » в нашей заданной строке находится в позиции числа 7 .

6. VBA для поиска подстроки в строкеЗдесь мы узнаем, как определить, содержит ли строка подстроку или нет.
Чтобы получить это, мы должны запустить оператор IF в нашем коде.
- Так же, как и раньше, откройте Редактор Visual Basic из Вкладка Developer и Вставьте модуль в окно кода.
- В окне кода скопируйте следующий код и вставьте его.
Общедоступная подпрограмма FindSub() Если InStr("Счастье - это выбор", "выбор") = 0 Тогда MsgBox "Совпадений не найдено" Еще MsgBox "Найдено совпадение" Конец, если Конец субТеперь ваш код готов к запуску.
- Запустить макрос.
Если ваша строка содержит подстроку , то вы получите найденное совпадение , в противном случае он не вернет совпадение.
В нашем примере мы хотели выяснить, содержит ли наша основная строка « Счастье — это выбор » слово « выбор » или нет. При этом мы получаем результат Match found .
7. VBA для поиска строки в диапазоне ячеекВы можете искать определенный текст в диапазоне ячеек строки и возвращать определенную строку.
Посмотрите на следующий пример, где мы найдем « Dr. », а при совпадении он вернет « Doctor ».
- Ниже приведен код для получения результата, описанного выше,
Sub Find_String_in_Range() Затемнить ячейку как диапазон Для каждой ячейки в диапазоне («B5: B10») Если InStr(cell.Value, "Доктор") > 0 Тогда cell.Offset(0, 1).Value = "Доктор" Конец, если Следующая ячейка Конец суб
- Прогон код и результат показан ниже
- Вы можете изменить макрос в соответствии с вашими потребностями.
Например, если вы хотите найти « Профессор » в любой ячейке строки и получить в качестве результата « Профессор », просто передайте « Профессор » в качестве значения вместо « Доктор ». в 4 строке макроса и « Профессор » вместо « Доктор 9″0297 » в 5-й строке макроса и соответственно определить номер диапазона ячеек.
Вы также можете искать определенный текст в одной ячейке строки и возвращать определенную строку.
- Скопируйте следующий код и вставьте его в окно кода.
Sub Find_String_in_Cell() Если InStr(Range("B5").Value, "Dr.") > 0 Тогда Диапазон ("C5"). Значение = "Доктор" Конец, если Конец субОн будет искать « Доктор » в ячейке B5 и, если найдет совпадение, вернет « Доктор » в ячейке C5 .

- Вы можете изменить макрос в соответствии с вашими потребностями. Например, если вы хотите найти « Профессор » в любой ячейке строки и получить в качестве результата « Профессор », просто передайте « Профессор » в качестве значения вместо Д-р ». во 2-й строке макроса и « Профессор » вместо « Доктор » в 3-й строке макроса и соответственно определите номер ячейки.
ЗаключениеВ этой статье показано, как найти определенные тексты в строке в Excel с помощью макроса VBA. Надеюсь, эта статья оказалась для вас очень полезной. Не стесняйтесь задавать любые вопросы по теме.
Вы также можете изучить- VBA Найти последнюю строку в Excel (5 способов)
- Поиск VBA в столбце Excel (7 подходов)
- Поиск в диапазоне с помощью VBA в Excel: включая точные и частичные совпадения
- Как использовать функцию поиска в VBA (6 примеров)
Функция Excel VBA InStr — объяснение с примерами
Вчера я получил электронное письмо от одного из моих читателей — Джун.

Она хотела узнать, как применить полужирный шрифт к определенной части строки в ячейке. Например, примените полужирный формат только к слову «Hello» из «Hello World».
И она хотела сделать это сразу для сотен ячеек.
Поскольку в Excel нет встроенных функций, которые могли бы это сделать, я создал простой макрос, который использует функцию Excel VBA InStr (вы увидите, как это сделать в примере 4 в этом руководстве).
Но сначала давайте посмотрим, как работает функция Excel VBA InStr!
Это руководство охватывает:
В этом руководстве я объясню использование функции InStr в Excel VBA и покажу несколько практических примеров, где ее можно использовать.
Функция Excel VBA InStr — Введение
Функция InStr находит позицию указанной подстроки в строке и возвращает первую позицию ее появления.
Например, если вы хотите найти положение «x» в «Excel», использование функции Excel VBA InStr вернет 2.
Синтаксис функции InStr
InStr( [Start], String1, String2, [Compare] )
- [Start] – (необязательный аргумент) это целочисленное значение, которое сообщает функции InStr начальную позицию, с которой она следует начать искать.
Например, если я хочу, чтобы поиск начинался с самого начала, я ввожу значение 1. Если я хочу, чтобы он начинался с третьего символа и далее, я буду использовать 3. Если опущено, берется значение по умолчанию 1. - Строка1 — это основная строка (или родительская строка), в которой вы хотите выполнить поиск. Например, если вы ищете позицию x в Excel, строка 1 будет «Excel».
- String2 — это подстрока, которую вы ищете. Например, если вы ищете позицию x в Excel, String2 будет x.
- [Сравнить] — (необязательный аргумент) Вы можете указать одно из следующих трех значений для аргумента [сравнить]:
- vbBinaryCompare — Это будет выполнять сравнение символов. Например, если вы ищете «x» в «Excel», он вернет 2, но если вы ищете «X» в «Excel», он вернет 0, поскольку X в верхнем регистре. Вы также можете использовать 0 вместо vbBinaryCompare. Если аргумент [Сравнить] опущен, он используется по умолчанию.

- vbTextCompare — это будет выполнять текстовое сравнение. Например, если вы ищете «x» или «X» в Excel, он вернет 2 в обоих случаях. Этот аргумент игнорирует регистр букв. Вы также можете использовать 1 вместо vbTextCompare.
- vbDatabaseCompare — используется только для Microsoft Access. Он использует информацию из базы данных для выполнения сравнения. Вы также можете использовать 2 вместо vbDatabaseCompare.
- vbBinaryCompare — Это будет выполнять сравнение символов. Например, если вы ищете «x» в «Excel», он вернет 2, но если вы ищете «X» в «Excel», он вернет 0, поскольку X в верхнем регистре. Вы также можете использовать 0 вместо vbBinaryCompare. Если аргумент [Сравнить] опущен, он используется по умолчанию.
Дополнительные примечания к функции Excel VBA InStr:
- InStr — это функция VBA, а не функция рабочего листа. Это означает, что вы не можете использовать его на рабочем листе.
- Если String2 (подстрока, позицию которой вы ищете) пуста, функция вернет значение аргумента [Start].
- Если функция InStr не может найти подстроку в основной строке, она вернет 0.
Теперь давайте рассмотрим пример использования функции Excel VBA InStr
Пример 1. Поиск позиции с самого начала
В этом примере я буду использовать функцию InStr, чтобы найти позицию «V» в «Excel VBA» с самого начала.

Код для этого будет следующим:
Sub FindFromBeginning() Dim Position как целое число Позиция = InStr(1, "Excel VBA", "V", vbBinaryCompare) Позиция сообщения Конец суб
Когда вы запустите этот код, он покажет окно сообщения со значением 7, которое является позицией «V» в строке «Excel VBA».
Пример 2 – Поиск позиции с начала второго слова
Предположим, я хочу найти позицию «the» в предложении – «Быстрая коричневая лиса перепрыгивает через ленивую собаку»
Однако я хочу поиск начинать со второго слова и далее.
В этом случае нам нужно изменить аргумент [Начало], чтобы убедиться, что он указывает позицию, с которой начинается второе слово.
Вот код, который это сделает:
Sub FindFromSecondWord() Dim Position как целое число Position = InStr(4, "Быстрая коричневая лиса перепрыгивает через ленивую собаку", "the", vbBinaryCompare) Позиция сообщения End Sub
Этот код покажет окно сообщения со значением 32, поскольку мы указали начальную позицию как 4.
Следовательно, он игнорирует первое «The» и находит второе «the» в предложении.Если вы хотите сделать его более динамичным, вы можете улучшить код, чтобы он автоматически игнорировал первое слово.
Вот расширенный код, который сделает это:
Sub FindFromSecondWord() Dim StartingPosition как целое число Dim Position как целое число StartingPosition = InStr(1, "Быстрая коричневая лиса перепрыгивает через ленивую собаку", " ", vbBinaryCompare) Position = InStr(StartingPosition, "Быстрая коричневая лиса перепрыгивает через ленивую собаку", "the", vbBinaryCompare) Позиция сообщения End Sub
Этот код сначала находит позицию символа пробела и сохраняет ее в переменной StartingPosition.
Затем он использует эту переменную в качестве начальной позиции для поиска слова «the».
Следовательно, он возвращает 32 (это начальная позиция «the» после первого слова).
Пример 3 – Поиск позиции @ в адресе электронной почты
Вы можете легко создать пользовательскую функцию для поиска позиции @ в адресе электронной почты с помощью функции Excel VBA InStr.

Вот код для создания пользовательской функции:
Функция FindPosition(Ref As Range) As Integer Dim Position как целое число Позиция = InStr(1, Ref, "@") FindPosition = Позиция Завершить функцию
Теперь вы можете использовать эту пользовательскую функцию как любую другую функцию рабочего листа. Он примет ссылку на ячейку в качестве входных данных и даст вам позицию @ в ней.
Точно так же вы можете создать пользовательскую функцию для поиска положения любой подстроки в основной строке.
Пример 4 – выделение части строки в ячейках
Это запрос, заданный Джун (мой читатель, который также вдохновил меня на написание этого руководства).
Вот пример данных в формате, который мне прислал июнь:
Ее запрос состоял в том, чтобы выделить числа за скобками жирным шрифтом.
Вот код, который я создал для этого:
Sub Bold() Dim rCell As Range Dim Char как целое число Для каждой rCell в выборе CharCount = Лен(rCell) Символ = InStr(1, rCell, "(") rCell.
Characters(1, Char - 1).Font.Bold = True
Следующая ячейка
End Sub Приведенный выше код использует цикл For Each для прохождения каждой из выбранных ячеек. Он определяет положение символа открывающей скобки с помощью функции InStr. Затем он меняет шрифт текста перед скобкой.
Чтобы использовать этот код, вам нужно скопировать и вставить модуль в редакторе VB.
После того, как вы скопировали код, выберите ячейки, в которых вы хотите сделать это форматирование, и запустите макрос (как показано ниже).
Вам также могут понравиться следующие учебники по Excel VBA:
- Функция Excel VBA SPLIT.
- Функция VBA TRIM.
- Полное руководство по циклам Excel VBA.
- Руководство для начинающих по использованию цикла For Next в Excel VBA.
- Как создать и использовать надстройку Excel.
- Как объединить несколько книг в одну книгу Excel.
- Как подсчитать цветные ячейки в Excel.
- Полезные примеры макросов Excel VBA для начинающих.

- Как сортировать данные в Excel с помощью VBA (пошаговое руководство)
VBA InStr и InStrRev — как использовать
Как следует из названия Функция VBA InStr ищет подстроку, встроенную в другую строку, и затем возвращается в исходное положение.
Если он не может найти строку внутри родительской строки, он возвращает 0. Это очень важная функция среди строковых функций в VBA. Вероятно, это лучшая функция для выполнения операций поиска строк в VBA.
В этом посте я объясню функции InStr и InStrRev в VBA на примерах:Содержание
Синтаксис функции VBA Instr:
Синтаксис Instr следующий:
Instr(start) , parent_string, substring, [сравнить] )Здесь «начало» означает позицию, с которой должен начинаться поиск. Это необязательный параметр, и если он опущен, то поиск строки начинается с позиции 1 st внутри «родительской_строки»
«родительская_строка» — это строка, внутри которой следует искать «подстроку».

«подстрока» — это строка, которая должна быть найдена внутри «родительской_строки».
«сравнить» определяет алгоритм сравнения, по которому должен выполняться поиск Это также необязательный параметр. В сложных случаях параметр сравнения может иметь одно из следующих значений:
Значение параметра
Описание
VBBINARYCOMPARE ОПРЕДЕЛИТ, что будет сравниваться. Это значение по умолчанию. vbTextCompare Указывает, что сравнение должно быть сравнением текста с текстом. vbDatabaseCompare Указывает на использование региональных настроек базы данных для сравнения, а не прямого текста. Несколько важных моментов о функции Instr:
- Если какая-либо из строк, например, «parent_string» или «substring», равна Null .
Затем оператор VBA Instr возвращает Null и, следовательно, может привести к поломке кода. Итак, прежде чем передавать какое-либо значение в функцию Instr, проверьте, является ли значение допустимым или нет. Кроме того, убедитесь, что вы выполнили правильную обработку ошибок в коде. - Возвращает параметр «начало», если параметр «подстрока» пуст.
- Возвращает 0, если «подстрока» отсутствует внутри «parent_string».
- Если значение параметра «start» больше, чем длина «parent_string», то функция Instr также возвращает 0.
InStr("Excel-Trick", "Trick")вернет результат 7, поскольку строка «Trick» начинается с седьмой позиции внутри «parent_string», т. е. «Excel-Trick».2.
InStr("Excel-Trick", "c")даст 3, так как символ «c» сначала стоит на третьей позиции внутри «parent_string».3.
InStr(4, "Excel-Trick", "c")приведет к 10, так как здесь мы начинаем поиск «c» с 4-го символа -го , и, следовательно, Instr дает нам позицию второй «c» (Excel-Tri c k) в «parent_string».
4.
InStr("Alligator", "z")приведет к 0, так как внутри родительской строки нет символа «z».5.
InStr(1, "Аллигатор", "а")приведет к 6, так как строчная буква «а» присутствует в позиции 6 внутри слова «Аллигатор».6.
InStr(1, "Alligator", "a", vbTextCompare)приведет к 1, так как здесь мы использовали ‘vbTextCompare’, который игнорирует разницу между символами верхнего и нижнего регистра.Использование vbTextCompare — не лучший способ:
vbTextCompare — небезопасный вариант для использования при работе со строками, нечувствительными к регистру. Причина этого в том, что во многих случаях это может привести к вводящим в заблуждение результатам при обработке некоторых символов:
Например:
InStr(1,"Ætna","et",vbTextCompare)приводит к 1, потому что символ «Æ» является латинским символом, обозначающим «et». И, следовательно, vbTextCompare рассматривает «Æ» как «et», такое поведение vbTextCompare вводит в заблуждение.
Таким образом, в тех случаях, когда вы имеете дело с символами, нечувствительными к регистру, как в примере 6, лучшим способом будет:
InStr( LCase("Alligator"), LCase ("a"))Здесь Функция LCase преобразует обе строки в символы нижнего регистра, а оператор InStr приводит к 1.
Функция обратного поиска строки в VBA: InStrRev
Функция InStrRev аналогична функции VBA InStr, с той лишь разницей, что она начинает поиск «подстроки» внутри «parent_string» от конца к началу.
Синтаксис InStrRev следующий:
InStrRev (parent_string, substring, [start], [compare])Здесь также ‘parent_string’ относится к строке, в которой должна быть найдена ‘substring’ .
«подстрока» — это строка, которую нужно искать внутри «родительской_строки».
«старт» снова является необязательным параметром, который определяет, с какой позиции следует начать поиск.
Параметр «сравнить» относится к типу сравнения, например: vbBinaryCompare, vbTextCompare и
vbDatabaseCompare.


Только для Microsoft Access.
Строковое выражение, поиск в котором выполняется.
Проверьте правильность имени файла
Print Right(s, 4) ' Печатает WXYZ
Debug.Print Mid(s, 1, 2) ' Печатает AB
Debug.Print Mid(s, 6, 4) ' Печатает 7789
End Sub
Print Left(s, InStr(s, " ") - 1)
")(1)
' Проверьте правильность номера
Debug.Print num >= 16 And num <= 31
End Sub
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


Она размножает пробелы с учетом ширины командной строки.
Функция работает только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово?
Например, если я хочу, чтобы поиск начинался с самого начала, я введу значение 1. Если я хочу, чтобы он начинался с третьего символа и далее, я буду использовать 3. Если не указано, будет использовано значение по умолчанию 1.
Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub
Text =
Возвращает 0, если текст не найден. В противном случае он возвращает позицию символа, в которой находится текст.
Чтобы сделать тест нечувствительным к регистру, читайте ниже.
Использует информацию в базе данных для выполнения сравнения.
Я лично помещаю это в начало любого модуля, который имеет дело с текстом, потому что меня никогда не волнуют различия регистров.
Value, "Dr.") > 0 Тогда
Диапазон("C2").Value = "Доктор"
Конец, если
End Sub 
Если этот параметр опущен, поиск начинается с позиции первого символа. Если start содержит Null, возникает ошибка. Аргумент start требуется, если указано сравнение .
Вместо того, чтобы возвращать позицию символа первого вхождения одной строки в другую, InStrB возвращает позицию в байте.
раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.
Типы методов сравнения показаны на следующем изображении.
вручную, как показано на следующем рисунке.

В выводе виден только лист «Данные». Остальные четыре листа скрыты.
Чтобы устранить эту проблему, укажите аргумент «сравнить» «vbTextCompare».
Значение по умолчанию — 1.
Он сортирует, начиная с конца строки (справа налево), из которой мы ищем доступную для поиска строку. Читать далее поиск справа налево.
В этой статье мы покажем вам, как найти определенные строки в другой заданной строке, используя VBA в Excel.
Но если вы хотите запустить нечувствительный к регистру InStr , вы можете передать аргумент здесь, чтобы выполнить определенное сравнение. Этот аргумент может принимать следующие значения:



ниже).

В нашем примере мы хотели выяснить, содержит ли наша основная строка « Счастье — это выбор » слово « выбор » или нет. При этом мы получаем результат Match found .
Например, если вы хотите найти « Профессор » в любой ячейке строки и получить в качестве результата « Профессор », просто передайте « Профессор » в качестве значения вместо « Доктор ». в 4 строке макроса и « Профессор » вместо « Доктор 9″0297 » в 5-й строке макроса и соответственно определить номер диапазона ячеек.

Например, если я хочу, чтобы поиск начинался с самого начала, я ввожу значение 1. Если я хочу, чтобы он начинался с третьего символа и далее, я буду использовать 3. Если опущено, берется значение по умолчанию 1.
Следовательно, он игнорирует первое «The» и находит второе «the» в предложении.
Characters(1, Char - 1).Font.Bold = True
Следующая ячейка
End Sub 

Затем оператор VBA Instr возвращает Null и, следовательно, может привести к поломке кода. Итак, прежде чем передавать какое-либо значение в функцию Instr, проверьте, является ли значение допустимым или нет. Кроме того, убедитесь, что вы выполнили правильную обработку ошибок в коде.

