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のデータを参照する
- キー/アイテム(要素)を取得する【Keyメソッド/Itemメソッド】
- キー数を取得する【Countメソッド】
- 要素(キー、アイテム)を配列に渡す【Keysメソッド/Itemsメソッド】
・一次元配列に変換(上記記事とも少し被ります)
・二次元配列に変換
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/Itemが追加される
コメント