Excel VBAで複数のデータを扱う際によく使うのが、以下の4つのデータ構造です:
- 配列(Array)
- Dictionary
- Collection
- Type(ユーザー定義型)
それぞれの特徴と使い分けをまとめました。
📊 比較表
項目 | 配列(Array) | Dictionary | Collection | Type(ユーザー定義型) |
---|---|---|---|---|
アクセス方法 | インデックス(0,1,2…) | キー(文字列/数値) | インデックス or 名前(任意) | ドット記法(.プロパティ名) |
データ型の混在 | 不可(基本同じ型) | 可(キーも値も任意の型) | 可 | 可 |
順序 | 保持される | 保証されない | 保持される | 該当なし(構造体) |
要素の追加/削除 |
ReDim が必要 |
.Add , .Remove
|
.Add , .Remove
|
宣言時に固定 |
キーのユニーク性 | なし | キーはユニーク | 任意(キー省略も可) | 項目名はユニーク |
用途 | 整列データ、順序付きリスト | キー検索、高速な関連付け | シンプルなデータの集合 | 1件の複数項目データを一つに束ねる |
🔹 配列(Array)
Dim fruits(2) As String
fruits(0) = "りんご"
fruits(1) = "バナナ"
fruits(2) = "みかん"
MsgBox fruits(1) ' 結果: バナナ
- 順序あり
- 値の集合に適している
- 要素数を変えるには ReDim が必要
🔹 Dictionary
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "りんご", 100
dict.Add "バナナ", 80
MsgBox dict("バナナ") ' 結果: 80
- キーと値のペア(ハッシュテーブルのような構造)
- 高速検索が可能
- 重複防止や集計処理に向いている
- Dictionaryは Microsoft Scripting Runtime を参照設定すれば補完が効きます。
🔹 Collection
Dim col As Collection
Set col = New Collection
col.Add "りんご"
col.Add "バナナ"
MsgBox col(1) ' 結果: りんご
- 順番を保持
- 操作が簡単で軽量
- キー付きで追加も可能だが、ユニークでなくても良い
- Collectionは For Each でループ可能ですが、キーでの直接アクセスはできません(ただし名前付きAddは可能)。
🔹 Type(ユーザー定義型)
Type 商品
名前 As String
価格 As Long
在庫 As Integer
End Type
Sub TestType()
Dim item As 商品
item.名前 = "りんご"
item.価格 = 100
item.在庫 = 30
End Sub
- 複数のプロパティを1つにまとめて構造体的に扱える
- 配列やCollectionと組み合わせて「構造体の配列」も可能
- Typeはモジュールの先頭で Type を定義する必要があります。
🧩 使い分けまとめ
目的 最適な構造
- 順番重視、単純なリスト処理
- 配列(Array)
- Collection
- キー付きで意味のあるデータを扱いたい
- Dictionary
- 集計や重複チェック、カテゴリ管理をしたい
- Dictionary
- データの入れ物をあとから追加・削除したい
- Dictionary
- Collection
- 複数項目を1レコードとして扱いたい
- Type(+配列(Array)など)