Разное

Поиск символа в строке vba: InStr — Функции обработки строк — Функции VBA — Справочники

VBA ИНСТРЕВ — voxt


Excel VBA INSTRREV

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

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

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

из MS Excel. Поэтому мы можем использовать их при написании любого макроса в редакторе Microsoft Visual Basic.

Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)

Оглавление

  • Excel VBA INSTRREV
    • Синтаксис
      • Возвращаемые значения
    • Как использовать функцию 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мы должны написать макрос. Теперь нам нужно запустить макрос с помощью 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

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

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

Эта статья представляет собой руководство по VBA INSTRREV. 31 символов) или укорачиваться. Однако такие строки занимают на 10 байт памяти больше, поэтому можно объявить строки фиксированной длины, явно указав количество символов.

Dim s as String*20

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

8.2 Операции и функции для работы с символьными данными

Единственная операция, применяемая при работе со строками — конкатенация. Зато встроенных функций для работы достаточно много:

Действие Ключевые слова
Сравнение двух строк. StrComp
Преобразование строк. StrConv
Изменение регистра. Lcase, UCase
Создание строк, содержащих повторяющиеся символы. Space, String
Определение длины строки. Len
Форматирование строки. Format
Выравнивание строки. Lset, RSet
Обработка строк. InStr, Left, LTrim, Mid, Right, RTrim, Trim
Выбор типа сравнения строк. Option Compare
Работа с кодами ASCII и ANSI. Asc, Chr

Сравнение двух строк. Функция StrComp возвращает значение типа Variant (Integer), представляющее результат сравнения строк.

StrComp(string1, string2[, compare])

Синтаксис функции StrComp содержит следующие аргументы:

string1 — Обязательный. Любое допустимое строковое выражение.

string2 — Обязательный. Любое допустимое строковое выражение.

compare — Необязательный. Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0, 1 или 2. Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию). Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1. Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.

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

string1 меньше чем string2 -1

string1 равняется string2 0

string1 больше чем string2 1

Пример:


Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"	' Определяет переменные.
MyComp = StrComp(MyStr1, MyStr2, 1)	' Возвращает 0.
MyComp = StrComp(MyStr1, MyStr2, 0)	' Возвращает -1.
MyComp = StrComp(MyStr2, MyStr1)	' Возвращает 1.

Выбор типа сравнения строк. Применяется на уровне модуля для задания используемого по умолчанию способа сравнения строковых данных.

Option Compare {Binary | Text}

Инструкция Option Compare при ее использовании должна находиться в модуле перед любой процедурой и указывает способ сравнения строк (Binary или Text) для модуля. Если модуль не содержит инструкцию Option Compare, по умолчанию используется способ сравнения Binary

Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:

A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш

Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:

(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)

Преобразование строк. Функция StrConv имеет следующи синтаксис:

StrConv(string, conversion)

Здесь string — строковое выражение, которое следует преобразовать, conversion — значение типа Integer, Сумма значений, указывающих тип преобразования, которое следует выполнить.

vbUpperCase 1 Преобразование строки к верхнему регистру.

vbLowerCase 2 Преобразование строки к нижнему регистру.

vbProperCase 3 Преобразование первой буквы каждого слова в строке в прописную.

Вместо одной этой функции можно применять функции Lcase, Ucase.

Lcase — возвращает значение типа String, представляющее строку, преобразованную к нижнему регистру.

LCase(строка)

Обязательный аргумент строка представляет любое допустимое строковое выражение. Если строка имеет значение Null, возвращается значение Null.

К нижнему регистру преобразуются только прописные буквы; строчные буквы и прочие символы остаются неизмененными.

Ucase — возвращает значение типа Variant (String), содержащее строку, преобразованную к верхнему регистру.

UCase(строка)

Обязательный аргумент строка представляет любое допустимое строковое выражение. Если строка имеет значение Null, возвращается значение Null.

К верхнему регистру преобразуются только строчные буквы; прописные буквы и прочие символы остаются неизменными.

Создание строк, содержащих повторяющиеся символы. Для создания таких строк применяют функции Space и String. Функция Space(число) формирует строку, а обязательный аргумент число указывает нужное число пробелов в строке. Ее удобно использовать для форматирования и очистки данных в строках фиксированной длины.

Функция String(number, character) содержит следующие аргументы:

number — Значение типа Long. Длина возвращаемой строки.

character — Значение типа Variant. Код символа или строковое выражение, первый символ которого используется при создании возвращаемой строки.

Определение длины строки. При работе со строками переменной длины удобно использовать функцию Len(строка), возвращую значение типа Long, содержащее число символов в строке

Выравнивание строки. Оператор Lset — выравнивает строку по левому краю строковой переменной или копирует переменную одного определяемого пользователем тип в переменную другого типа, также определенного пользователем.

LSet переменная = строка

LSet имяПеременной1 = имяПеременной2

Здесь строка — строковое выражение, которое следует выровнять по левому краю строки переменная. Все оставшиеся символы в строке переменная LSet заменяет на пробелы. Если строка длиннее, чем переменная, LSet копирует в переменную столько начальных символов строки, сколько в ней поместится.

Rset — то же самое, но выравнивает строку по правому краю строковой переменной. Если длина строки переменная больше, чем строка, инструкция RSet заменяет все оставшиеся символы вплоть до начала строки переменная пробелами.

Обработка строк. Для разнообразной обработки строк применяются функции InStr, Left, LTrim, Mid, Right, RTrim, Trim.

InStr — Возвращает значение типа Long, указывающее позицию первого вхождения одной строки внутри другой строки.

InStr([start, ]string1, string2[, compare])

Синтаксис функции InStr содержит следующие аргументы:

start — числовое выражение, задающее позицию, с которой начинается каждый поиск. Если этот аргумент опущен, поиск начинается с первого символа строки. Указание аргумента start является обязательным, если указан аргумент compare.

string1 — Строковое выражение, в котором выполняется поиск.

string2 — Искомое строковое выражение.

compare — Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0 или 1. Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию). Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1. Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.

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

string1 является пустой строкой 0

string2 является пустой строкой start

string2 не найдена 0

string2 найдена в string1 Позиция обнаруженной подстроки

start > string2 0

Left — возвращает значение типа String, содержащее указанное число первых символов строки.

Left(string, length)

Здесь string — строковое выражение, из которого извлекаются символы. length — значение типа Variant (Long), числовое выражение, указывающее число возвращаемых символов. Если 0, возвращается пустая строка («»). Если значение length больше либо равняется числу символов в строке string, возвращается вся строка.

Для определения числа символов в строке string следует использовать функцию Len.

Ltrim, Rtrim, Trim — возвращают значение типа String, содержащее копию строки, из которой удалены пробелы, находившиеся в начале строки (LTrim), в конце строки (RTrim) или в начале и конце строки (Trim).

LTrim(строка), RTrim(строка), Trim(строка)

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

Mid — Возвращает значение типа Variant (String), содержащее указанное число символов строки.

Mid(string, start[, length])

Здесь string — строковое выражение, из которого извлекаются символы, start — значение типа Long. Позиция символа в строке string, с которого начинается нужная подстрока. Если start больше числа символов в строке string, функция Mid возвращает пустую строку («»).

length — значение типа Variant (Long). Число возвращаемых символов. Если этот аргумент опущен или превышает число символов, расположенных справа от позиции start, то возвращаются все символы от позиции start до конца строки.

Right — Возвращает значение типа String, содержащее указанное число последних символов строки.

Right(string, length)

Здесь string — строковое выражение, из которого извлекаются символы. length — значение типа Variant (Long). Числовое выражение, указывающее число возвращаемых символов. Если 0, возвращается пустая строка («»). Если превышает число символов в строке string, возвращается вся строка.

Работа с кодами ASCII.

Asc — Возвращает значение типа Integer, представляющее код символа для первого символа строки.

Asc(строка)

Аргумент строка является любым допустимым строковым выражением. Если строка не содержит символов, возникает ошибка выполнения. Возвращаемые значения лежат в диапазоне 0 — 255.

Chr — возвращает значение типа String, содержащее символ, соответствующий указанному коду символа.

Chr(кодСимвола)

Обязательный аргумент кодСимвола является значением типа Long, определяющим символ.

Коды 0-31 соответствуют стандартным управляющим символам ASCII. Например, Chr(10) возвращает символ перевода строки. Обычным диапазоном значений аргумента кодСимвола является интервал 0-255.

Пример: Заменить в строке буквы А, Б, В на 1, 2, 3 соответственно


Sub пример6()
Dim s As String, sn As String, t As String
Dim l As Integer, i As Integer
Call read("g1", s)
l = Len(s)
For i = 1 To l
t = Mid(s, i, 1)
Select Case t
Case "А": sn = sn + "1"
Case "Б": sn = sn + "2"
Case "В": sn = sn + "3"
Case Else: sn = sn + t
End Select
Next i
Call out("h2", sn)
End Sub
Пример: Из набора слов вывести только те, у которых одинаковые первые буквы
Sub пример7()
Dim first() As String, s As String, n As Integer, i As Integer, k As Integer
i = 0: k = 0
Do While Лист1.Range("g" & i+1). Text <> ""
i = i + 1
s = Лист1.Range("g" & i).Text
ReDim Preserve first(1 To i)
first(i) = Left(s, 1)
Loop
Лист1.Range("h2", "h" & i).Clear
For n = 1 To i
If n <> i Then
For k = n + 1 To i
If first(k) = first(n) Then
Лист1.Range("h" & n).Value = Лист1.Range("g" & n).Text
Лист1.Range("h" & k).Value = Лист1.Range("g" & k).Text
End If
Next
End If
Next
End Sub

excel — VBA, если строка содержит определенную букву

спросил

Изменено 6 лет, 4 месяца назад

Просмотрено 267 тысяч раз

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

 Частная подпрограмма CommandButton1_Click()
Dim myString как строку
RowCount = WorksheetFunction.CountA(диапазон("A:A"))
MsgBox Ровкаунт
Для i = 2 To RowCount
    myString = Обрезать (Ячейки (i, 1). Значение)
    Если myString.Contains("A") Тогда
        oldStr = Ячейки (i, 15).Значение
        newStr = Left(oldStr, oldStr.IndexOf("A"))
    Конец, если
Следующий
Конец сабвуфера
 

Этот код должен пройтись по списку значений и если встретит букву А удалить ее и все что идет после нее. у меня проблемы в Оператор IF , недопустимый квалификатор. Как я могу сделать вывод моего оператора IF независимо от того, содержит ли строка в ячейке букву A?

Большое спасибо

  • vba
  • excel

2

Попробуйте использовать функцию InStr, которая возвращает индекс в строке, в которой был найден символ. Если InStr возвращает 0, строка не найдена.

 Если InStr(myString, "A") > 0 Тогда
 

InStr Веб-сайт MSDN

При ошибке в строке, назначенной newStr, также преобразуйте oldStr. IndexOf в эту функцию InStr.

 Слева(oldStr, InStr(oldStr, "A"))
 

5

Попробуйте:

 Если myString похож на "*A*" Тогда
 

1

Не уверен, что это то, что вам нужно, но он будет перебирать заданный вами диапазон и, если найдет «А», удалит его из ячейки. Я не уверен, для чего используется oldStr…

 Частная подпрограмма foo()
Dim myString как строку
RowCount = WorksheetFunction.CountA(диапазон("A:A"))
Для i = 2 To RowCount
    myString = Обрезать (Ячейки (i, 1). Значение)
    Если InStr(myString, "A") > 0 Тогда
        Ячейки(i, 1).Value = Left(myString, InStr(myString, "A"))
    Конец, если
Следующий
Конец сабвуфера
 

1

Если вы перебираете большое количество ячеек, используйте бинарную функцию, это намного быстрее. Использование «<> 0» вместо «> 0» также ускоряет работу:

 Если InStrB(1, myString, "a", vbBinaryCompare) <> 0
 

3

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Использование VBA InStr для проверки наличия в строке подстроки


Введение | Пример | Учебник | Приложения

Введение — VBA InStr

Функция VBA InStr — одна из самых полезных функций для работы со строками. Вы можете использовать его, чтобы проверить, содержит ли строка, ячейка или диапазон подстроку, которую вы хотите найти. Если это так, «InStr» вернет позицию в текстовой строке, где начинается ваша подстрока. Это удобно, если вы просматриваете файл или электронную таблицу и хотите выполнить действие, когда найдете совпадающую строку.

Продолжайте читать, чтобы узнать, как вы можете использовать InStr в ваших макросах VBA для поиска подстроки! Я приведу все примеры, которые могут вам понадобиться, чтобы помочь вам начать работу.


Пример — VBA InStr

Допустим, у вас есть список имен в электронной таблице Excel или текстовом файле. Рядом с каждым именем у вас есть информация об этом человеке. Это может быть что угодно — адреса электронной почты, номера телефонов, идентификаторы сотрудников, страны. Это обычная структура для электронных таблиц или баз данных.

Ваш начальник просит вас обобщить информацию о каждом человеке, который соответствует определенным критериям. Функция VBA InStr отлично справляется с такими задачами.

В этом примере я начну со списка президентов США.


Учебное пособие VBA InStr

Да, я понимаю, что это глупый пример, потому что вы можете просто использовать обычную фильтрацию Excel, чтобы решить эту проблему, но что в этом интересного? Знакомство с VBA InStr позволит вам делать гораздо больше, чем простая фильтрация.

Найдем все экземпляры президентов со словом «Джеймс» в имени и подведем итоги:

Поиск подстрок с помощью InStr

 Подпрограмма InStrDemo()
Dim lastrow As Long
Dim i As Integer, icount As Integer
lastrow = ActiveSheet.Range("A30000").End(xlUp).Row
Для i = 1 В последнюю строку
    Если InStr(1, LCase(Range("B" & i)), "james") <> 0 Тогда
        'Выполните свое действие здесь
        счет = счет + 1
        Range("H" & icount & ":L" & icount) = Range("A" & i & ":E" & i).Value
    Конец, если
Далее я
Конец суб 

Создавайте мощные макросы с помощью нашего бесплатного комплекта разработчика VBA

Это на самом деле довольно аккуратно. Если у вас есть проблемы с пониманием или запоминанием, вам может помочь наш бесплатный комплект разработчика VBA . Он загружен ярлыками VBA, которые помогут вам создавать собственные макросы, подобные этому. Мы отправим копию вместе с нашей Большой книгой макросов VBA Excel на указанный ниже адрес электронной почты.


Этот макрос перебирает весь столбец данных и находит строки, содержащие подстроку «james», используя функцию InStr . Как только он находит совпадение, он копирует данные в отдельную часть электронной таблицы Excel.


Результаты обучения VBA InStr

Если вы готовы узнать больше, в следующих разделах показано, как работает InStr и как вы можете использовать его для выполнения более полезных задач — больше примеров ниже!

Учебное пособие — VBA InStr

Аргументы InStr

Функция VBA InStr принимает 4 аргумента, 2 из которых являются необязательными:

 InStr([Start], MainString, SubString, [Сравнить как VbCompareMethod]) 

Вот описание аргументов:

   
Начало [Необязательно] Это положительное целое число, с которого вы хотите, чтобы ваша строка начала поиск SubString внутри MainString. Если опущено, то начинается сначала (позиция 1). Значение меньше или равное 0 приводит к ошибке.
   
Основная строка Строка, в которой вы хотите выполнить поиск. Вы хотите искать SubString внутри MainString.
   
Подстрока Подстрока, которую вы хотите найти. Вы хотите искать SubString внутри MainString
   
Сравнить        [Необязательно] Это сообщает VBA, какой алгоритм использовать при сравнении. Возможны три варианта, описанные ниже.

Вот три возможных VbCompareMethods для аргумента Compare :

  1. vbBinaryCompare (по умолчанию)
  2. vbDatabaseCompare
  3. vbTextCompare

Значение по умолчанию, vbBinaryCompare, подходит для подавляющего большинства приложений, поэтому я не буду тратить время на объяснение каждого алгоритма. Оставьте комментарий в разделе комментариев, если вы хотите, чтобы я углубился в подробности.

Основы InStr

Теперь, когда мы разобрались с аргументами, давайте поговорим об основах.

InStr возвращает Integer — фактически Variant типа Long — , показывающий, где подстрока встречается в основной строке.

Если подстрока не существует, возвращается значение 0. Вот почему InStr так полезен! Если вы хотите выполнить действие только тогда, когда строка содержит подстроку, и вам все равно, где находится подстрока, вы просто проверяете, не равен ли результат InStr 0.

 Если InStr(MainString, SubString) <> 0, то 

InStr vbBinaryCompare чувствителен к регистру . Если вы хотите искать подстроку внутри основной строки и вас не беспокоит чувствительность к регистру, рекомендуется обернуть аргументы MainString и SubString в функцию LCase . Вы можете использовать алгоритм vbTextCompare, но он немного глючит. Это особенно глючит при работе с редкими персонажами.

 Если InStr(LCase(MainString), LCase(SubString)) <> 0 Тогда 

Подпишитесь ниже , а затем взгляните на эти примеры InStr , чтобы лучше проиллюстрировать эти основы. Они начинаются с простого, но постепенно становятся более продвинутыми.

Дополнительные примеры InStr
Возврат позиции подстроки с помощью InStr
Пример 1
 i = InStr("Это тест", "тест") 

Переменная i равна 11.

Пример 2
 i = InStr("Это проверка", "t") 

Переменная i равна 11.

Пример 3
 i = InStr("Это тест", "T") 

Переменная i равна 1.

Пример 4
 i = InStr(1, LCase("Это тест"), "t") 

Переменная i равна 1, потому что вы преобразовали основную строку в нижний регистр.

Пример 5
 i = InStr("Это тест", "s") 

Переменная i равна 4.

Пример 6
 i = InStr(5, "Это тест", "s") 

Переменная i равна 7, потому что вы начали поиск с позиции 5 — после первой «s».

Пример 7
 i = InStr(100, "Это тест", "s") 

Переменная i равна 0. Если ваша начальная позиция превышает длину вашей основной строки, InStr всегда возвращает 0.

Пример 8
 i = InStr(100, "Это тест", "привет") 

Переменная i равна 0, так как подстрока не была найдена внутри основной строки.

Проверить, содержит ли строка подстроку (без учета регистра)
 Проверка субстроки()
Dim MainString As String 'String1
Dim SubString As String 'String2
'---ВХОД---
ОсновнаяСтрока = Диапазон("A1")
Подстрока = "gmail"
'-----------
Если InStr(LCase(MainString), LCase(SubString)) <> 0 Тогда
    'MainString содержит SubString
ElseIf InStr(LCase(MainString), LCase(SubString)) = 0 Тогда
    'MainString НЕ содержит SubString
Конец, если
Конец суб 

Это так просто! Именно такой подход я использовал в своем примере с президентами. Единственное отличие заключалось в том, что я приложил InStr поиск внутри цикла For , чтобы я мог проверить все значения.

Если строка содержит подстроку, выполнить действие в следующих 10 строках (с учетом регистра)
 Подпрограмма InStrTakeNext10()
Dim MainString As String 'String1
Dim SubString As String 'String2
Dim lastrow As Long, lCount As Long
Dim i как целое число, j как целое число
'---ВХОД---
SubString = "10 лучших"
'Также скорректируйте строку MainString в цикле For Loop
'-----------
lastrow = ActiveSheet.Range("A30000").End(xlUp).Row
Для i = 1 В последнюю строку
    Основная строка = диапазон («А» и я)
    Если InStr(MainString, SubString) <> 0 Тогда
        'MainString содержит SubString
        Для j = i + 1 To i + 10
            'Скопируйте следующие 10 строк в столбец H
            lCount = lCount + 1
            Диапазон («H» и lCount) = Диапазон («A» и j)
        Следующий j
        i = i + 10 'пропустить следующие 10 ячеек
    Конец, если
Далее я
Конец суб 

Я постоянно использую макрос, подобный приведенному выше, при работе с Текстовыми файлами фиксированной ширины . Я ищу определенную строку, затем извлекаю часть следующих строк с помощью VBA.

Чтобы привести вам реальный пример из моей работы по атомной инженерии, я использую InStr для извлечения шаблонов управляющих лопаток или осевых профилей мощности из выходных файлов ASCII нашей системы мониторинга активной зоны.

Читайте дальше, чтобы узнать больше об использовании функции VBA InStr.


Идеи приложений

Мое использование функции VBA InStr обычно попадает в 2 категории

  1. Расширенная фильтрация
  2. Извлечение данных

Одна из идей расширенной фильтрации заключается в том, чтобы экспортировать имена и контактную информацию каждого клиента/сотрудника из определенного штата/страны. Вы можете автоматически сохранить данные в текстовый файл или отправить этим людям электронное письмо с помощью VBA!

Комплексное приложение для извлечения данных предназначено для очистки HTML-кода веб-сайта, поиска строки и извлечения следующей информации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *