К сожалению, в VBA нет ничего похожего на перегрузки функций / методов.
Я не проверял это, но я думаю, что это должно работать для двух конкретных случаев ( либо paramarray из строкового литерала, либо объект с одним диапазоном):
Function AndSearch1(ByRef target As Range, ParamArray searchList() As Variant) As Boolean
'AND Boolean logic search using a hardcoded list
Dim i As Long
Dim myArray as Variant
myArray = searchList
If UBound(searchList) = 0 Then
If TypeName(searchList(0)) = "Range" Then
If searchList(0).Rows.Count = 1 and searchList(0).Columns.Count > 1 Then
myArray = Application.Transpose(Application.Transpose(searchList(0).Value))
ElseIf searchList(0).Rows.Count > 1 and searchList(0).Columns.Count = 1 Then
myArray = searchList(0).Value
Else
'you'd need additional logic to handle 2-dimensional ranges
End If
End If
End If
For Each cell In myArray # iterate the myArray instead of the searchList
ПРИМЕЧАНИЕ: я не думаю, что это сработает (но может быть пересмотрено для обработки различных краевых случаев), если вы пропустите диапазон ParamArray
, например:
=AndSearch1("A1:B1","C2:C15")
И если это двумерный диапазон.
=AndSearch1("A1:D4")
Но это может быть адаптировано для этих случаев, идея состоит в том, чтобы просто взять любой аргумент (ы), который получает функция, и присвоить их подходящему итерируемому одномерному варианту.