从函数VBA返回动态数组

从函数VBA返回动态数组,vba,Vba,我试图创建一个输出数组的函数。 然而,我得到了左侧的函数调用必须返回Variant或 对象如何从该函数返回动态数组 Public Function Fibonacci_Array(max As Integer) As Integer Dim result() As Variant ReDim result(0 To max) '' Array indices. Dim i1 As Integer Dim i2 As

我试图创建一个输出数组的函数。 然而,我得到了左侧的函数调用必须返回Variant或 对象如何从该函数返回动态数组

Public Function Fibonacci_Array(max As Integer) As Integer


    Dim result()   As Variant
    ReDim result(0 To max)

    '' Array indices.
    Dim i1         As Integer
    Dim i2         As Integer
    Dim i          As Integer

    i1 = 0
    i2 = 1


    '' Array values.
    Dim newVal     As Long
    Dim prev2      As Long
    Dim prev       As Long

    prev2 = 0
    prev = 1

    '' Loop through
    While prev <= max

            result(i1) = prev2
            result(i2) = prev


            newVal = prev + prev2
            ''Debug.Print newVal

            prev2 = prev
            prev = newVal

            i1 = i1 + 1
            i2 = i2 + 1
    Wend

    '' Problem here.
    Fibonacci_Array() = result

End Function
公共函数Fibonacci_数组(最大为整数)为整数
Dim result()作为变量
重拨结果(0到最大值)
“”数组索引。
作为整数的Dim i1
作为整数的Dim i2
作为整数的Dim i
i1=0
i2=1
“”数组值。
暗淡的纽瓦尔像长的一样
长2倍
与上一个一样长
prev2=0
prev=1
“”循环通过

而prev
Variant
是向函数传递数组或从函数传递数组时最灵活的类型

替换

Public Function Fibonacci_Array(max As Integer) As Integer
Dim result() As Variant

替换

Public Function Fibonacci_Array(max As Integer) As Integer
Dim result() As Variant

替换

Fibonacci_Array() = result

这将使它可以编译,但您似乎需要一些调试,因为当我输入

?Join(Fibonacci_Array(10),", ")
在即时窗口中,我得到:

0, 1, 1, 2, 3, 5, 8, , , , 

(如果您想要小于
max
的斐波那契数,这可能是您想要的,但是您可能需要使用
ReDim Preserve
在返回数组之前缩减数组的大小。如果您的意图是获取第一个
max
斐波那契数,那么罪魁祸首是行
而prev
Variant
是向函数传递数组或从函数传递数组时最灵活的类型

替换

Public Function Fibonacci_Array(max As Integer) As Integer
Dim result() As Variant

替换

Public Function Fibonacci_Array(max As Integer) As Integer
Dim result() As Variant

替换

Fibonacci_Array() = result

这将使它可以编译,但您似乎需要一些调试,因为当我输入

?Join(Fibonacci_Array(10),", ")
在即时窗口中,我得到:

0, 1, 1, 2, 3, 5, 8, , , , 

(如果您想要小于
max
的斐波那契数,这可能是您想要的,但是您可能需要使用
ReDim Preserve
在返回数组之前将数组缩减为大小。如果您的意图是获取第一个
max
斐波那契数,则罪魁祸首是行
,而返回类型为prev应相同,并且在分配函数值时不需要括号:

Public Function Fibonacci_Array(max As Integer) As Long()


    Dim result()   As Long
    ReDim result(0 To max)

    '' Array indices.
    Dim i1         As Integer
    Dim i2         As Integer
    Dim i          As Integer

    i1 = 0
    i2 = 1


    '' Array values.
    Dim newVal     As Long
    Dim prev2      As Long
    Dim prev       As Long

    prev2 = 0
    prev = 1

    '' Loop through
    While prev <= max

            result(i1) = prev2
            result(i2) = prev


            newVal = prev + prev2
            ''Debug.Print newVal

            prev2 = prev
            prev = newVal

            i1 = i1 + 1
            i2 = i2 + 1
    Wend

    '' Problem here.
    Fibonacci_Array = result

End Function

Sub a()

Dim b() As Long

b() = Fibonacci_Array(100)
End Sub
公共函数Fibonacci_数组(最大为整数)为Long()
Dim result()的长度相同
重拨结果(0到最大值)
“”数组索引。
作为整数的Dim i1
作为整数的Dim i2
作为整数的Dim i
i1=0
i2=1
“”数组值。
暗淡的纽瓦尔像长的一样
长2倍
与上一个一样长
prev2=0
prev=1
“”循环通过

而prev您的返回类型应该相同,并且在分配函数值时不需要括号:

Public Function Fibonacci_Array(max As Integer) As Long()


    Dim result()   As Long
    ReDim result(0 To max)

    '' Array indices.
    Dim i1         As Integer
    Dim i2         As Integer
    Dim i          As Integer

    i1 = 0
    i2 = 1


    '' Array values.
    Dim newVal     As Long
    Dim prev2      As Long
    Dim prev       As Long

    prev2 = 0
    prev = 1

    '' Loop through
    While prev <= max

            result(i1) = prev2
            result(i2) = prev


            newVal = prev + prev2
            ''Debug.Print newVal

            prev2 = prev
            prev = newVal

            i1 = i1 + 1
            i2 = i2 + 1
    Wend

    '' Problem here.
    Fibonacci_Array = result

End Function

Sub a()

Dim b() As Long

b() = Fibonacci_Array(100)
End Sub
公共函数Fibonacci_数组(最大为整数)为Long()
Dim result()的长度相同
重拨结果(0到最大值)
“”数组索引。
作为整数的Dim i1
作为整数的Dim i2
作为整数的Dim i
i1=0
i2=1
“”数组值。
暗淡的纽瓦尔像长的一样
长2倍
与上一个一样长
prev2=0
prev=1
“”循环通过

上一篇我希望我能给这个回答3票以上!一票正确回答我的问题,一票给出输出斐波那契序列的替代方法,一票提到比奈公式。我希望我能给这个回答3票以上!一票正确回答我的问题,一票给出输出斐波那契序列的替代方法ce,还有一个提到比奈公式。