Функция Excel VBA InStr - объяснение с примерами

Содержание

Вчера я получил письмо от одного из моих читателей - Джун.

Она хотела знать, как применить жирный шрифт к определенной части строки в ячейке. Например, выделите жирным шрифтом только слово «Hello» из «Hello World».

И она хотела сделать это сразу для сотен ячеек.

Поскольку в Excel нет встроенных функций, которые могли бы это сделать, я создал простой макрос, который использует Функция Excel VBA InStr (вы увидите, как это сделать, в примере 4 этого руководства).

Но сначала давайте посмотрим, как работает функция Excel VBA InStr!

Функция Excel VBA InStr

В этом руководстве я объясню использование функции InStr в Excel VBA и увижу несколько практических примеров, где ее можно использовать.

Функция Excel VBA InStr - Введение

Функция InStr находит позицию указанной подстроки в строке и возвращает первую позицию ее появления.

Например, если вы хотите найти положение «x» в «Excel», использование функции Excel VBA InStr вернет 2.

Синтаксис функции InStr

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

Дополнительные примечания к функции Excel VBA InStr:

  • InStr - это функция VBA, а не функция рабочего листа. Это означает, что вы не можете использовать его на рабочем листе.
  • Если String2 (то есть подстрока, позицию которой вы ищете) пуста, функция вернет значение аргумента [Start].
  • Если функция InStr не может найти подстроку в основной строке, она вернет 0.

Теперь давайте посмотрим на пример использования функции Excel VBA InStr.

Пример 1 - Поиск позиции с самого начала

В этом примере я буду использовать функцию InStr, чтобы найти позицию «V» в «Excel VBA» с самого начала.

Код для этого будет:

Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Когда вы запустите этот код, он покажет окно сообщения со значением 7, которое является позицией «V» в строке «Excel VBA».

Пример 2 - Поиск позиции от начала второго слова

Предположим, я хочу найти позицию "the" в предложении - "Быстрая коричневая лисица перепрыгивает через ленивую собаку".

Однако я хочу, чтобы поиск начинался со второго слова и далее.

В этом случае нам нужно изменить аргумент [Start], чтобы убедиться, что он указывает позицию, с которой начинается второе слово.

Вот код, который это сделает:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, «Быстрая коричневая лиса перепрыгивает через ленивую собаку», «the», vbBinaryCompare) MsgBox Position End Sub

Этот код покажет окно сообщения со значением 32, поскольку мы указали начальную позицию как 4. Следовательно, он игнорирует первый «The» и находит второй «the» в предложении.

Если вы хотите сделать его более динамичным, вы можете улучшить код, чтобы он автоматически игнорировал первое слово.

Вот расширенный код, который сделает это:

Sub FindFromSecondWord () Dim StartingPosition как целое число Dim Position As Integer StartingPosition = InStr (1, «Быстрая коричневая лиса перепрыгивает через ленивую собаку», «», vbBinaryCompare) Position = InStr (StartingPosition, «Быстрая коричневая лиса перепрыгивает через ленивого dog "," the ", vbBinaryCompare) MsgBox Position End Sub

Этот код сначала находит позицию символа пробела и сохраняет ее в переменной StartingPosition.

Затем он использует эту переменную в качестве начальной позиции для поиска слова «the».

Следовательно, он возвращает 32 (что является начальной позицией «the» после первого слова).

Пример 3 - Определение позиции @ в адресе электронной почты

Вы можете легко создать настраиваемую функцию для поиска позиции @ в адресе электронной почты с помощью функции Excel VBA InStr.

Вот код для создания настраиваемой функции:

Функция FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, «@») FindPosition = Position End Function

Теперь вы можете использовать эту настраиваемую функцию как любую другую функцию рабочего листа. Он примет ссылку на ячейку в качестве входных данных и выдаст вам позицию @ в ней.

Точно так же вы можете создать настраиваемую функцию для поиска позиции любой подстроки в основной строке.

Пример 4 - Выделение части строки внутри ячеек

Это вопрос, который задал Джун (мой читатель, который также вдохновил меня на написание этого руководства).

Вот пример данных в формате, который мне прислал июнь:

Ее запрос заключался в том, чтобы выделить числа вне скобок жирным шрифтом.

Вот созданный мной код, который делает это:

Sub Bold () Dim rCell As Range Dim Char As Integer For Each rCell In Selection CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

В приведенном выше коде цикл For Each используется для просмотра каждой из выделенных ячеек. Он определяет позицию символа открывающей скобки с помощью функции InStr. Затем он изменяет шрифт текста перед скобкой.

Чтобы использовать этот код, вам нужно скопировать и вставить модуль в редакторе VB.

После того, как вы скопировали вставленный код, выберите ячейки, в которых вы хотите выполнить это форматирование, и запустите макрос (как показано ниже).

Вам также могут понравиться следующие руководства по Excel VBA:

  • Функция Excel VBA SPLIT.
  • Функция VBA TRIM.
  • Полное руководство по циклам Excel VBA.
  • Руководство для начинающих по использованию цикла For Next Loop в Excel VBA.
  • Как создать и использовать надстройку Excel.
  • Как объединить несколько книг в одну книгу Excel.
  • Как посчитать цветные ячейки в Excel.
  • Полезные примеры макросов Excel VBA для начинающих.
  • Как отсортировать данные в Excel с помощью VBA (пошаговое руководство)

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave