Dictionaryは理解すればVBAの速度改善やコードの可読性が上がります。
Dictionaryは文字通り辞書(連想配列)の事で、他言語では「ハッシュ」と呼ばれたりします。
Dictionaryを使用する前の準備
参照設定する場合
VBEメニューから「ツール」→「参照設定」を選択し、「Microsoft Scripting Runtime」
Dim dic As Dictionary Set dic = New Dictionary
参照設定しない場合
Dim dic As Object Set dic = CreateObject("Scripting.Dictionary")
メソッド・プロパティ一覧
メソッド名 | 説明 |
Add | レコードを追加 |
Remove | レコードを削除 |
Exists | 指定されたキー(key)の存在確認 |
RemoveAll | レコードを全て削除 |
Keys | キーを配列にして返す |
Items | 値(Item)を配列にして返す |
プロパティ名 | 説明 |
Count | レコード数を返す |
Item | Itemに対するKeyを返す |
Key | Keyに対するItemを返す |
CompareMode | 文字列比較キー比較モードの設定 |
Dictionaryの基本・メソッド
- キーと要素を追加する【Addメソッド】
- キーの要素を変更・更新する
- キー(要素)を削除する【Removeメソッド】
- キー(要素)を全て削除する【RemoveAllメソッド】
- キーの大文字小文字の区別をしない【CompareModeプロパティ】
- キーが存在するかチェックする【Existsメソッド】
Dictionaryのデータを参照する
Dictonaryの使い方
WorksheetFunction.SumIfのように条件付きでの集計や
WorksheetFunction.vLookUpのように条件付きでの検索の場合、Dictionaryのが断然早いです。
さらに活用してほしいのが、
Dictonaryの使い方として、
①単純なDictionaryの場合、キーのみ使用して重複チェックをする。
②少し有効活用して連想配列として利用
具体的にはSumif
りんご 10
みかん 20
ぶどう 30
りんご 10
↓↓↓↓↓↓↓↓↓↓
りんご 20
みかん 20
ぶどう 30
りんご 10
みかん 20
ぶどう 30
りんご 10
↓↓↓↓↓↓↓↓↓↓
りんご 20
みかん 20
ぶどう 30
③これが本来の使い方 Dictionaryに配列を格納する【入れ子】
具体的には社員名簿管理
Key | Item1 | Item2 | Item3 |
1 | 東京 | 営業 | 青木 |
2 | 東京 | 営業 | 田中 |
3 | 東京 | 営業 | 喜田 |
4 | 大阪 | 営業 | 浅田 |
5 | 大阪 | 事務 | 大森 |
6 | 大阪 | 事務 | 加藤 |
Key1に対して配列で東京/営業/青木のデータを作成する事で、データの有効活用できます。
エラー発生時
- Existsが動作しないのはValueで入れてない為
- ユーザー定義型変数はDictionaryに代入不可
- 「実行時エラー457 このキーは既にこのコレクションの要素に割り当てられています」が出た場合
- 「実行時エラー451:Property Letプロシージャが定義されておらず、Property Getプロシージャからオブジェクトが返されませんでした」が出た場合
- DictionaryにAddしていなくてもKeyが追加される
その他
- 配列内の重複した要素を削除する【配列→Dictionaryに変換】
- 指定したセル範囲を配列としてDictionaryに格納する
- 指定したセル範囲のItemを合計
- 指定したセル範囲をKeyとItemを作成
- 指定したセル範囲を重複削除
コメント