Excel VBA: методы имитации оператора IN из Python

Чтобы имитировать оператор IN из Python в Excel VBA, можно использовать несколько подходов. Вот несколько способов:

  1. Метод 1. Использование цикла

    • Вы можете использовать цикл для перебора массива или коллекции и проверки наличия в нем значения. Вот пример:
    Function IsInArray(value As Variant, arr As Variant) As Boolean
       Dim element As Variant
       For Each element In arr
           If element = value Then
               IsInArray = True
               Exit Function
           End If
       Next element
       IsInArray = False
    End Function

    Затем вы можете использовать эту функцию, чтобы проверить, присутствует ли значение в массиве:

    Sub CheckValue()
       Dim arr() As Variant
       arr = Array("apple", "banana", "orange")
       If IsInArray("banana", arr) Then
           MsgBox "Value found!"
       Else
           MsgBox "Value not found!"
       End If
    End Sub
  2. Метод 2: использование метода WorksheetFunction.Match

    • Метод WorksheetFunction.Match можно использовать для поиска значения в диапазоне. Если значение найдено, оно возвращает позицию значения в диапазоне; в противном случае возвращается ошибка. Вот пример:
    Sub CheckValue()
       Dim rng As Range
       Set rng = Range("A1:A10")
       If Not IsError(Application.WorksheetFunction.Match("banana", rng, 0)) Then
           MsgBox "Value found!"
       Else
           MsgBox "Value not found!"
       End If
    End Sub
  3. Способ 3. Использование функции фильтра

    • Функция «Фильтр» может использоваться для фильтрации массива по определенному условию. Проверив длину результирующего массива, вы можете определить, существует ли значение. Вот пример:
    Sub CheckValue()
       Dim arr() As Variant
       arr = Array("apple", "banana", "orange")
       Dim filtered() As Variant
       filtered = Filter(arr, "banana")
       If UBound(filtered) > -1 Then
           MsgBox "Value found!"
       Else
           MsgBox "Value not found!"
       End If
    End Sub