VBA UDF 多个数组参数

Posted

技术标签:

【中文标题】VBA UDF 多个数组参数【英文标题】:VBA UDF multiple array arguments 【发布时间】:2021-06-10 12:53:29 【问题描述】:

我正在尝试在 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

谢谢!

【问题讨论】:

您似乎将Ranges 和数组混为一谈。可能值得一读cpearson.com/excel/ArraysAndRanges.aspx 即使删除“as range”或将其更改为其他内容也不会影响我的问题。 对,因为来自RangeVariant 数组是二维的,您不应该使用For Each 循环...您是否阅读了引用的链接? 【参考方案1】:

像这样:

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

【讨论】:

以上是关于VBA UDF 多个数组参数的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA UDF 自动完成参数

在 VBA 的 UDF 中将单元格作为参数传递的正确方法是啥?

当用户输入超过预期的参数时,强制 VBA 中的 UDF 显示 MsgBox?

VBA,UDF中没有引号的字符串参数 - 如何访问它们的值?

如何在 VBA Excel UDF 参数中使用比较运算符?

我在 Excel VBA 中使用“InBetween”UDF,它适用于 43 行,然后停止工作