自定义用户功能(UDF)和动态范围

时间:2015-04-29 15:50:38

标签: excel vba excel-vba excel-2010

我有一个返回数组的自定义用户函数(UDF)。我在一系列单元格的数组公式中使用它 返回数组的长度取决于函数参数。 除了一件事之外,这很有用:当返回数组的长度小于为数组公式定义的范围时,“超出范围”条目都设置为#N/A

有没有办法在自定义用户函数中获取数组公式范围(因此,如果需要,我可以准备一个更大的数组返回),或者返回某种迭代器(而不是数组)它的大小不受限制,如果超出范围会返回""吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常愚蠢的例子......一个UDF以列形式返回第一个 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 ,则余额将填充空白。