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

Excel VBA INSTRREV

Функция VBA INSTRREV , как сокращение от In String Reverse , возвращает позицию первого вхождения строки поиска (подстроки) в другой строке, начиная с конца строки (справа налево), из которой мы ищем строка с возможностью поиска.

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

INSTRREV и INSTR , оба являются встроенной функцией String / Text VBA в MS Excel. Мы можем использовать их при написании любого макроса в редакторе Microsoft Visual Basic.

Синтаксис

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

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

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

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

  1. Функция INSTRREV возвращает 0, если проверка строки  имеет нулевую длину или совпадение строки  не найдено или аргумент 'start' > длина совпадения строки .
  2. Эта функция возвращает «Null» , если проверка строки  или строка матч  является «Null» .
  3. Если совпадение строки имеет нулевую длину, функция возвращается в начало .
  4. Если при проверке строки найдено совпадение , функция возвращает позицию, в которой найдено совпадение.

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

Вы можете скачать этот шаблон Excel VBA INSTRREV здесь - Шаблон VBA INSTRREV Excel

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

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

Чтобы сделать то же самое, мы будем использовать код VBA. Шаги:

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

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

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

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

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

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

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

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

  • We need to set the value of variable ‘Column’ to 3 as we need to write the split names in C (3rd Column) and a column onward.

  • If the string is only one word that means there is no space in string then we want the string itself as output. For this, we will specify the condition using ‘If and Else statement’ with an asterisk sign (denoting one or more characters) as follows:

  • If there is space in the string then we want to split the string. To do the same we have used INSTR and INSTRREV function both to find out the first space position and last space position respectively. It will help us to find the first word and last word in the string respectively.

INSTR Function takes the argument as below:

Argument Details

  • Start: From which position to start.
  • String1: We need to give string expression being searched.
  • String2: We need to specify string expression being searched for.

Compared as VbCompareMethod: Specifying Comparing method. By default, it is binary compare.

  • We need to use the vba LEFT function to extract left characters from the string. We have used ‘Last Space-1’ to get the left characters before the last space.

We need to use the RIGHT and LEN functions to extract the right characters from the string after the first space.

Macro is written. Now we just need to run the macro using the F5 key.

Code:

 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 

We have a result now.