web-dev-qa-db-ja.com

Excel用のVBAで多次元配列変数を初期化する方法

Microsoftサイト は、次のコードが機能することを示唆しています。

_Dim numbers = {{1, 2}, {3, 4}, {5, 6}}_

ただし、Excel VBAモジュールで使用しようとすると、エラーが発生します。以下は1D配列に対して機能します。

A = Array(1, 2, 3, 4, 5)

しかし、私は2D配列に対して同じことをする方法を見つけることができませんでした。何か案は?

11
user3807215

また、Evaluate関数と静的配列を利用して、簡略形式を使用することもできます。以下のコードでは、varDataが設定されています。ここで、[]Evaluate関数の省略形であり、{...}式は静的配列を示します。各行は;で区切られ、各フィールドは,で区切られます。これにより、simocoのコードと同じ最終結果が得られますが、構文は元の質問により近いものになります。

Sub ArrayShorthand()

    Dim varData As Variant
    Dim intCounter1 As Integer
    Dim intCounter2 As Integer

    ' set the array
    varData = [{1, 2, 3; 4, 5, 6; 7, 8, 9}]

    ' test
    For intCounter1 = 1 To UBound(varData, 1)
        For intCounter2 = 1 To UBound(varData, 2)
            Debug.Print varData(intCounter1, intCounter2)
        Next intCounter2
    Next intCounter1

End Sub
23
Robin Mackenzie

マイクロソフトのサイトは提案しています...

この提案はVB.NET用ですが、VBA用ではありません。

VBAについては、正しい方向に進んでいました。あなたはこれを行うことができます:

Dim A as Variant
A = Array(Array(1, 2), Array(3, 4), Array(5, 6))
11
Dmitry Pavliv

したがって、ここでは、その次元を伝えるだけで、何もない配列を生成します。 0は配列内の位置としてカウントされるため、次元はX + 1です。

Dim MyArray(X, X) As Integer

次に、あなたは例のために行うことによってそれを埋めます

MyArray (0,0) = 1
MyArray (0,1) = 2
MyArray (1,0) = 3
MyArray (1,1) = 4

...

等々。

それを埋めるより便利な方法が必要な場合は、それを埋める数値に固有のロジックがある場合、For Cyclesを使用できます。

1
Maxi