自定义用户函数 (UDF) 和动态范围
Custom User Function (UDF) and Dynamic Ranges
我有一个 return 数组的自定义用户函数 (UDF)。我在大量单元格的数组公式中使用它。
returned 数组的长度取决于函数参数。
这很好用,除了一件事:当 returned 数组的长度小于为数组公式定义的范围时,"out-of-range" 条目都设置为 #N/A
。
有没有办法在自定义用户函数中获取数组公式范围(因此,如果需要,我可以准备一个更大的数组 return),或者 return 一些一种不受大小限制的迭代器(而不是数组),并且在超出范围的情况下会 return ""
?
这是一个非常愚蠢的例子......一个 UDF 到 return 第一个 7 列形式的素数:
Public Function Primes()
'
' Array UDF to return the first 7 primes
'
Dim rN As Long, ary(1 To 7) As Long
Dim tdim As Long, i As Long
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
rN = Application.Caller.Rows.Count
tdim = wf.Max(rN, 7)
ReDim bry(1 To tdim, 1 To 1)
ary(1) = 1
ary(2) = 3
ary(3) = 5
ary(4) = 7
ary(5) = 11
ary(6) = 13
ary(7) = 17
For i = 1 To 7
bry(i, 1) = ary(i)
Next i
If tdim > 7 Then
For i = 8 To tdim
bry(i, 1) = ""
Next i
End If
Primes = bry
End Function
UDF 检测它必须填充多少个单元格,如果该值超过 7,余额将填满空白。
我有一个 return 数组的自定义用户函数 (UDF)。我在大量单元格的数组公式中使用它。
returned 数组的长度取决于函数参数。
这很好用,除了一件事:当 returned 数组的长度小于为数组公式定义的范围时,"out-of-range" 条目都设置为 #N/A
。
有没有办法在自定义用户函数中获取数组公式范围(因此,如果需要,我可以准备一个更大的数组 return),或者 return 一些一种不受大小限制的迭代器(而不是数组),并且在超出范围的情况下会 return ""
?
这是一个非常愚蠢的例子......一个 UDF 到 return 第一个 7 列形式的素数:
Public Function Primes()
'
' Array UDF to return the first 7 primes
'
Dim rN As Long, ary(1 To 7) As Long
Dim tdim As Long, i As Long
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
rN = Application.Caller.Rows.Count
tdim = wf.Max(rN, 7)
ReDim bry(1 To tdim, 1 To 1)
ary(1) = 1
ary(2) = 3
ary(3) = 5
ary(4) = 7
ary(5) = 11
ary(6) = 13
ary(7) = 17
For i = 1 To 7
bry(i, 1) = ary(i)
Next i
If tdim > 7 Then
For i = 8 To tdim
bry(i, 1) = ""
Next i
End If
Primes = bry
End Function
UDF 检测它必须填充多少个单元格,如果该值超过 7,余额将填满空白。