配列の次元数には最大限度がある

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のヘルプの内容と合いません。

要素数を3にしてやってみると、以下の1つ目の16次元配列はOKですが、2つ目の17次元配列はNGでした。

NGの場合はメモリ不足でExcelが異常終了するかエラーメッセージが出力されました。

 

最大次元数よりメモリが不足する

おそらくですが、理論上は配列の最大次元数は要素数が2であれば31次元と思われます。

しかし、その次元数に達する前にメモリ不足の方が発生してしまい、実際には最大次元数であることを確認できません。

実際には多次元配列を使うことはほとんどないと思います。

一応参考程度で。