【发布时间】:2012-09-12 20:06:39
【问题描述】:
我有一个函数,它以一系列值作为输入(只是一列)以及一些阈值。我想返回一个经过过滤的范围,以包含原始范围中大于阈值的所有值。我有以下代码:
Public Function FilterGreaterThan(Rng As Range, Limit As Double) As Range
Dim Cell As Range
Dim ResultRange As Range
For Each Cell In Rng
If Abs(Cell.Value) >= Limit Then
If ResultRange Is Nothing Then
Set ResultRange = Cell
Else
Set ResultRange = Union(ResultRange, Cell)
End If
End If
Next
Set FilterGreaterThan = ResultRange
End Function
问题在于,一旦某个数字低于阈值,则该数字之后高于阈值的其他数字不会被添加到范围中。
例如:
Threshold - 2
Numbers -
3
4
1
5
它将循环添加 3 和 4,但不会添加 5。我最终得到一个#value 错误。但是我没有收到任何错误,如果我只输入范围 - 3、4 或范围 - 3、4、1,它就可以正常工作。
【问题讨论】:
-
嗨,如果你把它放在像 =SUM(FilterGreaterThan(A1:A7,2)) 这样的另一个函数中,你的函数就可以正常工作。我认为您遇到的问题是您将 =FilterGreaterThan(A1:A7,2) 放在一个单元格中,当它返回一个多区域范围时,您会得到一个 #VALUE!错误。尽管如此,我还是不明白从 =FilterGreaterThan(A1:A7,2) 返回的结果,因为您只是从该范围内返回一个(似乎是)随机数。
-
如果在End Function前加上
Debug.Print FilterGreaterThan.Address,就可以看到函数的范围地址。看起来 UDF 可能不喜欢不连续的范围。
标签: vba excel excel-formula user-defined-functions