Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

VBA Excel “contains” операторы?

#excel #vba


Нужно, чтобы при сравнивании двух похожих строчек String.

Например: If "йцуке" содержит/включает "йцу" = true.

В других есть такой метод "contains", а в VBA как?
    


Ответы

Ответ 1



В VBA для этих целей есть функция InStr. Используется как InStr([start,] string1, string2[, compare]) где start - необязательный параметр, указывающий начальную позицию для поиска (по умолчанию с первого символа) string1 - строка, в которой осуществляется поиск string2 - искомая строка compare - необязательный параметр, указывающий метод сравнения (бинарное, текстовое или сравнение информации в базах данных (только для Access)). По умолчанию используется бинарное сравнение. Возвращаемые значения функции: NULL - если любая из строк NULL, 0 - если string1 пустая строка либо string2 не найдена, либо start больше длины строки string1, start - если string2 пустая строка, если строка string2 найдена внутри строки string1, то возвращает позицию, в которой найдено совпадение. Пример использования Function contains(string1 As String, string2 As String, Optional start As Integer = 1, _ Optional compare As VbCompareMethod = vbTextCompare) As Boolean ' функция проверки вхождения строки string2 в строку string1 без учёта регистра ' если string2 - пустая строка, то возвращается False Dim findPosition As Integer contains = False findPosition = InStr(start, string1, string2, compare) If Len(string2) > 0 And findPosition >= start Then contains = True End Function Sub test() Dim str1 As String, str2 As String Dim start As Integer str1 = "absqwerty" str2 = "qwer" MsgBox contains(str1, str2) End Sub

Ответ 2



В дополнение к уже опубликованному ответу: Можно использовать оператор like: if "йцуке" like "*йцу*" then msgbox "Содержит" else msgbox "Не содержит" end if Данный оператор чувствителен к регистру, поэтому если нужно опустить чувствительность, можно использовать один из двух вариантов: Option Compare Text Использовать Lcase либо Ucase, т.е. на вашем примере может выглядеть так: if Lcase("йЦуКе") like Lcase("*ЙцУ*") then ....

Ответ 3



Повторюсь, но все же. InStr, Like - для строки. Если же массив строк, то используется Filter Filter (<массив Строк>, <строка Поиск>[, <включение>] [, <сравнение>]) - просматривает массив строковых значений и ищет в нем все подстроки, совпадающие с заданной строкой. Эта функция имеет четыре аргумента: <строка Поиск> - искомая строка; <включение> - параметр (boolean значение), который указывает, будут ли возвращаемые строки включать искомую подстроку или, наоборот, возвращаться будут только те строки массива, которые не содержат искомой строки в качестве подстроки; <сравнение> - параметр, определяющий метод сравнения строк.

Комментариев нет:

Отправить комментарий