有了一些功能,你可以做像=SEARCH({"some","thing"},A1)
这样的事情
我怎么能写一个接受像{"some","thing"}
这样的参数的函数?
我根据我见过的其他一些答案/网站尝试了Function whatever(my_list as Variant)
和Function whatever(my_list() as Variant)
,但它没有用,我不知道为什么。
我认为如果我的函数像=WHATEVER("some","thing")
,但我想要额外的参数,如=WHATEVER(A1,{"some","thing"},0,B1)
,上述情况会有效
我希望在接受它作为参数后循环遍历列表。谢谢!
您可以通过以下功能实现此目的:
Public Function Foo(values As Variant) As String
Dim i As Long
For i = LBound(values) To UBound(values)
Foo = Foo & values(i)
Next i
End Function
然后在Excel公式中使用它,如下所示:
=Foo({"a","b","c"})
这将返回abc
的单元格值。
编辑....
但是该函数不会处理像=Foo({"a","b","c";"d","e","f"})
这样的二维数组或者将一个Range传递给函数,比如=Foo(A1:B6)
。
这有点健壮:
Public Function Foo(ByVal values As Variant) As String
Dim temp As Variant
temp = values
Dim i As Long
Dim j As Long
Dim is2D As Boolean
If IsArray(temp) Then
On Error Resume Next
is2D = IsNumeric(LBound(temp, 2))
On Error GoTo 0
If is2D Then
For i = LBound(temp, 1) To UBound(temp, 1)
For j = LBound(temp, 2) To UBound(temp, 2)
Foo = Foo & temp(i, j)
Next j
Next i
Else
For i = LBound(temp) To UBound(temp)
Foo = Foo & temp(i)
Next i
End If
Else
Foo = temp
End If
End Function
除了将参数声明为Variant
之外,还可以使用IsArray
来检查参数是否为数组,如果未知维数,则可以使用For Each
而不是For
:
Public Function MySearch(values, value) As Boolean
If TypeOf values Is Excel.Range Then values = values ' convert Range to array or value
If TypeOf value Is Excel.Range Then value = value ' not sure if this is needed ..
If Not IsArray(values) Then MySearch = values = value : Exit Function
Dim v ' As Variant by default
For Each v In values
If v = value Then MySearch = True : Exit Function
Next i
MySearch = False
End Function