Почему происходит ошибка "Type: mismatch" при компиляции функции в массив?

Рейтинг: 0Ответов: 1Опубликовано: 22.03.2023

Всем привет! Подскажите пожалуйста как "запустить" формулу массива для vba. Сейчас выдает ошибку 13:

Type: mismatch

Sub Match_Example1()

Dim TTBank As Long
Dim Value1 As Integer
Dim Value2 As Integer

Value1 = 456
Value2 = 753

TTBank = WorksheetFunction.Match(Value1 And Value2, Range(Cells(2, 1), Cells(10, 1)) And Range(Cells(2, 2), Cells(10, 2)), 0)

End Sub

Используемая таблица

Ответы

▲ 0
Sub Match_Example1()
    Dim arrayFromRange()
    Dim TTBank As Long, Value1 As Long, Value2 As Long
    
    arrayFromRange = Range("A2:B10").Value
    Value1 = 456
    Value2 = 753
    TTBank = fFindTwoValues(arrayFromRange, Value1, Value2)
End Sub

Function fFindTwoValues(arr_(), val_1 As Long, val_2 As Long) As Long
    Dim i As Long
    
    For i = 1 To UBound(arr_)
        If arr_(i, 1) = val_1 Then
            If arr_(i, 2) = val_2 Then
                fFindTwoValues = i: Exit Function
            End If
        End If
    Next i
End Function

Вариант - функция пользователя (UDF)

Function FindVal(range_ As Range, val_1 As Long, val_2 As Long) As Long
    Dim arr_()
    Dim i As Long
    
    arr_ = range_.Value
    
    For i = 1 To UBound(arr_)
        If arr_(i, 1) = val_1 Then
            If arr_(i, 2) = val_2 Then
                FindVal = i: Exit Function
            End If
        End If
    Next i
End Function

В свободную ячейку листа (не в диапазоне, который передается в функцию!):

=FindVal(A2:B10;456;753)

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