首页 > 解决方案 > 尽管可以在 Debug.Print 中看到,但函数未正确返回数组

问题描述

我正在编写一个 Excel VBA 函数,该函数返回一个数组以在其他函数中使用。GenerateBlendedReturnSeries当我在 Excel 工作表中测试该函数并用于ctlr-shift-enter查看完整结果时,整个数组都为零。然而,奇怪的是,当我检查时Debug.Print (BlendedReturnSeriesArray(300, 1)),会返回正确的非零值。为什么函数无法正确返回此结果?返回的 I 数组为 329 x 1,并且""在乘法/加法for loop返回错误时包含行中的值。

Function GenerateBlendedReturnSeries(AccountID1 As String, Account1Proportion As Double, _
     Optional ByVal AccountID2 As String, Optional ByVal Account2Proportion As Double, _
     Optional ByVal AccountID3 As String, Optional ByVal Account3Proportion As Double) As Variant 'Vs. As Double()

' CODE IN BETWEEN

Dim BlendedReturnSeriesArray As Variant
    ReDim BlendedReturnSeriesArray(ArraySize, 1)

    Debug.Print (ArraySize)

    On Error Resume Next
    For i = 0 To UBound(BlendedReturnSeriesArray)

        BlendedReturnSeriesArray(i, 1) = _
          Account1PeriodReturnSeriesArray(i, 1) * Account1Proportion _
        + Account2PeriodReturnSeriesArray(i, 1) * Account2Proportion _
        + Account3PeriodReturnSeriesArray(i, 1) * Account3Proportion
        'Debug.Print (BlendedReturnSeriesArray(i, 1))
        'Debug.Print (i)

    Next i

    On Error GoTo 0

    Debug.Print (BlendedReturnSeriesArray(300, 1))

    GenerateBlendedReturnSeries = BlendedReturnSeriesArray 'BlendedReturnSeriesArray

End Function

标签: arraysexcelvbaexcel-formula

解决方案


除非你这样做

ReDim BlendedReturnSeriesArray(1 To ArraySize, 1 To 1)

或者您正在使用Option Base 1(绝不是一个好主意),您的返回数组的大小将设置为(0 到 ArraySize,0 到 1),因此您很可能只看到数组的第一个“列”(零索引)你的工作表。如果您扩展公式以涵盖两列,您将看到缺少的数字。


推荐阅读