1

我想创建一个 VBA 函数,它结合了几个内置的 Excel 函数,每个函数都可以采用一个或多个不同大小的单元格范围 [编辑:如 SUM、COUNT、STDEV.P、AVERAGE、MIN 等;虽然我更喜欢一种适用于任何可以采用这些不连续范围的公式的方法]。

输入的范围数必须灵活,这些参数将直接输入到工作表中。使用 VBA 的 ParamArray 这应该是最简单的,但我不确定如何将每个单元格范围传递给内置函数。这是我尝试过的一个简单示例:

Function Func1(ParamArray Ranges() As Variant)
    Func1 = Application.WorksheetFunction.Sum(Ranges)
End Function

这适用于单个单元格参数,但不适用于范围。例如,如果单元格A1=1 和A2=2,“=Func1(A1,A2)”返回 3,但=Func1(A1:A2)返回#VALUE!

我想过循环遍历 中的每个范围Ranges(),但是我想不出任何方法可以SUM在循环时一次将参数输入到内置函数中。

ps - 实际上我调用了大约 10 个不同的函数(不仅仅是求和,否则这将是微不足道的),每个函数都有相同的范围集,并且此代码旨在允许每个单元格仅输入一次,而不是输入 10 个函数中的每一个。

4

1 回答 1

0

您需要迭代数组 - 例如:

Function Func1(ParamArray Ranges() As Variant)
    Dim n As Long
    For n = LBound(Ranges) To UBound(Ranges)
        Func1 = Func1 + Application.WorksheetFunction.Sum(Ranges(n))
    Next
End Function
于 2021-11-22T22:56:29.567 回答