・・・・・・ブログ村参加中!・・・・・・
応援お願いいたします!
・・・・・・・・・・・・・・・・・・・・
皆さん、おはようございます。
今日は、VBA関連です。
VBAを使用したマクロって
作業短縮にとても便利ですよね(^^)
どのパソコンでも
VisualStudioとかのIDEは
入っていなくても
Excelは入っていることが多いので
使用する環境は
整っていることが多いです。
そういった意味で
とても使いやすいのでは
ないでしょうか。
そんな中で、C#やVB.NETのListのような
使い方ができるDictionaryについて
今回ご紹介したいと思います。
配列のようにRedimしなくてよく
どんどん追加できると
いった利点があります。
以前は、key値とItem値の
一対一でしか使用できない為、
使いづらいなと思っていましたが
使い方次第では
その点も克服できることが分かり
とても便利だと感じました。
今回はそんなとても便利な
VBAのDictionaryの使い方です。
最後に他人のVBAを見て
あっ、なるほどと思った
使い方も最後に書きたいと思います(^^)
- 1.Dictionaryオブジェクトとは
- 2.Dictionaryを使用する為の下準備
- 3.要素の追加方法(Add)
- 4.Keyの存在確認方法(Exists)
- 5.値セットを削除する方法(Remove及びRemoveAll)
- 6.Key及びItemの全ての値を配列で取得する方法(Keys及びItems)
- 7.値セットのセット数をカウントする(Count)
- 8.一歩踏み込んだ使い方
1.Dictionaryオブジェクトとは
Dictionaryオブジェクトは
キーとデータを
セットにして格納する
オブジェクトです。
Keyの部分に文字列等をセット出来る為、
辞書、連想配列と呼ばれます。
配列はインデックス番号で
データを引っ張りますが
連想配列はKeyで
データを引っ張ります。
Keyは、重複できないので
ご注意ください。
2.Dictionaryを使用する為の下準備
CreateObjectを使用する場合と
参照設定を行う方法があります。
■CreateObjectを使用する場合
下記の宣言を記載すれば
使用する準備が整います。
Dim ディクショナリ名 As Object
Set ディクショナリ名 = _
CreateObject("Scripting.Dictionary")
※「_」は改行する際に
同じ行のコードを表すものです。
1行に記載する場合は
必要ありません。
■参照設定を行う場合
1.メニューバーのツール、
参照設定をクリックします。
2.「Microsoft Scripting Runtime」を
選択してOKをクリックする。
※画像にはチェックが
入っていませんが
実際はチェックを入れた状態で
OKをクリックします。
3.下記の宣言を記載して使用する。
※2行で書く場合
Dim ディクショナリ名 As Dictionary
Set ディクショナリ名 = New Dictionary
※1行で書く場合
Dim ディクショナリ名 As New Dictionary
3.要素の追加方法(Add)
下記で値セットを
追加することが出来ます。
ディクショナリ名.Add Key , Item
Debug.Printは「ITEM」が出力されます。
4.Keyの存在確認方法(Exists)
下記でKeyの存在確認を
行うことが出来ます。
Debug.Printは「True」が出力されます。
5.値セットを削除する方法(Remove及びRemoveAll)
下記での値セットを
取得することが出来ます。
※Keyに対応した値セットを削除する場合
ディクショナリ名.Remove(KEY)
※全削除する場合
ディクショナリ名.RemoveAll
最初のFor Eachでは、
Debug.Printは「ITEM2」、「ITEM3」が
出力されます。
※KEY3の値はITEM3に
するつもりでしたが
間違えました苦笑
次のFor Eachでは、
Debug.Printは何も出力されません。
6.Key及びItemの全ての値を配列で取得する方法(Keys及びItems)
下記でのKeysとItemsの全値を
取得することが出来ます。
ディクショナリ名.Keys
ディクショナリ名.Items
最初のFor Eachは、
「KEY1」「KEY2」が
出力されます。
次のFor Eachは、
「ITEM1」「ITEM2」が
出力されます。
7.値セットのセット数をカウントする(Count)
下記でのセット数を
取得することが出来ます。
ディクショナリ名.Count
8.一歩踏み込んだ使い方
今回ご紹介する方法は、
・同じKeyがあった場合は
追加しない方法
※エラー回避
・複合キーに対応する方法
・複合値に対応する方法
データはこちらの本の
Dokoqlに拝借しました。
※自分の時よりだいぶ進化していて
驚きました汗
今回のマクロは
H行、I行、J行にKeyを入れて
一致するものを
K行、L行、M行に
出力するという内容です。
まずは
「同じKeyがあった場合は
追加しない方法」
です。
これはDictionaryのExistsを
使用することで対応可能です。
Existsは、存在すれば
Trueを返すので
無ければFalseを返します。
なのでIf Notと組み合わせれば
エラーを起こさず
追加することが出来ます(^^)
そして、複合キーと複合値の
対応方法は無理やり
くっつけてしまうというものです。
そして、後から取り出せるように
「-」だったり、「/」だったり
記号で繋げて
後で分割するという方法です。
ネットで他の人が
作ったプログラムを見て
なるほどと思いました(^^)
ちなみに実行結果はこんな感じです。
他にもCompareModeなどといった
プロパティもありますが、
今回はここまでとしたいと思います(^^)
大変便利なので
是非使ってください(*^^*)
それでは、またヽ(^o^)丿
9月10日(土) 記録
■プロジェクトマネージャ試験
・テキスト読込 実施済
・YouTube解説視聴 未実施
・午前Ⅰ過去問 20問
・午後Ⅰ過去問 未実施
・午後Ⅱ
午後Ⅱ問題読み込み 実施済
■動画学習 実施済
IPA秋季試験まで 28日
この記事を最後まで読んで頂いて、
本当にありがとうございます!
もし、記事が参考になった、
面白かったと少しでも
感じていただくことが出来たなら、
クリックしていただけたら嬉しいです(^^)
応援お願いいたします!