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
谢谢!
【问题讨论】:
您似乎将Range
s 和数组混为一谈。可能值得一读cpearson.com/excel/ArraysAndRanges.aspx
即使删除“as range”或将其更改为其他内容也不会影响我的问题。
对,因为来自Range
的Variant
数组是二维的,您不应该使用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 多个数组参数的主要内容,如果未能解决你的问题,请参考以下文章
在 VBA 的 UDF 中将单元格作为参数传递的正确方法是啥?
当用户输入超过预期的参数时,强制 VBA 中的 UDF 显示 MsgBox?