Vba excel поиск в строке с конца

Определение первого вхождения одной строки в другую, начиная с конца строки, с помощью функции InStrRev (VBA Excel). Синтаксис, параметры, примеры.

InStrRev – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую, начиная с конца исходной строки.

Для поиска первого вхождения одной строки в другую с начала исходной строки используется функция InStr.

Функция InStrRev может быть незаменима при определении параметров функций Left, Mid и Right.

Синтаксис, параметры, значения

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

InstrRev(stringcheck, stringmatch, [start], [compare])

Параметры функции InStrRev

Параметр Описание Значение по умолчанию
stringcheck Обязательный аргумент. Строковое выражение, в котором выполняется поиск.
stringmatch Обязательный аргумент. Строковое выражение, которое необходимо найти.
start Необязательный аргумент. Числовое выражение, которое задает начальную позицию для поиска. -1*
compare Необязательный аргумент. Задает тип сравнения строк. 0

* Значение «-1» задает начало поиска с позиции последнего символа. Если параметр start содержит значение NULL, возникает ошибка.

Значения аргумента «compare»

Константа Значение Описание
vbUseCompareOption -1 Сравнение с помощью параметра инструкции Option Compare.
vbBinaryCompare 0 Двоичное (бинарное) сравнение.*
vbTextCompare 1 Текстовое сравнение.*
vbDatabaseCompare 2 Сравнение на основе сведений из базы данных. Только для Microsoft Access.

* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.

Значения функции InStrRev

Если Возвращаемое значение
длина stringcheck равна 0 0
значение stringcheck равно Null Null
длина stringmatch равна 0 start
значение stringmatch равно Null Null
аргумент stringmatch не найден в аргументе stringcheck 0
аргумент stringmatch найден в аргументе stringcheck позиция первого символа найденного совпадения
start больше длины stringcheck 0

Примеры использования в VBA Excel

Пример 1

Самый простой пример:

Sub Primer1()

Dim x

x = InStrRev(«болото, плот, оплот», «лот»)

MsgBox x  ‘Результат: 17

x = InStrRev(«болото, плот, оплот», «лото»)

MsgBox x  ‘Результат: 3

End Sub

Пример 2

Пример с использованием аргумента «compare»:

Sub Primer2()

Dim x

x = InStrRev(«Болото, Плот, Оплот», «Плот»)

MsgBox x  ‘Результат: 9

x = InStrRev(«Болото, Плот, Оплот», «Плот», , 1)

MsgBox x  ‘Результат: 16

End Sub

Пример 3

Извлечение краткого имени файла из полного имени:

Sub Primer3()

Dim s, x

s = «C:UsersEvgeniyDesktopТаймер.exe»

x = InStrRev(s, ««)

s = Mid(s, x + 1)

MsgBox s  ‘Результат: Таймер.exe

End Sub


In this Article

  • InStrRev Function
    • VBA InStrRev Find Substring
    • VBA InStrRev Starting Position
    • VBA InStrRev Case Sensitivity
    • VBA InStrRev Last Space
    • VBA InStrRev Second to Last Space
    • VBA InStrRev Return Filename

This tutorial will demonstrate how to use the InStrRev VBA function to find text from the right..

InStrRev Function

The VBA InStrRev function searches for the position of a substring inside a string. It returns the position counting from left to right but it performs the search from the end of the string to the beginning.

VBA InStrRev Find Substring

The VBA InStrRev function can be used the find the position of a substring inside a string.

Sub InStrRevExample_1()
MsgBox InStrRev("ABCABC", "C")           'Result is: 6
MsgBox InStrRev("ABCABC", "BC")          'Result is: 5
MsgBox InStrRev("La La Land", "L")       'Result is: 7
MsgBox InStrRev("La La Land", "La")      'Result is: 7
MsgBox InStrRev("La La Land", "La ")     'Result is: 4
MsgBox InStrRev("La La Land", "M")       'Result is: 0
End Sub

VBA InStrRev Starting Position

VBA InStrRev Function can start the search for a substring from an assigned position counted from left to right.

Sub InStrRevExample_2()
MsgBox InStrRev("La La Land", "L")         'Result is: 7
MsgBox InStrRev("La La Land", "L", 8)      'Result is: 7
MsgBox InStrRev("La La Land", "L", 7)      'Result is: 7
MsgBox InStrRev("La La Land", "L", 6)      'Result is: 4
MsgBox InStrRev("La La Land", "L", 4)      'Result is: 4
MsgBox InStrRev("La La Land", "L", 3)      'Result is: 1
End Sub

VBA InStrRev Case Sensitivity

VBA InStrRev Function by default is case sensitive. You can change that behavior to case insensitive using an optional parameter. In that case, you must also define the starting position of the search.

Sub InStrRevExample_3()
'InstrRev by default is case sensitive
MsgBox InStrRev("La La Land", "L")     'Result is: 7
MsgBox InStrRev("La La Land", "l")     'Result is: 0

'InstrRev can perform case insensitive searches
MsgBox InStrRev("La La Land", "L", -1, vbTextCompare)     'Result is: 7
MsgBox InStrRev("La La Land", "l", -1, vbTextCompare)     'Result is: 7
End Sub

VBA InStrRev Last Space

VBA InStrRev Function can find the position of the last space in a string.

Sub InStrRevExample_4()
MsgBox InStrRev("La La Land", " ")
'Result is: 6
MsgBox InStrRev("Leonardo da Vinci", " ")
'Result is: 12
MsgBox InStrRev("May the Force be with you", " ")
'Result is: 22

End Sub

VBA InStrRev Second to Last Space

VBA InStrRev function can find the position of the second to last space in a string. We can use VBA InStrRev function to find the last space in a string and then we can use again InStrRev with a new starting point to find the position of the second to last space

Sub InStrRevExample_5()
Dim LastPos As Integer

LastPos = InStrRev("May the Force be with you", " ")
MsgBox LastPos 'Result is: 22

Dim SecondLastPos As Integer

SecondLastPos = InStrRev("May the Force be with you", " ", LastPos - 1)
MsgBox SecondLastPos 'Result is: 17
'InStrRev started the search for space just before the last space
'It will find the second to last space because it searches from right to left
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

VBA InStrRev Return Filename

VBA InStrRev function can be used to easily return the filename from a string that contains the path and the filename. We will use InStrRev function with functions VBA Len and VBA Right.

VBA Len function returns the length of a string:

MsgBox Len("XBCX")      'Result is: 4

VBA Right function returns n characters from the end of a string:

MsgBox Right("ABCDE", 2)      'Result is: DE

We can use InStrRev function to find the last occurrence of “” in the pathname and use Len function to calculate the length of the filename. Right can then extract the filename.

Sub InStrRevExample_4()
Dim PathEx As String
PathEx = "C:MyFilesOtherUsefulFile.pdf"

Dim FilenameEx As String


FilenameEx = Right(PathEx, Len(PathEx) - InStrRev(PathEx, ""))
MsgBox FilenameEx 'Result is: UsefulFile.pdf

'Lets break down this code
MsgBox Len(PathEx)
'This is the length of the path name (31)


MsgBox InStrRev(PathEx, "")
'This is the position of the last  in string

MsgBox Len(PathEx) - InStrRev(PathEx, "")
'This is the length of the filename (14)
'The difference between the full length and the position of the last  in string
'(31-27=14)

'Now we know the length of the filename and of course it is at the end
'Right function is ideal for this situation
FilenameEx = Right(PathEx, Len(PathEx) - InStrRev(PathEx, ""))

End Sub

Excel VBA INSTRREV

VBA ИНСТРЕВ функция, как означает ‘В обратном порядке строки,’ возвращает позицию первого вхождения искомой строки (подстроки) в другую строку, начиная с конца строки (справа налево), из которой мы ищем искомую строку.

INSTRREV Функция начинает поиск искомой строки с конца, что нам нужно узнать, но считает позицию с начала. Потом, наконец, еще один INSTR Функция VBA (расшифровывается как «В строке») ищет строку в другой строке и возвращает позицию. Но эта функция начинает поиск с начала строки, из которой мы ищем искомую строку.

INSTRREV и INSTR встроены Строковая/текстовая функция VBAФункция VBAФункции VBA служат основной цели для выполнения определенных вычислений и возврата значения. Поэтому в VBA мы используем синтаксис для указания параметров и типа данных при определении функции. Такие функции называются пользовательскими функциями.Подробнее из MS Excel. Поэтому мы можем использовать их при написании любого макроса в редакторе Microsoft Visual Basic.

Оглавление

  • Excel VBA INSTRREV
    • Синтаксис
      • Возвращаемые значения
    • Как использовать функцию VBA INSTRREV?
    • Рекомендуемые статьи

VBA-INSTREV-функция

Синтаксис

Формула VBA INSTRREV

Как мы видим на изображении выше, существуют два обязательных и два необязательных аргумента.

  • StringCheck как строка: Это обязательный аргумент. Нам нужно указать искомое строковое выражение.
  • StringMatch как строка: Этот аргумент также является обязательным. Нам нужно указать искомое строковое выражение.
  • Начать как долго = -1: Это необязательный аргумент. Указываем числовое выражение. По умолчанию принимает значение -1, то есть поиск начинается с позиции последнего символа. Если мы укажем любое положительное значение, например 80, он начнет поиск с конца строки в этих 80 символах.
  • Сравнить как VbCompareMethod = vbBinaryCompare As Long: Этот аргумент является необязательным.

VBA CompareNumeric ExpressionIndicatesvbUseCompareOption-1 Выполняет сравнение, используя настройку инструкции Option Compare. Оператор Option Compare указывает метод сравнения строк модуля (двоичный, текстовый или базовый). Если модуль не включает оператор Option Compare, метод сравнения текста по умолчанию — Binary.vbBinaryCompare0. Выполняет двоичное сравнение. (С учетом регистра) vbTextCompare1 Выполняет текстовое сравнение. (без учета регистра)vbDatabaseCompare2Только Microsoft Access. Выполняет сравнение на основе информации в базе данных.

Мы можем указать следующие значения для этого аргумента.

Возвращаемые значения

  1. INSTRREV функция возвращает 0, если проверка строки имеет нулевую длину или соответствие строки не найдено или ‘начинать’ аргумент > длина совпадения строки.
  2. Эта функция возвращает ‘Нулевой’ если проверка строки или совпадение строки ‘Нулевой.’
  3. Если совпадение строки имеет нулевую длину, функция возвращается к начинать.
  4. Если при проверке строки найдено совпадение, функция возвращает позицию, в которой найдено совпадение.

Как использовать функцию VBA INSTRREV?

.free_excel_div{фон:#d9d9d9;размер шрифта:16px;радиус границы:7px;позиция:относительная;margin:30px;padding:25px 25px 25px 45px}.free_excel_div:before{content:»»;фон:url(центр центр без повтора #207245;ширина:70px;высота:70px;позиция:абсолютная;верх:50%;margin-top:-35px;слева:-35px;граница:5px сплошная #fff;граница-радиус:50%} Вы можете скачать этот шаблон Excel VBA INSTRREV здесь — VBA INSTRREV Шаблон Excel

Предположим, у нас есть данные о названиях фильмов и их режиссерах. Мы хотим разделить имена режиссеров.

VBA ИНСТРЕВ Пример 1

У нас есть данные в 1201 строке. Так что если мы будем делать эту задачу вручную, это займет много времени.

Чтобы сделать то же самое, мы будем использовать код VBAИспользование кода VBAКод VBA относится к набору инструкций, написанных пользователем на языке программирования приложений Visual Basic в редакторе Visual Basic (VBE) для выполнения определенной задачи.Подробнее. Шаги:

  • Нам нужно нажать на ‘Visual Basic’ Команда доступна в ‘Код’ Группа в «Разработчик» Tab, или мы можем нажать Alt+F11 чтобы открыть редактор Visual Basic.

VBA INSTRREV Пример 1-3

  • мы вставим модуль используя Меню «Вставить».

VBA INSTRREV Пример 1-4

  • Мы создадим подпрограмму с именем «Разделение имен».

VBA INSTRREV Пример 1-5

  • Нам нужно шесть переменных — одна для хранения значений ячеек, которыми мы будем манипулировать. Второй для хранения позиции первого пробела в строке, третий для хранения последнего пробела в строке, четвертый для хранения номера последней строки и пятый и шестой для строки и столбца, которые мы будем использовать для печати значений в соседних клетки.

VBA INSTRREV Пример 1-6

  • Нам нужно использовать следующий код, чтобы узнать последнюю использованную строку на листе.

VBA INSTRREV Пример 1-7

Этот код сначала выберет ячейку B1, а затем выберет последнюю использованную ячейку в том же столбце, а затем мы назначим номер строки ячейки переменной «LastRow».

  • Теперь, чтобы манипулировать всеми ячейками в столбце B, мы запустим цикл «для».

Пример 1-8

  • Мы будем хранить значения ячеек столбца B от строки 2 до строки 1201 одну за другой в переменной s, чтобы манипулировать ими.

Пример 1-9

  • Нам нужно установить значение параметра переменная «Столбец» до 3, так как нам нужно написать разделенные именаРазделить именаРазделить имя в Excel относится к разделению имен на два отдельных столбца. Он разбивает все имя на имя, фамилию и отчество. Мы можем разделить имена, используя несколько способов, таких как «метод текста в столбец» и «метод формулы».

Пример 1-10

  • Если строка состоит только из одного слова, в строке нет пробела. Затем нам нужна сама строка в качестве вывода. Для этого зададим условие с помощью Оператор «если и еще» со знаком звездочки (обозначающим один или несколько символов) следующим образом:

Пример 1-11

  • Если в строке есть пробел, мы хотим разделить строку. Чтобы сделать то же самое, мы использовали функции INSTR и INSTRREV чтобы узнать первую и последнюю космические позиции соответственно. Это поможет нам найти первое и последнее слово в строке соответственно.

Пример 1-12

Функция INSTR принимает следующий аргумент:

Формула VBA INSTR

Детали аргумента

  • Начинать: С какой позиции начинать.
  • Строка1: Нам нужно указать искомое строковое выражение.
  • Строка2: Нам нужно указать искомое строковое выражение.

По сравнению с методом VbCompareMethod: Указание метода сравнения. По умолчанию это бинарное сравнение.

  • Нам нужно использовать VBA ЛЕВЫЙ функция для извлечения левых символов из строки. Мы использовали ‘Последний космос-1‘, чтобы получить левые символы перед последним пробелом.

Мы должны использовать Функции ВПРАВО и ДЛИН. для извлечения правильных символов из строки после первого пробела.

Пример 1-13

Мы должны написать макрос. Теперь нам нужно запустить макрос с помощью F5 ключ.

Код:

Sub SplittingNames() Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range(«B1»).Select Selection.End(xlDown).Select LastRow = ActiveCell. Row For Row = 2 To LastRow s = Sheet1.Cells(Row, 2).Value Column = 3 If s Like «* *» Then FirstSpace = InStr(1, s, » «) LastSPace = InStrRev(s, » «) Sheet1.Cells(Row, Column).Value = Left(s, LastSPace — 1) Sheet1.Cells(Row, Column + 1).Value = Right(s, Len(s) — FirstSpace) Else Sheet1.Cells(Row, Column).Value = s End If Next End Sub

У нас уже есть результат.

Пример 1-14

Рекомендуемые статьи

Эта статья представляет собой руководство по VBA INSTRREV. Здесь мы обсудим использование функции VBA INSTRREV, примеров и загружаемого шаблона Excel. Ниже приведены некоторые полезные статьи Excel, связанные с VBA:

  • АСЦ в VBA
  • Вставить текстовое поле с помощью VBA

В VBA есть функция для поиска с конца строки:  
InStrRev Function  

          Description  

  Returns the position of an occurrence of one string within another, from the end of string.  

  Syntax  

  InstrRev(stringcheck, stringmatch[, start[, compare]])

  The InstrRev function syntax has these named arguments:  

  Part Description    
stringcheck Required. String expression being searched.    
stringmatch Required. String expression being searched for.    
start Optional. Numeric expression that sets the starting position for each search. If omitted, –1 is used, which means that the search begins at the last character position. If start contains    
Null, an error occurs.  

   compare Optional. Numeric value indicating the kind of comparison to use when evaluating substrings. If omitted, a binary comparison is performed. See Settings section for values.

В этом учебном материале вы узнаете, как использовать Excel функцию INSTRREV с синтаксисом и примерами.

Описание

Microsoft Excel функция INSTRREV возвращает позицию первого вхождения строки в другую строку, начиная с конца строки. Это похоже на функцию INSTR, которая возвращает позицию первого вхождения, начиная с начала строки.
Функция INSTRREV — это встроенная в Excel функция, которая относится к категории строковых / текстовых функций. Её можно использовать как функцию VBA в Excel.
В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.

Синтаксис

Синтаксис функции INSTRREV в Microsoft Excel:

InStrRev ( string, substring [, start [ , compare] ] )

Аргументы или параметры

string
Строка для поиска.
substring
Подстрока, которую вы хотите найти.
start
Необязательно. Это начальная позиция для поиска. Если этот параметр не указан, поиск начнется с позиции -1, которая является позицией последнего символа.
compare
Необязательно. Это тип сравнения, который нужно выполнить. Это может быть одно из следующих значений:

Константа VBA Значение Пояснение
vbUseCompareOption -1 Использует опцию сравнения
vbBinaryCompare 0 Двоичное сравнение
vbTextCompare 1 Текстовое сравнение

Возвращаемое значение

Функция INSTRREV возвращает числовое значение. Если substring не найдена в string, функция INSTRREV вернет 0. Если string имеет нулевую длину, функция INSTRREV вернет 0. Если string имеет значение null, функция INSTRREV вернет null. Если start равен нулю, функция INSTRREV вернет #Error.

Применение

  • Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Тип функции

  • Функция VBA

Пример (как функция VBA)

Функцию INSTRREV можно использовать только в коде VBA в Microsoft Excel.
Давайте взглянем на некоторые примеры Excel функции INSTRREV чтобы понять, как использовать Excel функцию INSTRREV в коде Excel VBA:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

InStrRev («alphabet», «a»)

Результат: 5

InStrRev («alphabet», «a», 1)

Результат: 5

InStrRev («alphabet», «a», 1)

Результат: 1

InStrRev («alphabet», «a», 2)

Результат: 1

InStrRev («alphabet», «a», 3)

Результат: 1

InStrRev («alphabet», «a», 4)

Результат: 1

InStrRev («alphabet», «a», 5)

Результат: 5

InStrRev («alphabet», «a», 6)

Результат: 5

InStrRev («alphabet», «a», 7)

Результат: 5

InStrRev («alphabet», «a», 8)

Результат: 5

InStrRev («alphabet», «a», 9)

Результат: 0

Например:

Dim LPosition As Integer

LPosition = InStrRev («alphabet», «a»)

В этом примере переменная LPosition теперь будет содержать значение 5.

Главная » Функции VBA »

28 Апрель 2011              351431 просмотров

  • ASC()— эта функция позволяет вернуть числовой код для переданного символа. Например, ASC("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду.Варианты этой функции — AscB() и AscW():
    • AscB() — возвращает только первый байт числового кода для символа.
    • AscW() — возвращает код для символа в кодировке Unicode
  • Chr() — возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например кавычки — "), т.к. кавычки просто так в VBA-коде не ввести(нужно ставить двойные). Я обычно именно эту функцию и использую.
        Dim sWord As String
        sWord = Chr(34) & "Слово в кавычках" & Chr(34)

    Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично таким же вариантам для функции Asc().

  • InStr() и InStrRev()— одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной символ или последовательность символов и вернуть их позицию. Если последовательность не обнаружена, то возвращается 0.
        Dim sStr As String
        sStr = "w"
        If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Then
            MsgBox "Искомое слово присутствует!"
        Else
            MsgBox "Искомое слово отсутствует!"
        End If

    Разница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() с конца строки

  • Left(), Right(), Mid()— возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.
        Dim sStr As String
        sStr = "Hello, World!"
        MsgBox Mid(sStr, 1, 5)
  • Len() — возможность получить число символов в строке. Часто используется с циклами, операциями замены и т.п.
  • LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно. Часто используется для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т.п.).
  • LSet() и RSet() — возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
  • LTrim(), RTrim(), Trim() — возможность убрать пробелы соответственно слева, справа или и слева, и справа.
  • Replace()— возможность заменить в строке одну последовательность символов на другую.
        Dim sStr As String
        sStr = "Hello, World!"
        MsgBox Replace(sStr, "Hello", "Bay")
  • Space() — получить строку из указанного вами количества пробелов;
    Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки.
  • StrComp() — возможность сравнить две строки.
  • StrConv() — возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.):
        Dim sStr As String
        sStr = "Hello, World!"
        MsgBox StrConv("Hello, World!", vbUpperCase)

    В качестве второго параметра параметра могут применяться константы:

    • vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
    • vbLowerCase: Преобразует все текстовые символы в нижний регистр
    • vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
    • *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
    • *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
    • **vbKatakana: Преобразует символы Hiragana в символы Katakana
    • **vbHiragana: Преобразует символы Katakana в символы Hiragana
    • ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
    • ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию
    • * применимо для локализацией Дальнего востока
      ** применимо только для Японии
      *** не поддерживается операционными системами под управлением Macintosh

  • StrReverse() — «перевернуть» строку, разместив ее символы в обратном порядке. Функция работает только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово?
  • Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
  • String() — позволяет получить строку из указанного количества символов (которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().

Статья помогла? Сделай твит, поделись ссылкой с друзьями!

VBA InStr Tutorial

String manipulation is a key skill in VBA and other programming languages. Today let’s focus on using string searching functions to extract SubStrings from other strings using the VBA InStr or the VBA InStrRev functions.

The VBA InStr function finds the position of a substring matched within a certain string. Returns 0 if substring not found.
VBA InStr
InStr is a very powerful and useful function when having to locate substrings withing another text string.

InStr Example

Let assume a simple text string “Hello There!”. Remember that VBA indexes strings starting at index 1:

'Hi There!
'123456789

Find substring “There”:

Debug.Print InStr("Hi There!", "There") 
'Result: 4

Find second occurance of character “e” (first “e” is on position 6):

Debug.Print InStr(7, "Hi There!", "There") 
'Result: 8

VBA InStrRev

The VBA InStrRev function finds the position of a substring matched within a certain string, starting from the end of the string. The position from the string is counted from the left like for the InStr function. Returns 0 if substring not found.
VBA IntStrRev

InStrRev Example

Let assume a simple text string with multiple occurances”Hi There! You There!”. Remember that VBA indexes strings starting at index 1:

Find the last occurance of the substring “There”:

Debug.Print InStrRev("Hi There! You There!", "There") 
'Result: 15

Find second last occurance of substring “There”:

Debug.Print InStr("Hi There! You There!", "There", 18) 
'Result: 4

Why in the second example this I provide 18 as the position to start from instead of say 14? That’s because looking from the back There starts at position 19. Look at the image below:
InStrRev explained

InStr Comparison types

There is some confusion with the Comparison Types when dealing with InStr and InStrRev functions. What’s the difference?

vbBinaryCompare

This option compares each character in a string match exactly as according to it’s binary value. What does this translate to? Letter case will be distinguished (small from capital letters). See example below:

Debug.Print InStr(1, "Hi There!", "There", vbBinaryCompare)
'Result: 4

Debug.Print InStr(1, "Hi There!", "there", vbBinaryCompare)
'Result: 0 (not found)

vbTextCompare

This option ignores letter case (small vs. capital letters):

Debug.Print InStr(1, "Hi There!", "There", vbTextCompare)
'Result: 4

Debug.Print InStr(1, "Hi There!", "there", vbTextCompare)
'Result: 4

InstrRev(StringCheck,StringMatch[,Start[,Compare]])

Новая функция, которая появилась в версии Visual Basic 6.0
Функция служит для поиска номера символа, с которого начинается в заданной строке образец поиска. Поиск идет от указанной позиции справа налево

Возвращаемое значение

Возвращает позицию местоположения одной строки внутри другой, отсчитываемую от конца строки типа Variant

Перечень возвращаемых значений

Вариант сравнения Возвращаемые InStrRev значения
StringCheck имеет нулевую длину 0
StringCheck имеет значение Null Null
StringMatch имеет нулевую длину Значение параметра Start
StringMatch имеет значение Null Null
StringMatch не найдена 0
StringMatch найдена внутри StringCheck Позиция, начиная с которой найдено совпадение
Start > Len(StringMatch) 0

Параметры
Функция содержит именованные аргументы

StringCheck Обязательный. Строковое выражение, в котором проводится поиск
StringMatch Обязательный. Строковое выражение — образец поиска
Start Необязательный. Числовое выражение, устанавливающее начальную позицию для каждого поиска. Если этот параметр опущен, используется значение –1, задающее начало поиска с позиции последнего символа. Если параметр Start содержит Null, возникает ошибка
Compare Необязательный. Числовое значение, задающее тип сравнения, который применяется при оценке подстрок. Если параметр опущен, применяется побитовое сравнение. См. значения в разделе «Установки»

Установки

Параметр Compare может иметь следующие значения:

Константа Значение Описание
vbUseCompareOption –1 Сравнение выполняется с применением установки, задаваемой оператором Option Compare
vbBinaryCompare 0 Выполняется побитовое сравнение. Буквы разных регистров считаются разными
vbTextCompare 1 Выполняется текстовое сравнение без учета регистров символов
vbDatabaseCompare 2 Только для Microsoft Access. Сравнение выполняется на основе информации, хранящейся в базе данных пользователя

Примечания

Обратите внимание на различие в синтаксисах для функций InStrRev и InStr

Пример

' Ищем символ "р" в текстовой строке "Мир_Excel"
Print InStrRev("Мир_Excel", "р")

Категория
Функции обработки строк

Понравилась статья? Поделить с друзьями:
  • Vba excel поиск в массиве по значению
  • Vba excel поиск в колонке
  • Vba excel позиция символа в строке
  • Vba excel позднее связывание
  • Vba excel подчеркнутый текст