2016-11-26 3 views
0

こんにちは皆さん、このお手伝いをさせていただきたいと思います。 返品を価格に変換する簡単な関数を書いた。それは無用ですが、私はそれを使用して私の問題を説明します。この関数は機能します。それは私が望むことをする。配列を返すVBA関数

Function ret2prices(ByVal r As Range) 

    Dim temp() As Variant 
    temp = r 

    Dim prices() As Variant 
    ReDim prices(1 To (UBound(temp, 1) + 1), 1) 
    prices(1, 1) = 1 

    For i = 2 To UBound(prices, 1) 
     prices(i, 1) = 1 + temp(i - 1, 1) 
     prices(i, 1) = prices(i - 1, 1) * prices(i, 1) 
    Next i 

    ret2prices = prices 

End Function 

問題は、私はExcelワークシートで使用するとき、それは常に0 が、私はそれを私はCtrl + Shiftキー+ ENTERでMMULTを使用するのと同じ方法を使用できるようにしたいと思い返すことです。なにか提案を?

ので、VBAで

+2

「prices」の第2次元は「1 to 1」で、今は「0 to 1」であり、関数は2列の配列を返します。 – BrakNicku

+1

CSEで2列の範囲の配列を使用しようとすると、@BrakNickuが正しく表示されます –

+0

あなたのポイントを取得できなかったことをご悔しい思います –

答えて

3

配列は0ベースのいるお時間をどうもありがとうございました:

ReDim prices(1 To (UBound(temp, 1) + 1), 1) 

ReDim prices(1 To (UBound(temp, 1) + 1), 0 To 1) 

に質問返され、期待される結果のコードと等価です、結果配列の2番目の列にあります。 2番目のディメンションの下限を1に変更すると、問題が解決されます。

+3

'Option Base 1'でも修正されます。私は一般的に 'Option Base 1'が好きではありませんが、モジュール内のすべての配列がVBAと範囲の間でデータを転送するように設計されていれば、おそらく有効なユースケースです。 –

関連する問題