首页 > 解决方案 > VBA UDF 多个数组参数

问题描述

我正在尝试在 VBA 中创建一个 UDF,它将多个大小相等的数组作为参数,然后循环遍历它们,并为每个数组保持相同的索引。

我已将代码设置如下。

Public Function TwoArrays(TargetRange(), CriteriaRange())
dim value as range
for each value in TargetRange

next
end function

问题是我无法让 TargetRange 的索引在 CriteriaRange 中使用,即使我可以出于任何原因,每当我放类似的东西时

CriteriaRange(2)

我得到一个错误,而不是该索引中发生的事情。

有没有一种方法可以让 UDF 将数组视为普通 VBA 数组,我可以按照以下方式做一些事情


Public Function TwoArrays(TargetRange(), CriteriaRange())
dim result as range
for i = lowerbound(TargetRange) to ubound(TargetRange)
     If CriteriaRange(i) > 0 then
           result = result + TargetRange(i)
     end if
next i
end function

谢谢!

标签: arraysexcelvbauser-defined-functions

解决方案


像这样:

Public Function TwoArrays(TargetRange As Range, CriteriaRange As Range)
    Dim result, arrT, arrC, r As Long, c As Long
    arrT = TargetRange.Value
    arrC = CriteriaRange.Value
    
    'probably should add some code here to check both ranges are the same size...
    
    For r = 1 To UBound(arrT, 1)
        For c = 1 To UBound(arrT, 2)
            If arrC(r, c) > 0 Then result = result + arrT(r, c)
        Next c
    Next r
    TwoArrays = result
End Function

推荐阅读