从 UDF 转换范围并return它

Transform a range and return it from a UDF

我正在尝试编写一个非常简单的 UDF,它将接受一个输入范围和 return 另一个范围。输出范围的每个单元格应等于输入范围单元格加 1。这是我所拥有的

Public Function Addone(rng As Range) As Range

    Dim i As Integer, N As Integer
    N = rng.Count

    For i = 1 To N
        Addone.cells(1,i) = rng.cells(1,i) + 1
    Next i

End Function

假设范围 "A1:C1" 包含数字 1,2,3。我然后转到工作表,select 一个单元格范围(输出范围,"A2:C2"),然后输入 Addone(A1:C1) 并按 Ctrl + Shift + Enter。但是,输出单元格中填充了 #VALUE

我检查了其他答案 here and here,但无法使它适用于我的情况。感谢任何帮助。

您不能将输出定义为范围并在单元格中对其求值 必须将输出类型更改为双数组。内部函数定义一个临时数组,重新定义其大小基础 N,然后分配给返回数组。以下应该做的。让我知道这是否解决了。

Public Function Addone2(rng As Range) As Double()

    Dim temp() As Double
    Dim i As Integer, N As Integer
    N = rng.Count
    ReDim temp(1 To N) As Double
    For i = 1 To N
        temp(i) = rng.Cells(1, i) + 1
    Next i
    Addone2 = temp
End Function