Содержание
- Функция InStr
- Синтаксис
- Параметры
- Возвращаемые значения
- Примечания
- Пример
- См. также
- Поддержка и обратная связь
- Функция InStr
- Примеры
- VBA Excel. Функция InStr (синтаксис, параметры, примеры)
- Описание функции InStr
- Синтаксис, параметры, значения
- Синтаксис функции InStr
- Параметры функции InStr
- Значения аргумента «compare»
- Excel функция INSTR (VBA)
- Описание
- Синтаксис
- Аргументы или параметры
- Возвращаемое значение
- Примечание
- Применение
- Тип функции
- Пример (как функция VBA)
- Строковые функции (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
Возвращает значение типа Variant ( Long), определяющее положение первого вхождения одной строки в другую.
Instr ([ начало, ] строка1, строка2[ , сравнение] )
Функция InStr имеет следующие аргументы:
Необязательный аргумент. Числовое выражение, которое задает начальное положение для каждого поиска. Если аргумент не задан, поиск начинается с первого символа. Если аргумент начало содержит значение NULL, возникает ошибка. Если задан аргумент сравнение, аргумент начало является обязательным.
Обязательный аргумент. Представляет собой строковое выражение, в котором выполняется поиск.
Обязательный аргумент. Искомое строковое выражение.
Необязательный аргумент. Определяет тип сравнение строк. Если сравнение имеет null, возникает ошибка. Если этот параметр опущен, тип сравнения определяется параметром сравнения. Укажите допустимый LCID (LocaleID), который будет использовать в сравнении правила для конкретного локали.
Совет: В Access 2010 построитель выражений включает функцию IntelliSense, которая указывает требуемые аргументы.
Аргумент compare может принимать следующие значения.
Выполняется сравнение с помощью параметра инструкции Option Compare.
Выполняется двоичное сравнение.
Выполняется текстовое сравнение.
Только в Microsoft Office Access 2007. Выполняется сравнение на основе сведений из базы данных.
строка1 является пустой
строка1 равна NULL
строка2 является пустой
строка2 равна NULL
строка2 не найдена
строка2 найдена в строке1
Позиция найденного соответствия
Функция InStrB используется с байтовыми данными, содержащимися в строке. Функция InStrB возвращает позицию байта, а не позицию знака первого вхождения одной строки в другую.
Примеры
Использование функции InStr в выражении. Функцию InStr можно использовать в любых выражениях. Например, если требуется определить позицию первой точки ( .) в поле, которое содержит IP-адрес (IPAddress), можно использовать функцию InStr для его поиска:
Функция InStr проверяет каждое значение в поле IPAddress и возвращает позицию первой точки. Следовательно, если значение первого октета IP-адреса равно 10., функция возвращает значение 3.
Можно использовать другие функции, использующие результат функции InStr, для извлечения значения октета IP-адреса, который предшествует первой точке, например:
В этом примере функция InStr(1,[IPAddress],».») возвращает позицию первой точки. В результате вычитания 1 определяется количество знаков, предшествующих первой точке, в данном случае — 2. Затем функция Left получает эти символы из левой части поля IPAddress, возвращая значение 10.
Использование функции InStr в коде VBA
Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
В данном примере функция InStr используется для получения позиции первого вхождения одной строки в другую.
Источник
VBA Excel. Функция InStr (синтаксис, параметры, примеры)
Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.
Описание функции InStr
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.
Синтаксис, параметры, значения
Синтаксис функции InStr
Чаще всего в 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. |
* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.
Источник
Excel функция INSTR (VBA)
В этом учебном материале вы узнаете, как использовать Excel функцию INSTR с синтаксисом и примерами.
Описание
Microsoft Excel функция INSTR возвращает позицию первого вхождения подстроки в строку.
Функция INSTR — это встроенная в Excel функция, которая относится к категории строковых / текстовых функций. Её можно использовать как функцию VBA в Excel.
В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.
Синтаксис
Синтаксис функции INSTR в Microsoft Excel:
Аргументы или параметры
Константа VBA | Значение | Пояснение |
---|---|---|
vbUseCompareOption | -1 | Использует опцию сравнения |
vbBinaryCompare | 0 | Двоичное сравнение |
vbTextCompare | 1 | Текстовое сравнение |
Возвращаемое значение
Функция INSTR возвращает числовое значение. Первая позиция в строке — 1. Если подстрока в строке не найдена, функция INSTR вернет 0.
Примечание
- При обнаружении местоположения substring в string функция INSTR выполняет поиск с учетом регистра.
Применение
- Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Тип функции
Пример (как функция VBA)
Функцию INSTR можно использовать только в коде VBA в Microsoft Excel.
Давайте взглянем на некоторые примеры Excel функции INSTR чтобы понять, как использовать Excel функцию INSTR в коде Excel VBA:
Источник
Строковые функции (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 ) не отображаются.
Источник
Определение первого вхождения одной строки в другую с помощью функции 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 байта.
В этом учебном материале вы узнаете, как использовать Excel функцию INSTR с синтаксисом и примерами.
Описание
Microsoft Excel функция INSTR возвращает позицию первого вхождения подстроки в строку.
Функция INSTR — это встроенная в Excel функция, которая относится к категории строковых / текстовых функций. Её можно использовать как функцию VBA в Excel.
В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.
Синтаксис
Синтаксис функции INSTR в Microsoft Excel:
InStr( [start], string, substring, [compare] )
Аргументы или параметры
- start
- Необязательно. Это начальная позиция для поиска. Если этот параметр не указан, поиск начнется с позиции 1.
- string
- Строка для поиска.
- substring
- Подстрока, которую вы хотите найти.
- compare
- Необязательно. Это тип сравнения, который нужно выполнить. Это может быть одно из следующих значений:
Константа VBA Значение Пояснение vbUseCompareOption -1 Использует опцию сравнения vbBinaryCompare 0 Двоичное сравнение vbTextCompare 1 Текстовое сравнение
Возвращаемое значение
Функция INSTR возвращает числовое значение. Первая позиция в строке — 1. Если подстрока в строке не найдена, функция INSTR вернет 0.
Примечание
- При обнаружении местоположения
substring
вstring
функция INSTR выполняет поиск с учетом регистра.
Применение
- Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Тип функции
- Функция VBA
Пример (как функция VBA)
Функцию INSTR можно использовать только в коде VBA в Microsoft Excel.
Давайте взглянем на некоторые примеры Excel функции INSTR чтобы понять, как использовать Excel функцию INSTR в коде Excel VBA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
InStr(«Куй железо пока горячо», «К») Результат: 1 ‘Показывает, что start по умолчанию равен 1, если не указан InStr(1, Куй железо пока горячо«, «К«) Результат: 1 InStr(1, Куй железо пока горячо», «к») Результат: 14 ‘Показывает, что поиск чувствителен к регистру InStr(1, «Куй железо пока горячо», «о») Результат: 10 InStr(15, «Куй железо пока горячо», «о») Результат: 18 InStr(1, «Куй железо пока горячо», «пока») Результат: 12 InStr(1, «Куй железо пока горячо», «Ж») Результат: 0 ‘Показывает, что возвращается, если подстрока не найдена |
Например:
Dim LPosition As Integer LPosition = InStr(15, «Куй железо пока горячо», «о») |
В этом примере переменная LPosition теперь будет содержать значение 18.
Если часто приходится работать с электронными таблицами, то настоятельно рекомендуется ознакомиться с макросами. Это микропрограммы, настроенные на автоматизацию выполнения определенных действий. Они позволяют значительно расширить возможности как самого 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, при каких условиях и как он будет осуществляться.
Есть еще множество других волшебных функций, используемых для написания макросов, и мы обязательно познакомим вас с ними в следующий раз.
Оцените качество статьи. Нам важно ваше мнение:
На чтение 12 мин. Просмотров 18.1k.
Функция VBA InStr является одной из наиболее часто используемых функций в VBA. Он используется для нахождения текста внутри строки и действительно отлично справляется с работой.
Тем не менее, она часто используется, чтобы помочь извлечь часть строки, и эту задачу она выполняет плохо.
Если вы обнаружили, что извлечение текста в VBA является болезненным процессом, тогда читайте дальше. Эта статья покажет вам более простой и лучший способ, используя три реальных примера!
Содержание
- Краткое руководство к статье
- Краткая справка
- Введение
- Когда VBA InStr, Left, Right и Mid полезны
- Работа со строками различной длины
- Использование функции VBA InStr с Mid
- Функция Split
- Пример 1: Получение части имени файла
- Пример 2: диапазон IP-адресов
- Пример 3. Проверьте правильность имени файла
- Заключение
Краткое руководство к статье
В следующей таблице приведено краткое руководство к тому, что рассматривается в этой статье.
Строка | Тип | Задача | Как |
1234ABC334 | Фиксированный размер | Оставить слева 4 символа | Left(s,4) |
1234ABC334 | Фиксированный размер | Оставить справа 3 символа |
Right(s,3) |
1234ABC334 | Фиксированный размер | Оставить 5, 6, 7 символы | Mid(s,5,3) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить имя | Split(s,» «)(0) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить отчество |
Split(s,» «)(1) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить фамилию |
Split(s,» «)(2) |
«Иван Петрович Сидоров» |
Переменный размер |
Оставить фамилию |
Dim v As Variant v = Split(s, » «) lastname= v(UBound(v)) |
Краткая справка
Чтобы узнать больше об элементах, упомянутых в статье, перейдите по следующим ссылкам:
- Если вы хотите узнать больше о функциях InStr или InStrRev, пожалуйста, прочитайте Поиск в строке.
- Если вы хотите узнать больше о функциях Mid, Left или Right, посмотрите раздел Извлечение части строки.
- Для получения дополнительной информации о функции Split проверьте Строка в массив, используя Split.
- Оператор Like включен в Сравнение строк с шаблоном
Я использую Debug.Print в моих примерах. Он печатает значения в Immediate Window, которое вы можете просмотреть, нажав Ctrl + G (или выберите View-> Immediate Window)
Введение
В этой статье я собираюсь показать вам лучший способ извлечения символов из строки, чем использование функции VBA InStr с Left, Right или Mid.
Эта статья разбита следующим образом:
- Раздел 1: Как извлечь из строк фиксированного размера.
- Раздел 2: Как извлечь из строк переменного размера.
- Раздел 3: Как извлечь из строки переменного размера, используя функцию Split.
- Разделы с 4 по 6: некоторые примеры из реальной жизни.
Когда VBA InStr, Left, Right и Mid полезны
Если вы хотите проверить, содержит ли строка значение, InStr подходит для этой работы. Если вы хотите сделать простое извлечение, то отлично подойдут Left, Right и Mid.
Использование InStr для проверки, содержит ли строка текст
В следующем примере мы проверяем, содержит ли ФИО «Петрович». Если возвращаемое значение InStr больше нуля, то строка содержит значение, которое мы проверяем.
' Проверьте, содержит ли строка Петрович If InStr("Иван Петрович Сидоров", "Петрович") > 0 Then Debug.Print "Найдено" End If
Извлечение с Left, Right и Mid
Функция Left используется для получения символов слева от строки.
Функция Right используется для получения символов справа от строки.
Функция Mid используется для середины строки. Она такая же, как
Left, за исключением того, что вы даете ему стартовую позицию.
Sub IzvlechTekst() Dim s As String: s = "ABCD-7789.WXYZ" Debug.Print Left(s, 2) ' Печатает AB Debug.Print Left(s, 4) ' Печатает ABCD Debug.Print Right(s, 2) ' Печатает YZ Debug.Print Right(s, 4) ' Печатает WXYZ Debug.Print Mid(s, 1, 2) ' Печатает AB Debug.Print Mid(s, 6, 4) ' Печатает 7789 End Sub
Эти три функции работают нормально, если требуемый текст всегда одинакового размера и в одном и том же месте. Для других сценариев они требуют использования InStr, чтобы найти определенную позицию в строке. Это усложняет их использование.
Используйте Left, Right или Mid, когда символы всегда будут в одной и той же позиции.
Работа со строками различной длины
Многие из строк, с которыми вы имеет дело, разной длины. Простой пример — когда у вас есть дело со списком имен. Длина строки и требуемая часть (например, имя) могут каждый раз отличаться. Например:
Brooke Hilt
Pamela Jurado
Zack Kinzel
Eddy Wormley
Kaitlyn Rainer
Jacque Trickett
Kandra Stanbery
Margo Hoppes
Berenice Meier
Garrett Hyre
(Если вам нужен случайный список имен, попробуйте этот генератор случайных имен)
Использование функции VBA InStr с Left
В следующем примере мы собираемся получить имя из строки. В этой строке первое имя — это имя перед первым пробелом.
Мы используем функцию VBA InStr, чтобы получить позицию первого пробела. Мы хотим получить все символы до пробела. Мы вычитаем одну из позиции, так как это дает нам позицию последней буквы имени.
Sub PoluchitImya() Dim s As String, lPosition As Long s = "John Henry Smith" ' Печатает John lPosition = InStr(s, " ") - 1 Debug.Print Left(s, lPosition) s = "Lorraine Huggard" ' Печатает Lorraine lPosition = InStr(s, " ") - 1 Debug.Print Left(s, lPosition) End Sub
Давайте посмотрим на первый пример в приведенном выше коде. Первый пробел находится в позиции 5. Мы вычтем 1, что дает нам позицию 4. Это позиция последней буквы John, т.е.
Затем мы даем 4 функции Left, и она возвращает первые четыре символа, например, «John»
Мы можем выполнить ту же задачу в одной строке, передав возвращаемое значение из InStr в функцию Left.
Dim s As String s = "John Henry Smith" ' Печатает John Debug.Print Left(s, InStr(s, " ") - 1)
Использование функции VBA InStr с Right
В этом примере мы получим последнее слово в строке, то есть Smith. Мы можем использовать функцию InStrRev. Это то же самое, что InStr, за исключением того, что поиск выполняется с конца строки.
Важно отметить, что InStrRev дает нам позицию с начала строки. Поэтому нам нужно использовать его немного иначе, чем мы использовали InStr и Left.
Sub PoluchitFamiliyu() Dim s As String: s = "John,Henry,Smith" Dim Position As Long, Length As Long Position = InStrRev(s, ",") Length = Len(s) ' Печатает Smith Debug.Print Right(s, Length - Position) ' Альтернативный метод. Печатает Smith - делает в одну строку Debug.Print Right(s, Len(s) - InStrRev(s, ",")) End Sub
Как работает приведенный выше пример:
- Мы получаем позицию последнего пробела, используя InStrRev: 11
- Мы получаем длину строки: 16.
- Вычитаем позицию из длины: 16-11 = 5
- Мы даем 5 функции Right и возвращаем Smith
Использование функции VBA InStr с Mid
В следующем примере мы получим «Henry» из строки. Слово, которое мы ищем, находится между первым и вторым пробелом.
Мы будем использовать функцию Mid здесь.
Sub PoluchitVtoroeImya() Dim s As String: s = "John Henry Smith" Dim firstChar As Long, secondChar As Long Dim count As Long ' Найти пробел плюс 1. Результат 6 firstChar = InStr(s, " ") + 1 ' Найти 2-й пробел. Результат 11 secondChar = InStr(firstChar, s, " ") ' Получить число символов. Результат 5 count = secondChar - firstChar ' Печатает Henry Debug.Print Mid(s, firstChar, count) End Sub
Как видите, это сложно сделать и требует немного усилий, чтобы выяснить. Нам нужно найти первое место. Тогда нам нужно найти второе место. Затем мы должны вычесть одно из другого, чтобы дать нам количество символов, которые нужно взять.
Если у вас есть строка с большим количеством слов, то это может быть очень сложно. К счастью для нас, гораздо проще было извлечь символы из строки. Это называется функцией Split.
Функция Split
Мы можем использовать функцию Split для выполнения приведенных выше примеров. Функция Split разбивает строку на массив. Тогда мы можем легко получить доступ к каждому элементу.
Давайте попробуем те же три примера еще раз, и на этот раз мы будем использовать Split.
Dim s As String: s = "John Henry Smith" Debug.Print Split(s, " ")(0) ' John Debug.Print Split(s, " ")(1) ' Henry Debug.Print Split(s, " ")(2) ' Smith
Ого! Какая разница с использованием Split. Как это работает:
- Функция Split разбивает строку везде, где есть пробел.
- Каждый элемент помещается в массив, начиная с нуля.
- Используя номер местоположения, мы можем получить доступ к элементу массива.
В следующей таблице показано, как может выглядеть массив после использования Split.
Примечание: первая позиция в массиве равна нулю. Наличие нулевых массивов является стандартным в языках программирования.
0 | 1 | 2 |
John | Henry | Smith |
В приведенном выше коде мы разделяем строку каждый раз, когда ее используем. Мы также можем разделить строку один раз и сохранить ее в переменной массива. Тогда мы можем получить к нему доступ, когда захотим.
Sub SplitName() Dim s As String: s = "John Henry Smith" Dim arr() As String arr = Split(s, " ") Debug.Print arr(0) ' John Debug.Print arr(1) ' Henry Debug.Print arr(2) ' Smith End Sub
Если вы хотите узнать больше о массивах, я написал о них целую статью под названием «Полное руководство по использованию массивов в Excel VBA».
В следующих разделах мы рассмотрим примеры из реальной жизни. Вы увидите преимущество использования Split вместо функции InStr.
Пожалуйста, не стесняйтесь попробовать это сами. Это отличный способ учиться, и вы можете повеселиться, пытаясь понять их (или, может быть, только у меня так!)
Пример 1: Получение части имени файла
Представьте, что мы хотим извлечь числа из следующих имен файлов
«VB_23476_Val.xls»
«VV_987_Val.txt»
«VZZA_12223_Val.doc»
Это похоже на пример, где мы получаем второй элемент. Чтобы получить значения здесь, мы используем подчеркивание (то есть «_»), чтобы разбить строку. Смотрите пример кода ниже:
Sub PoluchitNomer() ' Печатает 23476 Debug.Print Split("VB_23476_Val.xls", "_")(1) ' Печатает 987 Debug.Print Split("VV_987_Val.txt", "_")(1) ' Печатает 12223 Debug.Print Split("ABBZA_12223_Val.doc", "_")(1) End Sub
В реальном мире вы обычно читаете такие строки из разных ячеек. Допустим, эти имена файлов хранятся в ячейках от А1 до А3. Мы немного изменим приведенный выше код:
Sub ChitatNomera() Dim c As Range For Each c In Range("A1:A3") ' Разделите каждый элемент по мере его прочтения Debug.Print Split(c, "_")(1) Next c End Sub
Пример 2: диапазон IP-адресов
Пример здесь взят из вопроса на веб-сайте StackOverflow.
У пользователя есть строка с IP-адресом в формате «BE-ABCDDD-DDS 172.16.23.3».
Он хочет, чтобы IP в диапазоне от 172,16 до 172,31 был действительным. Так например:
- «BE-ABCDDD-DDS 172.16.23.3» действителен
- «BE-ABCDDD-DDS 172.25.23.3» действителен
- «BE-ABCDDED-DDS 172.14.23.3» не действителен
- «BE-ABCDDDZZ-DDS 172.32.23.3» не действителен
Вот как бы я это сделал. Сначала я разбил строку по периодам. Число, которое мы ищем, находится между первым и вторым периодом. Поэтому это второй пункт. Когда мы разделяем строку, она помещается на первую позицию в массиве (помните, что массив начинается с нулевой позиции).
Полученный массив будет выглядеть так:
0 | 1 | 2 | 3 |
BE-ABCDDD-DDS 172 | 31 | 23 | 3 |
Код ниже показывает, как это сделать.
Sub IPAdd() ' Проверьте номер, чтобы проверить разные IP-адреса Dim s1 As String: s1 = "BE-ABCDDD-DDS 172.31.23.3" ' Разбить строку, используя символ точки Dim num As Long num = Split(s1, ".")(1) ' Проверьте правильность номера Debug.Print num >= 16 And num <= 31 End Sub
Пример 3. Проверьте правильность имени файла
В этом последнем примере мы хотим проверить правильность имени файла. Есть три правила.
- Должно заканчиваться на .pdf
- Он должен содержать АА
- Он должен содержать 1234 после А
В следующих таблицах показаны некоторые допустимые и недействительные элементы:
Имя файла | Статус |
AA1234.pdf | Действителен |
AA_ljgslf_1234.pdf | Действителен |
AA1234.pdf1 | Недействительно — не заканчивается на .pdf |
1234 AA.pdf | Недействительно — АА не до 1234 |
12_AA_1234_NM.pdf | Действителен |
Сначала мы сделаем это, используя функции InStr и Right.
Sub IspInstr() Dim f As String: f = "AA_1234_(5).pdf" ' Сначала найдите АА, так как 1234 должен идти после Dim lPos As Long: lPos = InStr(f, "AA") ' Ищите 1234 и убедитесь, что последние четыре символа - .pdf Debug.Print InStr(lPos, f, "1234") > 0 And Right(f, 4) = ".pdf" End Sub
Этот код очень грязный. К счастью для нас, у VBA есть Сравнение с шаблоном. Мы можем проверить шаблон строки без необходимости искать элементы и позиции и т.д. Мы используем оператор Like в VBA для сопоставления с шаблоном. Пример ниже показывает, как это сделать.
Sub IspSravnenie() Dim f As String: f = "AA_1234_(5).pdf" ' Определить шаблон Dim pattern As String: pattern = "*AA*1234*.pdf" ' Проверьте каждый элемент по шаблону Debug.Print f Like pattern ' ИСТИНА End Sub
В приведенном выше примере звездочка в шаблоне относится к любому количеству символов.
Давайте разберем этот паттерн * AA * 1234 * .pdf
*- любая группа символов
AA — точные символы AА
*- любая группа символов
1234 — точные символы 1234
*- любая группа символов
.pdf — точные символы .pdf
Чтобы показать, что это работает правильно, давайте попробуем это на всех именах примеров в таблице.
Sub IspSravnenieTest() ' Создать коллекцию имен файлов Dim coll As New Collection coll.Add "AA1234.pdf" coll.Add "AA_ljgslf_1234.pdf" coll.Add "AA1234.pdf1" coll.Add "1234 AA.pdf" coll.Add "12_AA_1234_NM.pdf" ' Определить шаблон Dim pattern As String: pattern = "*AA*1234*.pdf" ' Проверьте каждый элемент по шаблону Dim f As Variant For Each f In coll Debug.Print f Like pattern Next f End Sub
На выходе:
ИСТИНА
ИСТИНА
ЛОЖЬ
ЛОЖЬ
ИСТИНА
Чтобы узнать больше о сопоставлении с шаблоном и ключевом слове Like, ознакомьтесь с этой публикацией.
Заключение
InStr и InStrRev действительно полезны только для простых задач, таких как проверка наличия текста в строке.
Left, Right и Mid полезны, когда положение текста всегда одинаково.
Функция Split — лучший способ извлечь переменную строку.
При попытке проверить формат строки, которая не является фиксированной по размеру, ключевое слово Like (т.е. Сопоставление с образцом) обычно обеспечивает более простое решение.
Microsoft is the industry leader in providing user applications which offer both functionality and power. The Microsoft office applications are a great example of this. The office suite of applications are not merely standard spreadsheets and word processors, but are in fact powerful applications. Due to the inclusion of Visual Basic for Applications, or VBA, within their suite of office applications, programs like Excel are far more powerful than a mere spreadsheet.
This tutorial will show you how to access the power of VBA in Excel. It will show you how to use the VBA instr function to search within a target string to confirm the presence of a string within the target string. The tutorial assumes that you have some basic Excel skills and abilities. To get the most out of this tutorial, it is highly advisable that you have completed a course like Excel Course (Basic and Advanced), which will ensure you have a solid foundation in general Excel.
How the to access VBA functions and commands
Depending on the function, you can access VBA commands within Excel via the cell itself or via the VBA editor. To enter a VBA function into the cell, you need to begin in the cell where you would like the answer to appear. You start by typing the equal sign followed by the function you would like to call. To run the IF function for example, you can select a cell and then type “=IF”. The VBA function syntax will appear as a guide to show you how to use the function. Take a look at the example code below:
Some VBA functions are not available within the cell, but must be entered via the VBA editor. To access the VBA editor, you can either add an ActiveX control to your worksheet, or you can access the editor directly using the developer tab on the menu. To access it directly, click the developer tab and then click Visual Basic. This will open the editor.
For this tutorial, we will add a command button to our worksheet to validate email addresses.
The VBA instr function allows you to search a target string to see if the string contains a specific search string. Instr is short for “in String”. The parameters of the instr function include the following:
inst( [start], [string1], [string2], [compare])
The start parameter allows you to specify where the search should start within the string. This parameter is an optional parameter. If unspecified then the search will begin at the first character within the cell.The string 1 parameter indicates the target string to be searched and must be specified. The string 2 parameter indicates the string to be searched for and must be specified. The compare parameter is optional and can be used to specify how the strings will be compared.
Practical VBA instr example
For the purposes of this tutorial, we will create a spreadsheet that contains the names, email addresses and phone numbers of a group of people.
This is what your initial spreadsheet should look like:
For the tutorial, let us assume we want to ensure that all of the data we have entered into the email field is valid. We know that a valid email address must contain an “@” sign within the address. You could manually check each field, but in a spreadsheet with a few thousand email addresses, this may not be the fastest or the most practical solution.
This is where the VBA instr function can help us to ensure that all emails look like valid email addresses. We can use the VBA instr function to search the email address string to ensure that the string contains an @ character. To use this function in our worksheet we need to add an ActiveX control to insert the function within the worksheet. We will add a command button for our spreadsheet. To add the command button, choose the developer tab, choose insert and choose the command button. Double click the command button to enter the VBA editor.
First you need to declare a few variables so that we can refer to the cells within the worksheet. If you don’t know what variables are or how to declare them then a course like macros and VBA excel from udemy will teach you how to work with variables within VBA.
You can use the following code to declare the variables:
You then need to assign initial values to the variables and use a for statement within VBA to move through the range within your worksheet. You also need to assign a value to your email_Add variable using the variables to determine the row and column of the worksheet.
Now that you have a value to compare, you can use the instr function. The instr function would be formulated as follows:
The above function would initialize the instr function. It would begin the search of the string at the very first character within the cell because the first parameter has not been specified. It would search the field we called email_Add which is given the value of each cell in our range. The function would check if the cell contained an @ character. If it finds the @ character it will return the position where the @ character is found. If it doesn’t find the @ character, then it returns a zero.
Now that we have compared the string with the search string and we have a result we need to write the code which will tell our command button what to do if it finds the character as well as what to do if the character is not found. The code to achieve this would look as follows:
The result of the above code in our worksheet would be as follows:
The code we used includes a number of VBA functions other than instr. For training on how to implement and use other advanced VBA functions within Excel, the ultimate excel VBA course will teach you how to harness the power of VBA within your own spreadsheets.
В этой статье разберем работу со строками в VBA на примерах функций InStr,LCASE,UCase,Left,Right,Mid,LTrim,RTrim,Trim,Len,Replace,Space,StrComp,String,StrReverse. Строки – это последовательность символов, которая может состоять либо из алфавитов, цифр, специальных символов, либо из всех них. Переменная называется строкой, если она заключена в двойные кавычки “”.
Описание функции InStr
InStr – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую. Она возвращает значение типа Variant (Long).
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.
Источник: http://vremya-ne-zhdet.ru/vba-excel/funktsiya-instr/
Операции со строками
Для данных типа String существует только одна операция – конкатенация (объединение). Например, результатом операции конкатенации трех строковых значений «Петр» & ” ” & «Иванович» будет строка «Петр Иванович». Возможно также использование другого оператора для операции конкатенации, например: «десяти» + «тысячник». Разница между этими выражениями состоит в том, что в первом случае операндами могут быть значения любого типа (они просто будут преобразовываться в строковые), а во втором – оба операнда должны иметь тип String.
Для работы со строками существует большое количество функций (таблица. Функции работы со строками).
Источник: http://msk.edu.ua/ivk/Informatika/2_kurs/Z12/stroki_vba.php
Синтаксис
variablename = “string”
Источник: http://maxfad.ru/programmer/vba/357-rabota-so-strokami-v-vba-instr-lcase-ucase-left-right-mid-ltrim-rtrim-trim-len-replace-space-strcomp-string-strreverse.html
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim Var As Variant Var = “Microsoft VBScript” MsgBox (“Line 1 : ” & InStr(1, Var, “s”)) MsgBox (“Line 2 : ” & InStr(7, Var, “s”)) MsgBox (“Line 3 : ” & InStr(1, Var, “f”, 1)) MsgBox (“Line 4 : ” & InStr(1, Var, “t”, 0)) MsgBox (“Line 5 : ” & InStr(1, Var, “i”)) MsgBox (“Line 6 : ” & InStr(7, Var, “i”)) MsgBox (“Line 7 : ” & InStr(Var, “VB”)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : 6
Line 2 : 0
Line 3 : 8
Line 4 : 9
Line 5 : 2
Line 6 : 16
Line 7 : 11
Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо.
InStrRev
Функция InStrRev возвращает первое вхождение одной строки в другую строку. Поиск происходит справа налево.
Источник: http://maxfad.ru/programmer/vba/357-rabota-so-strokami-v-vba-instr-lcase-ucase-left-right-mid-ltrim-rtrim-trim-len-replace-space-strcomp-string-strreverse.html
Синтаксис, параметры, значения
Синтаксис функции 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 |
Источник: http://vremya-ne-zhdet.ru/vba-excel/funktsiya-instr/
LCASE
Функция LCase возвращает строку после преобразования введенной строки в строчные буквы.
Источник: http://maxfad.ru/programmer/vba/357-rabota-so-strokami-v-vba-instr-lcase-ucase-left-right-mid-ltrim-rtrim-trim-len-replace-space-strcomp-string-strreverse.html
Применение
- Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Источник: http://itsteps.ru/excel_funkcija_instr.html
Mid
Mid функция возвращает указанное количество символов из заданной входной строки.
Источник: http://maxfad.ru/programmer/vba/357-rabota-so-strokami-v-vba-instr-lcase-ucase-left-right-mid-ltrim-rtrim-trim-len-replace-space-strcomp-string-strreverse.html
См. также
- Функции (Visual Basic для приложений)
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник: http://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/instr-function
Технология выполнения
- Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
- Создайте форму аналогично приведенному рисунку.
- Пропишите обработчик события кнопки ОК.
- Откомпилируйте программу.
- Запустите форму на выполнение.
Форма примера в режиме конструктора и в рабочем состоянии
Private Sub CommandButton1_Click()Dim a As StringDim b As StringDim c As StringDim k As StringDim d As StringDim n As Integera=TextBox1.Textn=Len(a)Label7.Caption=«длина первой строки равна» & n & «символам»c=TextBox3.Textk=Ucase(с)Label8.Caption=kb=TextBox2.Textd=a + ” ” + bLabel9.Caption=dEnd Sub
Источник: http://msk.edu.ua/ivk/Informatika/2_kurs/Z12/stroki_vba.php
LTrim
Функция Ltrim удаляет пробелы с левой стороны строки.
Источник: http://maxfad.ru/programmer/vba/357-rabota-so-strokami-v-vba-instr-lcase-ucase-left-right-mid-ltrim-rtrim-trim-len-replace-space-strcomp-string-strreverse.html