【VBA関係】VBAの「コレクション」、「配列」、「辞書」は何がちがう?|ポテの学習メモ #005

アフィリエイト広告を利用しています。
アイキャッチ画像

VBAには、複数のデータを扱うデータ構造に「コレクション」「配列」「辞書」がある。似ているが、それぞれにちょっと違う。

それぞれのデータ構造の違い

コレクション

VBAの標準のデータ構造で、複数の要素を保持可能。サイズ変更が自由にでき(動的に追加・削除可能)、順序を保持することができる。キーを指定することで、要素に名前を付けることも出来る。

主な用途

  • 小規模なデータ管理

利点

  • 手軽に使える
  • For Each ステートメントで繰り返し処理が可能
  • 要素に名前(キー)を付けて管理できる

欠点

  • キーの存在確認ができない
  • パフォーマンス的に大量データには向かない
  • キーや要素の一括取得が難しい

配列

同じ型の複数のデータを格納するVBA標準のデータ構造。宣言時にサイズを固定する静的配列と、後からサイズを変更する動的配列がある。

主な用途

  • 大量のデータを一時的に格納
  • シンプルなインデックス操作でのデータの管理

利点

  • 高速でメモリ効率が良い(データのアクセス速度が速い)
  • 大量のデータの処理に適している(速い)

欠点

  • サイズ変更にちょっと手間がかかる(Redim、Redim Preserve)
  • キーではなく、インデックスでしたアクセスできない
  • For Each が使いづらい(Variant型の動的配列でしか使えない)

辞書

Microsoft Scripting Runtime ライブラリを参照設定が必要。キーと値のペアでデータを管理する。動的にサイズを変更可能。

主な用途

  • キーを使って高速にデータを検索・管理できる
  • 大量のデータを扱う場合や、キーの存在確認が実用な場合の処理

利点

  • キーの存在確認が可能(Existsメソッド)
  • すべてのキーや値を一括取得できる(Dictionary.KeysDictionary.Items
  • 大量のデータ処理に適している(速い)

欠点

  • 外部ライブラリの参照設定がちょっと手間(初回だけだけどね)
  • 順序が保証されない(データ追加順に並ばない)
  • VBA標準ではないため環境によっては利用が制限される(たとえばMac版Excelでは使えない)

比較表

特徴 コレクション 配列 辞書
サイズ変更 自由 できるがちょっと手間 自由
データアクセス インデックス、キー インデックス キー
順序保持 追加順を保持 追加順を保持 保持しない(保証されない)
キーの存在確認 不可 不可 可能(Existsメソッド)
繰り返し処理(For Each) 可能 Variant型動的配列で可能 可能
メモリ効率 普通 高い 高い
参照設定の必要性 不要 不要 必要(Scripting Runtime)
大量データの管理 不向き 向いている 向いている

使い分けの例

シナリオ 推奨データ構造
要素の順序を保持しながら管理したい コレクション、配列
動的なサイズ変更が必要 コレクション、辞書、配列
固定サイズまたは大量データを効率的に処理したい 配列
キーでデータを検索・操作したい 辞書
キーの存在確認が必要 辞書
全てのキーや値を一括取得したい 辞書
For Eachで簡単に繰り返し処理したい コレクション、辞書、配列
軽量で高速な処理が求められる 配列
二次元以上のデータを扱いたい 配列
外部参照を使いたくない コレクション、配列
要素をキーとペアで管理しつつ順序も保持したい 辞書 + 補助的に配列やコレクション

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です