VBAの5大データ構造と3大実装を整理する
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
記事要約
VBAを楽しく書くには、構文やプロシージャだけでなく、データ構造を理解する必要があります。
この記事では、VBA実務でよく使う5つのデータ構造と、それを実現する3つの実装を整理します。
中心になるのは、配列、Collection、Dictionary、RecordSet、Treeです。実装としては、配列、連結リスト、ハッシュテーブルを意識します。
本記事の対象とゴール
VBAのデータ入れ物をなんとなく使っている人
配列、Collection、Dictionaryの違いを整理したい人
処理速度や検索方法を考えてデータ構造を選びたい人
先に結論
VBAで最初に理解すべきデータ構造は、配列、Collection、Dictionaryです。
配列は基本です。CollectionはExcelオブジェクトでもよく出てくる組み込みコンテナです。Dictionaryはキー検索に強い連想配列です。
さらに実務では、RecordSetのような表形式、Treeのような階層構造も出てきます。
これらを、配列、連結リスト、ハッシュテーブルという実装の考え方と結びつけると、使い分けが分かりやすくなります。
<!-- LWP_REWRITE_EXPANSION_記事104 -->
1. データ構造は入れ物の選択である
VBAでよく使うデータ構造は、配列、Collection、Dictionary、ユーザー定義型、クラスに大きく分けられます。どれも値を入れる道具ですが、得意な操作が違います。
配列は順番と件数が分かる処理に向いています。Dictionaryはキーで引く処理に向いています。Collectionは順番に保持する簡易な入れ物として使えます。ユーザー定義型やクラスは、複数の値をひとまとまりの意味として扱うときに使います。
2. 実装方法は目的で決める
同じ一覧でも、行番号で回すのか、社員番号で引くのか、複数項目をまとめて渡すのかで選ぶ入れ物は変わります。実務では、速さだけでなく、後から読んで意味が分かることも重要です。
順番に処理するだけなら配列。
キー検索が必要ならDictionary。
1件の業務対象をまとまりとして扱うなら型やクラス。
Excel範囲との受け渡しが中心なら二次元配列。
3. 3大実装を混同しない
Excel VBAでは、セル範囲、配列、Dictionaryを行き来する場面が多くあります。セル範囲は入出力、配列は処理、Dictionaryは検索や重複判定、と役割を分けると設計が安定します。
セルを直接1行ずつ処理し続けると、処理速度も設計もExcelの画面状態に引きずられます。まず配列へ取り込み、必要ならDictionaryで索引を作り、最後にセルへ戻す。この流れを基本形として持つと、実務マクロはかなり読みやすくなります。
1. 配列
配列はVBAの基本データ構造です。
Rangeから値を読むと2次元配列になります。スピル数式やワークシート関数とも関係します。VBAで大量データを扱うなら、配列は避けて通れません。
配列の強みは、添字によるアクセスが速いことです。
Dim values(1 To 3) As Stringvalues(1) = "A"values(2) = "B"values(3) = "C"Debug.Print values(2)一方で、VBAの配列は下限、上限、次元、Resizeの制約があり、使いやすいとは言い切れません。だからこそ、配列を直接扱う補助関数群が重要になります。
2. Collection
Collectionは、VBAに最初からあるコンテナです。
Excelオブジェクトにも、Worksheets、Workbooks、Range周辺など、多くのCollection的な構造があります。
Collectionの特徴は、先頭要素を削除しやすいこと、キー付きで値を入れられることです。キー一覧や値一覧を取り出す機能は弱いですが、簡易辞書のように使える場面があります。
注意点は、位置指定アクセスです。
x = coll(i)この形は便利ですが、内部構造によっては位置に応じて遅くなります。ループの中で多用すると、性能劣化の原因になります。
3. Dictionary
Dictionaryは、キーと値を対応させる連想配列です。
VBAでは Scripting.Dictionary を使うことが多く、VLOOKUPのVBA版と考えると入口として分かりやすいです。
Dim dict As ObjectSet dict = CreateObject("Scripting.Dictionary")dict.Add "A001", "山田"dict.Add "A002", "佐藤"Debug.Print dict("A001")Dictionaryでは、キーの型に注意が必要です。
1、1.0、"1"、"1.0" は同じに見えても別キーになり得ます。キーに使う値は、CStr、CLng、CDbl などで明示的に型をそろえる方が安全です。
4. RecordSet
RecordSetは、表形式のデータ構造として考えられます。
Excel VBAでは、セル範囲や2次元配列で表を扱うことが多いですが、データベース的に「行」と「列」を意識するなら、RecordSetの考え方が役に立ちます。
RecordSetを直接使わない場合でも、業務データを次のように見ることは重要です。
1行が1件のデータ
1列が1項目
キーで行を識別する
集計や検索は表構造に対して行う
この視点を持つと、セル番地中心のマクロから抜けやすくなります。
5. Tree
Treeは階層構造です。
フォルダー構造、部門階層、親子明細、構文解析、XMLやJSONのような入れ子データで出てきます。
VBAでTreeを扱う頻度は配列やDictionaryほど高くありません。しかし、階層データを無理に平たい表として扱うと、処理が複雑になります。
親子関係があるなら、Treeとして見る。これだけでも設計しやすくなります。
3大実装として見る
データ構造を使い分けるときは、実装の考え方も知っておくと判断しやすくなります。
配列は、添字で素早くアクセスする実装です。
連結リストは、要素同士が次の要素をたどる実装です。Collectionを理解するときに役立ちます。
ハッシュテーブルは、キーから場所を計算して値を取り出す実装です。Dictionaryを理解するときに役立ちます。
この3つを知っているだけで、なぜ速いのか、なぜ遅いのか、どこで使うべきかが見えてきます。
まとめ
VBAでは、配列、Collection、Dictionaryをまず理解することが重要です。
さらに、表として扱うRecordSet的な考え方、階層として扱うTreeの考え方を知ると、業務データをより自然に表現できます。
データ構造を知ることは、単に速いコードを書くためではありません。
データをどう持つかが決まると、関数分割、検索、集計、テスト、保守の形が決まります。
VBAを楽しく書くためには、データの入れ物を選ぶ力が必要です。
出典メモ- 元Posfie URL: https://posfie.com/@hoehoe1234/p/9Sb4IAH
元Posfieタイトル: 2022-02-23 VBA 5大データ構造3大実装を理解してVBAを楽しく書こう
投稿者: hoehoe1234
投稿数: 24
画像確認: 画像なし
取得・確認日: 2026-06-11
