Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.
InStr – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую. Она возвращает значение типа Variant (Long).
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.
Синтаксис, параметры, значения
Синтаксис функции InStr
Полный вариант:
InStr([start], string1, string2, [compare]) |
Сокращенный вариант:
Чаще всего в VBA Excel используется сокращенный вариант функции со значениями необязательных параметров по умолчанию.
Параметры функции InStr
Параметр | Описание | Значение по умолчанию |
---|---|---|
start | Необязательный аргумент.* Числовое выражение, которое задает начальную позицию для поиска. | 1 |
string1 | Обязательный аргумент. Строковое выражение, в котором выполняется поиск. | – |
string2 | Обязательный аргумент. Искомое строковое выражение. | – |
compare | Необязательный аргумент. Задает тип сравнения строк. | –1** |
* Если задан аргумент compare, аргумент start является обязательным.
** Если аргумент compare не указан, используется значение инструкции Option Compare, заданное на уровне модуля. Если инструкция Option Compare в начале модуля отсутствует, используется ее значение по умолчанию – 0 (двоичное сравнение).
Если параметр start или параметр compare содержит значение NULL, возникает ошибка.
Значения аргумента «compare»
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | Сравнение с помощью параметра инструкции Option Compare. |
vbBinaryCompare | 0 | Двоичное (бинарное) сравнение.* |
vbTextCompare | 1 | Текстовое сравнение.* |
vbDatabaseCompare | 2 | Сравнение на основе сведений из базы данных. Только для Microsoft Access. |
* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.
Значения функции InStr
Если | Возвращаемое значение |
---|---|
string2 найдена в string1 | Позиция первого найденного соответствия. |
string2 не найдена в string1 | 0 |
string2 является пустой | start |
string2 равна Null | Null |
string1 является пустой | 0 |
string1 равна Null | Null |
start больше длины string1 | 0 |
Примеры использования в VBA Excel
Пример 1
Самый простой пример:
Sub Test1() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «Фернандо») MsgBox x ‘Здесь x будет равен 9 End Sub |
Пример 2
В этом примере, используя одинаковые строки, в которых выполняется поиск, и искомые подстроки, применим разные виды сравнения – двоичное (бинарное) и текстовое, и посмотрим на результаты.
Sub Test2() Dim x As Variant x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 0) MsgBox x ‘Здесь x будет равен 36 (поиск с учетом регистра символов) x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 1) MsgBox x ‘Здесь x будет равен 18 (поиск без учета регистра символов) End Sub |
Обратите внимание: несмотря на то, что начало поиска мы задали с 10 символа, номер позиции первого вхождения считается с начала строки, в которой выполняется поиск.
Пример 3
В этом примере посмотрим на результаты посимвольного и побайтового сравнения, опять же используя одинаковые строки и искомые подстроки.
Sub Test3() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 4 x = InStrB(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 7 End Sub |
Результат 7 при побайтовом сравнении получен для кодировки, у которой один символ составляет 2 байта.
Содержание
- Функция InStr
- Синтаксис
- Параметры
- Возвращаемые значения
- Примечания
- Пример
- См. также
- Поддержка и обратная связь
- InStr function
- Syntax
- Settings
- Return values
- Remarks
- Example
- See also
- Support and feedback
- Строковые функции (Visual Basic)
- Пример: UCase
- Пример: LTrim
- Пример: Mid
- Пример: Len
- Пример: InStr
- Пример: формат
Функция InStr
Возвращает значение типа Variant (Long), определяющее положение первого вхождения одной строки в другую.
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Синтаксис
InStr([ начало ], строка1, строка2, [ сравнение ])
В синтаксисе функции InStr используются следующие аргументы:
Часть | Описание |
---|---|
начало | Необязательно. Числовое выражение, которое задает начальную точку для поиска. Если этот аргумент опущен, поиск начинается с первого знака строки. Если аргумент начало содержит значение Null, возникает ошибка. Аргумент начало является обязательным, если задан аргумент сравнение. |
строка1 | Обязательно. Строковое выражение, поиск в котором выполняется. |
строка2 | Обязательно. Искомое строковое выражение. |
сравнение | Необязательно. Определяет тип сравнения строк. Если параметр compare имеет значение 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 используется для получения позиции первого вхождения одной строки в другую.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
InStr function
Returns a Variant (Long) specifying the position of the first occurrence of one string within another.
Interested in developing solutions that extend the Office experience across multiple platforms? Check out the new Office Add-ins model. Office Add-ins have a small footprint compared to VSTO Add-ins and solutions, and you can build them by using almost any web programming technology, such as HTML5, JavaScript, CSS3, and XML.
Syntax
InStr([ start ], string1, string2, [ compare ])
The InStr function syntax has these arguments:
Part | Description |
---|---|
start | Optional. Numeric expression that sets the starting position for each search. If omitted, search begins at the first character position. If start contains Null, an error occurs. The start argument is required if compare is specified. |
string1 | Required. String expression being searched. |
string2 | Required. String expression sought. |
compare | Optional. Specifies the type of string comparison. If compare is Null, an error occurs. If compare is omitted, the Option Compare setting determines the type of comparison. Specify a valid LCID (LocaleID) to use locale-specific rules in the comparison. |
Settings
The compare argument settings are as follows.
Constant | Value | Description |
---|---|---|
vbUseCompareOption | -1 | Performs a comparison by using the setting of the Option Compare statement. |
vbBinaryCompare | 0 | Performs a binary comparison. |
vbTextCompare | 1 | Performs a textual comparison. |
vbDatabaseCompare | 2 | Microsoft Access only. Performs a comparison based on information in your database. |
Return values
If | InStr returns |
---|---|
string1 is zero-length | 0 |
string1 is Null | Null |
string2 is zero-length | start |
string2 is Null | Null |
string2 is not found | 0 |
string2 is found within string1 | Position at which match is found |
start > string2 | 0 |
The InStrB function is used with byte data contained in a string. Instead of returning the character position of the first occurrence of one string within another, InStrB returns the byte position.
Example
This example uses the InStr function to return the position of the first occurrence of one string within another.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Строковые функции (Visual Basic)
В следующей таблице перечислены функции, предоставляемые Visual Basic в Microsoft.VisualBasic.Strings классе для поиска строк и управления ими. Их можно рассматривать как встроенные функции Visual Basic; то есть вам не нужно вызывать их как явные члены класса, как показано в примерах. В классе доступны System.String дополнительные методы, а в некоторых случаях — дополнительные.
Метод платформа .NET Framework | Описание |
---|---|
Asc, AscW | Возвращает значение, Integer представляющее код символа, соответствующий символу. |
Chr, ChrW | Возвращает знак, связанный с указанным кодом знака. |
Filter | Возвращает массив (с индексацией от нуля), который содержит подмножество массива типа String , выделяемое согласно указанным условиям фильтрации. |
Format | Возвращает строку, отформатированную в соответствии с инструкциями, содержащимися в формате выражения String . |
FormatCurrency | Возвращает выражение в формате денежной единицы с использованием символа денежной единицы, определенного в системной панели управления. |
FormatDateTime | Возвращает строковое выражение, представляющее значение даты и времени. |
FormatNumber | Возвращает выражение в формате числа. |
FormatPercent | Возвращает выражение в виде процента (умноженное на 100) с символом % в конце. |
InStr | Возвращает целое число, указывающее начальную позицию первого вхождения одной строки в другую. |
InStrRev | Возвращает позицию первого вхождения одной строки в другую, начиная с правого конца строки. |
Join | Возвращает строку, образуемую путем соединения нескольких подстрок, содержащихся в массиве. |
LCase | Возвращает строку или символ, преобразованные в нижний регистр. |
Left | Возвращает строку, содержащую указанное число знаков с левой стороны строки. |
Len | Возвращает целое число, содержащее количество символов в строке. |
LSet | Возвращает выровненную по левому краю строку запрашиваемой длины, содержащую указанную строку. |
LTrim | Возвращает строку, содержащую копию указанной строки без пробелов в начале. |
Mid | Возвращает строку, содержащую указанное число символов из строки. |
Replace | Возвращает строку, в которой указанная подстрока заданное число раз заменена другой подстрокой. |
Right | Возвращает строку, содержащую указанное число знаков с правой стороны строки. |
RSet | Возвращает выровненную по правому краю строку, содержащую указанную строку, настроенную под указанную длину. |
RTrim | Возвращает строку, содержащую копию указанной строки без пробелов в конце. |
Space | Возвращает строку, состоящую из указанного числа пробелов. |
Split | Возвращает одномерный массив (с индексацией от нуля), содержащий указанное число подстрок. |
StrComp | Возвращает -1, 0 или 1 в зависимости от результата сравнения строк. |
StrConv | Возвращает строку, преобразованную как указано. |
StrDup | Возвращает строку или объект, состоящие из указанного знака, повторенного определенное количество раз. |
StrReverse | Возвращает строку, содержащую те же знаки, что и в заданной строке, но в противоположном порядке. |
Trim | Возвращает строку, содержащую копию указанной строки без начальных или конечных пробелов. |
UCase | Возвращает строку или знак, содержащий указанную строку, преобразованную в верхний регистр. |
С помощью оператора Option Compare можно указать, сравниваются ли строки с помощью порядка сортировки текста без учета регистра, определяемого языковым стандартом системы ( Text ) или внутренним двоичным представлением символов ( Binary ). Метод сравнения текста по умолчанию — Binary .
Пример: UCase
В данном примере функция UCase используется для возврата строки в верхнем регистре.
Пример: LTrim
В данном примере функция LTrim используется, чтобы убрать пробелы в начале, а функция RTrim — чтобы убрать пробелы в конце строковой переменной. Функция Trim в примере используется для удаления обоих типов пробелов.
Пример: Mid
В этом примере функция используется Mid для возврата указанного количества символов из строки.
Пример: Len
В данном примере Len используется для возврата числа знаков в строке.
Пример: InStr
В данном примере функция InStr используется для возврата позиции первого вхождения одной строки в другую.
Пример: формат
В данном примере показаны различные способы использования функции Format для форматирования значений с применением как форматов String , так и определенных пользователем форматов. Фактическое отображение системой разделителя даты ( / ), разделителя времени ( : и индикаторов AM/PM ( t и tt ) зависит от региональных параметров, применяемых кодом. При отображении времени и даты в среде разработки используется короткий формат времени и даты региональных установок кода.
Для языков, использующих 24-часовой формат, индикаторы AM/PM ( t и tt ) не отображаются.
Источник
Если часто приходится работать с электронными таблицами, то настоятельно рекомендуется ознакомиться с макросами. Это микропрограммы, настроенные на автоматизацию выполнения определенных действий. Они позволяют значительно расширить возможности как самого Excel, так и конкретного пользователя.
Одно из ключевых понятий языка программирования VBA (а именно на нем осуществляется написание макросов) является функция. Это блок программы, который обрабатывает определенные данные и возвращает какой-то конкретный результат.
Одной из таких функций является InStr. Давайте подробно рассмотрим ее основные аргументы, а также реальные примеры, описывающие ее использование в реальной жизни.
Но давайте сначала узнаем, зачем макросы нужны? Потому что многие начинающие пользователи Excel нередко ошибочно считают, что эта функция излишняя. Но на самом деле, они просто очень мало работали с этой программой. Как только увеличить продолжительность взаимодействия с электронными таблицами, оказывается, что мы часто выполняем тысячи однотипных действий, которые компьютерная программа может выполнить буквально за несколько секунд. Это здорово экономит время и силы, а также разгружает мозг.
Итак, давайте разберем функцию InStr более подробно.
Содержание
- Описание функции InStr
- Синтаксис функции InStr, параметры, значения
- Синтаксис функции InStr
- Параметры функции InStr
- Значения аргумента «сравнение»
- Примеры использования функции InStr в VBA Excel
- Пример 1
- Пример 2
- Пример 3
- Выводы
Описание функции InStr
С помощью функции InStr пользователь может находить местонахождение первого вхождения какого-то текста в другой. Возвращаемый тип данных, осуществляемый этой функцией – Variant.
Сфера применения этой функции очень широкая, и без нее невозможно обойтись при использовании других функций, таких как Left, Mid, Right. Кроме этого, она может применяться для поиска какого-то текста.
Есть похожая функция в языке VBA, которая называется InStrB. Ее отличие заключается в том, что обрабатываются байтовые данные. С ее помощью можно узнать расположение байта, а не символа. Более подробно вы можете ознакомиться с этой функцией в третьем примере.
Преимущества функции InStr следующие:
- Возможность быстро обрабатывать огромные массивы данных буквально за несколько секунд. Когда человек осуществляет поиск вручную, только кажется, что все делает компьютер. НА самом деле, он выполняет лишь часть работы. Но все основное делается самим человеком. например, нужно вбить строку поиска, нажимать на стрелочки, чтобы искать определенное по счету вхождение и так далее. Это очень затратно. В случае же с функцией VBA InStr можно добиться этой цели с помощью макросов: с помощью формулы передать в функцию аргументы, а потом дальше использовать получившийся результат в другой функции. Таким образом автоматизируется огромное количество действий, которые при прочих равных пришлось бы выполнять вручную.
- Экономия времени. Есть сотрудники, которые за счет макросов смогли значительно увеличить эффективность своей работы и фактически не работать большую часть времени. Все, что им потребовалось – один раз написать скрипт, а потом просто передавать ему нужные параметры. И функция InStr является важной составляющей этого процесса, поскольку со строками приходится иметь дело постоянно, если человек активно использует электронные таблицы.
- Экономия ресурсов, в том числе, и интеллектуальных. Это тоже очень важный пункт. Ни для кого не секрет, что постоянное выполнение однотипных действий невероятно утомляет. Следовательно, функция InStr позволяет избавиться от бренной ноши постоянного поиска значений вручную, особенно если для этого используется формула.
Кстати! Использование функции InStr дает возможность значительно улучшить творческие способности!
Как? Очень просто. Исследователи доказали, что основной фактор, который мешает творческому процессу – это излишнее количество рутинных действий. В определенных пределах они помогают сосредоточиться (например, когда человек рисует что-то на автомате), но через некоторое время соответствующие нейронные связи начинают терять в скорости проведения нервных импульсов. Следовательно, на другие задачи уже сил не хватает. А творчество – это интеллектуально затратный процесс.
Если же использовать функцию InStr, можно освободить себя от этой бренной участи и уделить внимание другим важным вещам и создать не просто красивую, а функциональную таблицу, которая работает полностью автоматически и при этом содержит все необходимые данные.
А теперь давайте после лирического отступления все же перейдем к рассмотрению синтаксиса функции InStr.
Синтаксис функции InStr, параметры, значения
Синтаксис функции InStr
Если говорить об этой функции в общем, она записывается таким образом.
InStr([начало], строка1, строка2, [сравнение])
Но этот вариант полный, но очень часто используется сокращенная разновидность этой функции, содержащая всего два аргумента.
InStr(строка1, строка2)
Как правило, именно сокращенный вариант используется на практике. Нельзя сказать, что в ней вообще нет первого и последнего аргумента, просто автоматически применяются те значения, которые определены как «по умолчанию».
Параметры функции InStr
Давайте более подробно опишем, что означает каждый из аргументов:
- Начало. Этот параметр не является обязательным. В него записывается число, которым записывается изначальная позиция, с которой начинается поиск.
- Строка1. Этот аргумент нужно не забывать указывать. Это непосредственно тот текст, в котором нужно искать.
- Строка 2. Это то, что мы ищем.
- Сравнение. С помощью этого аргумента пользователь может задать способ, которым будут анализироваться и сопоставляться строки.
Важно учесть некоторые нюансы:
- Если пользователь записал последнее значение, то первое вводить обязательно.
- Если же параметр «Сравнение» в функции не прописан, то Эксель применяет значение по умолчанию (0 или другое при условии наличия инструкции Option Compare).
- Если пользователь укажет значение NULL в необязательные аргументы, то формула выдаст ошибку. Это нужно держать в уме.
Ну как? Сложно? Наверно, все же все просто. На первый взгляд может показаться, что запомнить все это довольно тяжело. Но в практике мастерство оттачивается. Поэтому настоятельно рекомендуется потренироваться «в песочнице».
Значения аргумента «сравнение»
С помощью аргумента «сравнение» человек может задавать тип сравнения. Делается это через указание значения, выраженного в цифровом формате. Если в качестве значения этого аргумента используется 1, то параметр означает сравнивание двух показателей с использованием инструкции Option Compare.
Если этому аргументу присвоить значение 1, то функция осуществляет бинарное сравнение. Простыми словами, при этом типе осуществляется поиск значения с учетом регистра. В случае же с текстовым сравнением регистр не учитывается.
Каждое значение, возвращаемое функцией, говорит о выполнении одного из возможных условий:
- Позиция первого найденного соответствия. Если возвращается строка, аналогичная тому, что было обнаружено в самом первом случае, то поиск оказался успешным.
- 0. Это значение говорит о том, что поиск оказался неудачным. Простыми словами, не получилось в первой строке отыскать вторую. Также нередко можно встретить такую ошибку в ситуациях, когда при попытке поиска оказывается, что первая строка не содержит никаких значений или же значение, передающееся аргументу «начало», оказывается большим, чем длина первой строки.
- Такое же значение, которое передается аргументу «начало». Это говорит о том, что вторая строка не содержит никаких значений.
- NULL. Эта проблема возникает в ситуациях, когда или строка 1, или строка 2 содержит аналогичную ошибку. Чаще всего эта проблема случается, если пользователь неправильно указал диапазон (например, указал неправильный оператор диапазона). Также если вводится несколько пересекающихся диапазонов, то эта ошибка может возникать, если человек неправильно применил оператор диапазона (коим служит символ пробела).
В последнем случае нужно удостовериться в том, что для указания диапазона был использован знак двоеточия. Например, если используется диапазон от А1 до А10, то нужно его записывать, как А1:А10.
Если же нужно указать несколько непересекающихся друг между другом наборов ячеек, то используется символ точки с запятой (некоторые говорят, что используется запятая, но это неправильно). Например, правильный ввод такой: А1:А10;С1:С10.
Если же используется пробел, нужно убедиться в том, что диапазоны действительно пересекаются. Если они расположены независимо друг от друга, это может породить множество проблем. Поэтому нужно или заменить знак, разделяющий диапазоны, на точку с запятой, или изменить диапазоны так, чтобы они пересеклись в том или ином месте.
Ну и простой пример для наглядности. Предположим, у нас есть диапазоны a1: A5 C1: C3.
В этом случае ячейки никак не пересекаются. Соответственно, будет возвращено значение NULL. Следовательно, пользователь увидит после вычисления по формуле с использованием аргументов, возвращающих это значение, также NULL. Ведь невозможно выполнять поиск в тех ячейках, где нет нормального значения пусть даже числового (хотя формула InStr лучше подходит для поиска именно текстовых соответствий).
Если в Excel включена функция автоматической проверки ошибок, то рядом с ошибочной ячейкой будет находиться восклицательный знак. Если на него нажать, появится возможность выбрать подходящую под текущую проблему ситуацию.
Примеры использования функции InStr в VBA Excel
Существует множество применений функции InStr при разработке макросов. Давайте разберем три простых примера, чтобы было более наглядно, как можно использовать ее в реальных (или воображаемых) условиях
Пример 1
Этот пример создан специально для новичков, поскольку демонстрирует чисто использование функции InStr. Следовательно, он является наиболее простым.
Sub Test1()
Dim x As Variant
x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «Фернандо»)
MsgBox x
‘Здесь x будет равен 9
End Sub
Пример 2
Этот пример показывает, как можно использовать текстовое и бинарное сравнение для поиска соответствий, в которых регистр символов важен и нет. В этом кейсе для примера были использованы две строки с одинаковым содержимым, чтобы было проще наглядно показать, как Excel учитывает регистр символ или не учитывает его в макросах.
Sub Test2()
Dim x As Variant
x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 0)
MsgBox x
‘Здесь x будет равен 36 (поиск с учетом регистра символов)
x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 1)
MsgBox x
‘Здесь x будет равен 18 (поиск без учета регистра символов)
End Sub
Здесь мы видим, что в качестве начального значения обозначен десятый символ. Но несмотря на это первое вхождение анализируется, стартуя той строкой, в которой осуществляется анализ информации на предмет соответствия заданному значению.
Пример 3
А в этом случае осуществляется сравнение сравнений посимвольного и побайтового типов. Здесь также для большей наглядности мы использовали одинаковые строки и подстроки, которые будем искать. А вот и сам пример.
Sub Test 3()
Dim x As Variant
x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор»)
MsgBox x
‘Здесь x будет равен 4
x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор»)
MsgBox x
‘Здесь x будет равен 7
End Sub
Выводы
Таким образом, функция InStr в языке программирования VBA, который используется в макросах, имеет очень много применений. Она полезна, когда есть оромный массивы данных, который невозможно проанализировать вручную, а встроенные средства автоматизации типа поиска также отнимают много времени и сил.
По сути, эта функция и являет собой тот же самый поиск за тем лишь исключением, что можно заранее задать Excel, при каких условиях и как он будет осуществляться.
Есть еще множество других волшебных функций, используемых для написания макросов, и мы обязательно познакомим вас с ними в следующий раз.
Оцените качество статьи. Нам важно ваше мнение:
ixet Пользователь Сообщений: 132 |
#1 31.01.2020 09:54:15 Задача простейшая — найти слово в любом написании: Стол, СТОЛ, стол, сТОЛ и т.д.
|
||
Nordheim Пользователь Сообщений: 3154 |
#2 31.01.2020 09:57:02
Изменено: Nordheim — 31.01.2020 09:59:11 «Все гениальное просто, а все простое гениально!!!» |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#3 31.01.2020 09:58:00 Доброе время суток
) Изменено: Андрей VG — 31.01.2020 09:58:11 |
||
Kuzmich Пользователь Сообщений: 7998 |
#4 31.01.2020 10:11:06 Nordheim,
|
||
Nordheim Пользователь Сообщений: 3154 |
Kuzmich, Я сначала второй написал, затем в первый подставил. Дык что б наверняка Изменено: Nordheim — 31.01.2020 10:24:00 «Все гениальное просто, а все простое гениально!!!» |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#6 31.01.2020 11:02:00 Не понимаю зачем тут вообще приводить что-то к единому регистру — это затратная операция. Особенно если учесть, что InStr позволяет установить параметр, который будет игнорировать регистр:
vbTextCompare = поиск текста без учета регистра Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
ixet Пользователь Сообщений: 132 |
#7 31.01.2020 11:09:21 Спасибо, разобрался! Работают все варианты |
Функция VBA Instr проверяет, найдена ли строка текста в другой строке текста. Возвращает 0, если текст не найден. В противном случае он возвращает позицию символа, в которой находится текст.
Функция Instr выполняет точный Матчи. Вместо этого можно использовать оператор Like VBA для выполнения неточных совпадений / сопоставления с шаблоном с помощью подстановочных знаков.
Пример Instr
Следующий фрагмент кода ищет в строке «Искать в этой строке» слово «Искать». Функция Instr возвращает 1, потому что текст находится в первой позиции.
123 | Sub FindSomeText ()MsgBox InStr («Посмотри в этой строке», «Посмотри»)Конец подписки |
Этот второй пример возвращает 7, потому что текст находится начиная с 7-й позиции:
123 | Sub FindSomeText2 ()MsgBox InStr («Не смотри в эту строку», «Смотри»)Конец подписки |
Важный! Функция Instr деликатный случай по умолчанию. Это означает, что «взгляд» не будет совпадать с «взглядом». Чтобы сделать тест нечувствительным к регистру, читайте ниже.
Синтаксис Instr
Синтаксис функции Instr следующий:
1 | Instr ([начало], строка, подстрока, [сравнить]) |
[начало] (необязательно) — Этот необязательный аргумент — начальная позиция поиска. Введите 1, чтобы начать поиск с позиции 1 (или оставьте поле пустым). Введите 5, чтобы начать поиск с позиции 5. Важный! Функция INSTR вычисляет позицию символа, считая от 1 НЕ с позиции [начало].
нить — Строка текста для поиска.
подстрока — Строка текста, которую нужно найти в основной строке.
[сравнить] (необязательно) — По умолчанию Instr чувствителен к регистру. Установив этот аргумент, вы можете сделать Instr нечувствительным к регистру:
Аргумент vb Значение |
Целое число аргумента | Описание |
vbBinaryCompare |
0 |
(По умолчанию) с учетом регистра |
vbTextCompare |
1 |
Нечувствительный к регистру |
vbDatabaseCompare |
2 |
Только MS Access. Использует информацию из базы данных для сравнения. |
Начальная позиция Instr
Начальная позиция Instr позволяет вам указать позицию символа, с которой вы начнете поиск. Однако имейте в виду, что вывод Instr всегда будет отсчитывать от 1.
Здесь мы устанавливаем начальную позицию на 3, чтобы пропустить первую букву B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, «ABC ABC», «B»)Конец подписки |
Результат — 6, потому что второй B — шестой символ в строке.
Тест INSTR без учета регистра
По умолчанию VBA рассматривает «L» иначе, чем «l». Другими словами, VBA чувствителен к регистру. Это верно для всех текстовых функций. Чтобы сделать регистр VBA нечувствительным, установите для аргумента [compare] значение 1 или vbTextCompare.
123 | Общедоступная подпрограмма FindText_IgnoreCase ()MsgBox InStr (1, «Не смотри в эту строку», «смотри», vbTextCompare)Конец подписки |
В качестве альтернативы вы можете добавить Option Compare Text в верхнюю часть модуля кода:
12345 | Вариант Сравнить текстОбщедоступная подпрограмма FindText_IgnoreCase2 ()MsgBox InStr («Не смотри в эту строку», «смотри»)Конец подписки |
Option Compare Text повлияет на весь код в этом модуле. Я лично помещаю это в начало любого модуля, имеющего дело с текстом, потому что меня не волнуют различия в регистрах.
Функция InstrRev
Функция Instr выполняет поиск слева. Вместо этого вы можете искать справа, используя функцию InstrRev. Функция InstrRev работает аналогично функции Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev («Посмотри в этой строке», «Посмотри»)Конец подписки |
Как и функция Instr, она вернет 1, потому что в тексте есть только один экземпляр «Look». Но если мы добавим второй «Взгляд», вы увидите, что он возвращает положение самого правого «взгляда»:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev («Посмотрите в этой строке, Посмотрите», «Посмотрите»)Конец подписки |
Далее мы рассмотрим другие примеры Instr.
Примеры InString
Если строка содержит подстроку
Здесь мы будем использовать оператор If, чтобы проверить, содержит ли строка подстроку текста:
123456789 | Общедоступная подпрограмма FindSomeText ()Если InStr («Посмотри в этой строке», «посмотри») = 0, тоMsgBox «Нет совпадений»ЕщеMsgBox «Как минимум одно совпадение»Конец, еслиКонец подписки |
Найти текстовую строку в ячейке
Вы также можете найти строку в ячейке:
12345 | Sub Find_String_Cell ()Если InStr (Range («B2»). Value, «Dr.»)> 0, тоДиапазон («C2»). Значение = «Доктор»Конец, еслиКонец подписки |
Или прокрутите диапазон ячеек, чтобы проверить, содержат ли ячейки какой-либо текст:
12345678910 | Sub Search_Range_For_Text ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («b2: b6»)Если InStr (cell.Value, «Dr.»)> 0 Тогдаcell.Offset (0, 1) .Value = «Доктор»Конец, еслиСледующая ячейкаКонец подписки |
Найти позицию символа в строке
Этот код найдет позицию одного символа в строке и присвоит эту позицию переменной:
1234 | Sub Find_Char ()Dim n As Longn = InStr («Вот, посмотри сюда», «L»)Конец подписки |
Строка поиска для слова
Этот код будет искать в строке слово:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr («Вот, посмотри сюда», «Посмотри»)Если n = 0, тоMsgBox «Слово не найдено»ЕщеMsgBox «Слово найдено в позиции:» & nКонец, еслиКонец подписки |
Если переменная содержит строку
Этот код проверяет, содержит ли строковая переменная строку текста:
12345678 | Подпеременная_Contains_String ()Dim str As Stringstr = «Смотри сюда»Если InStr (str, «Here»)> 0, тоMsgBox «Вот нашел!»Конец, еслиКонец подписки |
Instr и левая функция
Instr можно использовать вместе с другими текстовыми функциями, такими как Left, Right, Len и Mid для обрезки текста.
С помощью функции Left вы можете вывести текст перед строкой текста:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = «Смотри сюда»n = InStr (str, «Здесь»)MsgBox Left (str, n — 1)Конец подписки |
Использование Instr в Microsoft Access VBA
Все приведенные выше примеры работают в Access VBA точно так же, как и в Excel VBA.
Чтобы узнать больше, прочитайте нашу статью: Текстовые функции VBA