如何创建函数来获取不确定数量的参数但成对?
Posted
技术标签:
【中文标题】如何创建函数来获取不确定数量的参数但成对?【英文标题】:How to create function to take indefinite number of arguments but by pairs? 【发布时间】:2018-09-18 10:08:09 【问题描述】:我正在考虑创建一个类似于 IFS 公式的 VBA 函数,其中您可以传递不定数量的参数,但始终需要第二个参数。
=IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2], ...)
要求是比较某些值,如果都相同则输出True,否则输出False。
假设我们有这张桌子。
Item ID | Price | Description
1001 | 10.00 | Item A
1002 | 10.00 | Item A
1003 | 25.00 | Item A
1004 | 10.00 | Item B
如果我需要对某些项目做某事,我只需像这样调用函数:
Function(criteria1, value1, criteria2, value2, ...)
' Mark items with Price = 10.00 and Description = Item A
Dim IsAdd As Boolean: IsAdd = FnCheckData(strCriteria2, "10.00", strCriteria3, "Item A")
' Mark items with Item ID = 1002
Dim IsAdd As Boolean: IsAdd = FnCheckData(strCriteria1, "1002")
' Mark items with Item ID = 1003, Price = 25.00 and Description = Item A
Dim IsAdd As Boolean: IsAdd = FnCheckData(strCriteria1, "1003", strCriteria2, "25.00", strCriteria3, "Item A")
' This would error out since the second argument is not supplied
Dim IsAdd As Boolean: IsAdd = FnCheckData(strCriteria1)
这可能吗?如果是这样,怎么做?提前致谢!
【问题讨论】:
你可能需要this 我在 TEXTJOINIFS UDF here 中介绍了这一点。 谢谢大家!从两个帖子中都有想法。 【参考方案1】:你的函数可能是这样的
Function NeedEvenNumber(ParamArray vStrings()) As Boolean
On Error GoTo EH
If IsMissing(vStrings) Then
Debug.Print "Nothing passed"
End If
If (UBound(vStrings) Mod 2) - 1 = 0 Then
Debug.Print "Correct number of params passed"
End If
Exit Function
EH:
MsgBox "Something went wrong", vbOKOnly, "Error"
End Function
【讨论】:
将返回值转换为Variant
,您可以在出现错误时返回CVErr(xlErrNum)
(#NUM!)。 CVErr function以上是关于如何创建函数来获取不确定数量的参数但成对?的主要内容,如果未能解决你的问题,请参考以下文章