我有一個函數,它將一系列值作爲輸入(只是一列)以及一些閾值。我想返回一個範圍,該範圍經過濾以包含來自原始範圍的所有大於閾值的值。我有以下代碼:Excel UDF濾波器範圍
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可能不喜歡不連續的範圍。 – user3357963