これは「配列」ではありませんが、VBA にはニーズに合ったDictionary
オブジェクト (このリンクも役立ちます) があります。への参照を追加する必要がありますが、動的に拡張できる型指定されMicrosoft Scripting Runtime
ていないキー付きディクショナリ (実際にはItem
プロパティは です) を作成できます。Variant
リンクにはより完全な例がありますが、基本的な使用方法は次のとおりです。
Set dict = New Dictionary
'Example for adding item to Dictionary
For i = 1 to 100
dict.Add Key:=i, Item:=someData
Next
'Example for retrieving item from dictionary by Key
For i = 1 to 100
Debug.Print dict(i)
Next
Collection
同様の機能と同様の使用法を提供するオブジェクトもありますが、 への参照を追加する必要はありませんが、特定のキーが存在するかどうかを確認するなど、より便利なメソッドをいくつか提供しますMicrosoft Scripting Runtime
。また、すべてのアイテムまたはキーを型付き配列として抽出できるようにするプロパティもあります。Dictionary
dict.Exists()
.Keys
.Items
Dictionary
Variant
配列を redim したくないと明示的に述べたとしても、作成後に配列のサイズを調整する他の唯一の方法はPreserve
、redim ステートメントで修飾子を使用することです。これにより、作成後に配列のサイズを柔軟に変更できるようになります。「ある程度の柔軟性」と言った理由は、配列の最後の次元しか変更できないからです。
Dim myarray(2, 2)
Redim Preserve myarray(2, 4) 'this works
Redim Preserve myarray(3, 4) 'this is not allowed
あなたが言及したように、実際には配列のサイズを変更していないため、これはリソースを集中的に使用します。実際には、新しい配列を作成し、古い配列の内容をコピーしているだけです。
最後のオプションは、VBA から .NET に切り替えることです。適切なバージョンの Visual Studioを自由に使用できると仮定すると、Office に付属している VBA エディターの代わりにVSTOにアクセスできるようになり、Excel やその他の Office 用の CLR 準拠のアドインを開発できるようになります。製品。これで、すべての .NET コレクションにアクセスできるようになります。繰り返しますが、.NET 配列にも同じ制限がある (サイズを変更できない) ため、これらは「配列」ではありませんが、必要に応じてコレクションのサイズを動的に変更できます。