配列の次元数には最大限度がある
VBAでは多次元配列の利用が可能ですが、その次元数の最大には限度があります。以下のMicrosoftのヘルプでは「配列のすべての次元の長さは、(2 ^ 31) – 1 である Integer データ型の最大値に制限されます」とあります。
https://msdn.microsoft.com/ja-jp/library/b388cb5s(v=vs.90).aspx
ただ、この説明には矛盾があります。
2の31乗から1を引いた値は2147483647です。これはLong型の最大値です。おそらくMicrosoftのヘルプのIntegerはLongの誤りと思われます。そのためLong型として調べてみました。
検証
Long型は4バイトで-2,147,483,648から2,147,483,647の整数値となるため、最大値2,147,483,647が最大次元数かな?と思ったのですが、実際にやってみるとどうも違うようです。
私が行ったPCでは各次元の要素数を2で定義すると、24次元配列が可能でした。25次元はメモリ不足のエラーダイアログが表示されました。
24次元配列の領域は16777216個のため、Microsoftのヘルプの内容と合いません。
1 2 3 4 |
'// 24次元配列はOK Dim ary(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) '// 25次元配列はNG(メモリ不足エラー) Dim ary(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) |
要素数を3にしてやってみると、以下の1つ目の16次元配列はOKですが、2つ目の17次元配列はNGでした。
NGの場合はメモリ不足でExcelが異常終了するかエラーメッセージが出力されました。
1 2 3 4 |
'// 2の16乗 Dim ary1(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) As String '// 2の17乗 Dim ary2(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) As String |
最大次元数よりメモリが不足する
おそらくですが、理論上は配列の最大次元数は要素数が2であれば31次元と思われます。
しかし、その次元数に達する前にメモリ不足の方が発生してしまい、実際には最大次元数であることを確認できません。
実際には多次元配列を使うことはほとんどないと思います。
一応参考程度で。