参数arrays与input问题

所以我一直在试图创build一个函数来将VBA中的分贝加在一起。 我试过使用ParamArray,但是在处理信息时遇到了麻烦。 理想情况下,它将起到SUM()的作用,只是把所有的投入都扔进公式和繁荣。

现在,我有:

Function DBADD3(ParamArray nums()) As Double Dim DBPrTot As Variant 'this will be input into the log function at the end DBPrTot = 0 'initializing value for use in for loop For i = LBound(nums) To UBound(nums) DBPrTot = DBPrTot + 10 ^ (nums(i) / 10) 'all of the values gathered from ParamArray are being input into this running total Next i DBADD3 = 10 * WorksheetFunction.Log10(DBPrTot) 'throwing the DBPrTot running value into our end equation End Function 

我希望它采取像DBADD3(A1:A3,A5,A7),仍然产生的东西input。 有人可以帮忙吗?

因此,您需要了解正在传递的信息的types。在之前的其他post的示例中,数字是直接传入的,因此可以轻松访问它们的值。 在这种情况下,您传入一组范围(范围和单个单元格组)。 所以你必须遍历每个数组来拉取范围组,然后遍历范围来获取单个值。

请参阅下面的基本SUM样式函数的示例:

 Function ReturnValues(ParamArray args()) As Double Dim dRunningTotal As Double dRunningTotal = 0 For i = LBound(args) To UBound(args) For Each cel In args(i) dRunningTotal = dRunningTotal + cel.Value Next cel Next i ReturnValues = dRunningTotal End Function 

编辑添加:您可以testing参数的types,以防止抛出错误,也可以处理在参数中可能同时具有范围和值的情况,即=ReturnValues(A1:A10, 7, 9, B1:B4)

 Function ReturnValues(ParamArray args()) As Double Dim dRunningTotal As Double dRunningTotal = 0 For i = LBound(args) To UBound(args) If TypeName(args(i)) = "Range" Then For Each cel In args(i) dRunningTotal = dRunningTotal + cel.Value Next cel Else dRunningTotal = dRunningTotal + args(i) End If Next i ReturnValues = dRunningTotal End Function