2015-04-29 25 views
0

我有一個返回數組的自定義用戶函數(UDF)。我在大範圍的單元格中使用Array Array。
返回數組的長度取決於函數參數。 這很好,除了一件事:當返回數組的長度小於爲數組公式定義的範圍時,「超出範圍」條目全部設置爲#N/A自定義用戶函數(UDF)和動態範圍

有沒有辦法獲得自定義用戶函數內的數組公式範圍(所以,如果需要,我可以準備一個更大的數組返回),或者返回某種迭代器(而不是數組) ),尺寸不受限制,如果超出範圍,將返回""

+1

使用[ReDim Preserve](https://msdn.microsoft.com/en-us/library/vstudio/w8k3cys2.aspx)在您輸入數值時構建數組。舉個例子,你可以參考我的答案:[擦除數組中的空單元格](http://stackoverflow.com/questions/29930523/erase-empty-cells-in-an-array/29931503#29931503)。 – Jeeped

+2

你能顯示你的代碼嗎? – Steven

回答

1

這是一個非常愚蠢的例子......一個UDF以列的形式返回第一個素數:

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檢測它有多少個單元,以填補,如果該值超過,餘額填充空白。

+0

完美。我需要的只是'Application.Caller.Rows.Count'。 –