※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

VBA|Itemプロパティ(Dictionaryオブジェクト)

Dictionaryオブジェクトは、連想配列や辞書とよばれるオブジェクトのひとつでキー(Key)とアイテム(Item)とよばれる値をセットにして追加(登録)することができることが大きな特徴です。またDictionaryオブジェクトは、複数の便利なメソッドとプロパティをもっています。

こちらの記事では、連想配列(Dictionaryオブジェクト)のメソッドやプロパティの使いかたを紹介しています。

PR

スクール選びにお悩みですか?

動画編集、ロボット、AIとテクノロジーの進化が目まぐるしい時代だからこそ身につけるなら即戦力のスキル。

豊富なコースが選べて、独自開発されたカリキュラムの採用で業界有数の学習継続率!

さらにスキル習得だけじゃない。卒業後の転職や副業まで激アツなサポートが無料!!

Itemプロパティは連想配列(Dictionaryオブジェクト)の要素のアイテム(Item)を返す

Itemプロパティは、連想配列(Dictionaryオブジェクト)に登録されている要素のアイテム(Item)を設定または返します。連想配列(Dictionaryオブジェクト)にはItemsメソッドもありますが、こちらのプロパティは単数形の「Itemと書きます。Itemプロパティの引数にはキー(Key)を指定しますが、登録されていないキー(Key)が指定された場合は空文字が返されます。

連想配列(Dictionaryオブジェクト)は複数のデータを登録ができることから、配列のようにデータリストをあつかうことができるオブジェクトです。最大の特徴は、キー(Key)とアイテム(Item)のペア単位で要素を管理し、キー(Key)をつかってアイテム(Item)を取り出すことができます。また要素は追加・変更・抽出・削除などが可能です。

連想配列(Dictionaryオブジェクト)については、ほかの記事で紹介しています。連想配列(Dictionaryオブジェクト)の詳しい特徴や基本的な使い方、具体的な使用方法などについて知りたい人は以下のリンクをクリックして記事をご覧になってください。

※連想配列(Dictionaryオブジェクト)についてはこちら

Itemプロパティ構文

連想配列(Dictionaryオブジェクト).Item(Key)

指定したキー(Key)とペアになっているアイテム(Item)の値を返します。

連想配列(Dictionaryオブジェクト).Item(Key) = [NewItem(新しい値)]

=(イコール)設定値と書くことで、アイテム(Item)の設定または変更します。

指定したキー(Key)がDictionaryオブジェクトに登録されていない場合は要素の追加になります。

Itemプロパティの構成要素と引数

要素/引数 必須/任意 説明
オブジェクト
(object)
必須 Dictionaryオブジェクトの名前を指定します。
キー
(Key)
必須 Dictionaryオブジェクトに登録されているまたは追加するキー(Key)を指定します。
新しい値
(NewItem)
任意 指定したキー(Key)とセットになっているアイテム(Item)の新しい値です。
キー(Key)が未登録の場合は指定したキー(Key)とアイテム(Item)を追加します。

Dictionaryオブジェクトの要素のアイテム(Item)を設定または返してくれるよ。

Itemプロパティつかったサンプルマクロ

連想配列(Dictionaryオブジェクト)のItemプロパティをつかったサンプルマクロを紹介します。
Itemプロパティの基本的な使用例として、要素のアイテム(Item)の取り出し、値の変更をしています。また、未登録の要素のキー(Key)を指定した場合の動作をサンプルマクロとともに見ていきます。

ItemプロパティでDictionaryオブジェクトの要素のアイテムを返す

以下のマクロは、連想配列(Dictionaryオブジェクト)である「MyDic」に登録されている要素のItemプロパティを返します。

Option Explicit

Sub Dic_study1() 'DictionaryオブジェクトのItemプロパティはアイテム(Item)を返すか設定する

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic As Dictionary
Set MyDic = New Dictionary

'Addメソッドでキーとアイテムを要素として追加する
MyDic.Add "クワッス", "あお"
MyDic.Add "ホゲータ", "あか"
MyDic.Add "ニャオハ", "みどり"

'Itemプロパティは要素のアイテム(Item)を返します。
Debug.Print MyDic.Item("ニャオハ") '実行結果>>>みどり

End Sub

宣言したDictionaryオブジェクトである「MyDic」にAddメソッドで3つの要素を追加しています。その後、Debug.PrintをつかってItemプロパティを返す内容となっています。アイテム(Item)の取り出しには、Itemプロパティの引数としてペアとなっているキー(Key)を指定します。

サンプルマクロの実行結果をみていきましょう。

Itemプロパティで「MyDic」に登録されているキー(Key)のなかで”ニャオハ”を指定したため、要素としてペアになっているアイテム(Item)の”みどり”が返ってきました。

ItemプロパティはDictionaryオブジェクトのアイテム(Item)を取り出したいときに使えるね。

DictionaryオブジェクトのItemプロパティをつかって新しい値に変更する

以下のマクロは、連想配列(Dictionaryオブジェクト)のItemプロパティに「MyDic2」に登録されている要素のアイテム(Item)を新しい値に変更します。

結果の確認方法として、1度目のItemプロパティでアイテム(Item)を取り出したあと、今度はItemプロパティをつかって値の変更をします。そのあと再びItemプロパティでアイテム(Item)を取り出す処理をしています。

Option Explicit

Sub Dic_study2() 'DictionaryオブジェクトのItemプロパティはアイテム(Item)を返すか設定する

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic2 As Dictionary
Set MyDic2 = New Dictionary

'Addメソッドでキーとアイテムを要素として追加する
MyDic2.Add "クワッス", "あお"
MyDic2.Add "ホゲータ", "あか"
MyDic2.Add "ニャオハ", "みどり"

'1度目:Itemプロパティは要素のアイテム(Item)を返します。
Debug.Print "1度目のアイテム取り出し: " & MyDic2.Item("クワッス") '実行結果>>>あお

'Itemプロパティで要素のアイテム(Item)を変更します。
MyDic2.Item("クワッス") = "青"

'2度目:Itemプロパティは要素のアイテム(Item)を返します。
Debug.Print "2度目のアイテム取り出し: " & MyDic2.Item("クワッス") '実行結果>>>青

End Sub

宣言したDictionaryオブジェクトである「MyDic2」にAddメソッドで3つの要素を追加しています。その後、Debug.PrintをつかってItemプロパティを返す内容となっています。

こちらのサンプルマクロでは、Itemプロパティをつかった要素のアイテム(Item)の取り出しと、値の変更の2つの処理を実行しています。1度目と2度目のアイテム(Item)の取り出しの間で値の変更をする処理をしています。

サンプルマクロの実行結果をみていきましょう。

どちらのItemプロパティも引数としてキー(Key)として”クワッス”を指定しています。実行結果から1度目のDebug.Printでは”あお“、2度目のDebug.Printでは”“が返されました。おなじキーをつかった結果が変わったことから、Itemプロパティの処理によって要素のアイテム(Item)が変更されたことがわかります。

Itemプロパティをつかって要素のアイテム(Item)を変更することができたね。

DictionaryオブジェクトのItemプロパティに未登録のキー(Key)を指定する

こちらのサンプルマクロでは、配列(Dictionaryオブジェクト)の「MyDic3」に登録されていない要素のキー(Key)をItemプロパティの引数に指定した場合の動作を確認しています。

Option Explicit

Sub Dic_study3() 'DictionaryオブジェクトのItemプロパティはアイテム(Item)を返すか設定する

Dim DicItem As String

'連想配列の宣言(参照設定「Microsoft Scripting Runtime」チェックしておく)
Dim MyDic3 As Dictionary
Set MyDic3 = New Dictionary

'Itemプロパティの引数に未登録の要素のキー(Key)を指定する

'[A]
Debug.Print MyDic3.Item("クワッス") '実行結果>>>空文字

'[B]
DicItem = MyDic3.Item("ホゲータ")

'[C]
ThisWorkbook.Worksheets("TEST").Range("A1") = MyDic3.Item("ニャオハ")

'[D]
MsgBox MyDic3.Item("ウェルカモ"), vbOKOnly, "未登録の要素のキー(Key)を指定"

'Dictionaryオブジェクトのキー(Key)の配列データをJoin関数で取り出す
Debug.Print "①の結果:" & Join(MyDic3.Keys, " : ") '実行結果>>>クワッス : ホゲータ : ニャオハ : ウェルカモ

'Dictionaryオブジェクトのアイテム(Item)の配列データをJoin関数で取り出す
Debug.Print "②の結果:" & Join(MyDic3.Items, " : ") '実行結果>>> : : :

'Itemプロパティでアイテム(Item)を設定する
'[E]
MyDic3.Item("クワッス") = "あお"
MyDic3.Item("ホゲータ") = "あか"
MyDic3.Item("ニャオハ") = "みどり"
MyDic3.Item("ウェルカモ") = "青"

'[F]
MyDic3.Item("アチゲータ") = "赤"

'Dictionaryオブジェクトのキー(Key)の配列データをJoin関数で取り出す
Debug.Print "③の結果:" & Join(MyDic3.Keys, " : ")

'Dictionaryオブジェクトのアイテム(Item)の配列データをJoin関数で取り出す
Debug.Print "④の結果:" & Join(MyDic3.Items, " : ")

End Sub

Dictionaryオブジェクトである「MyDic3」を宣言したあと、なにも要素を追加していない状態でItemプロパティの引数にキー(Key)を指定してアイテム(Item)を出力してみます。

サンプルコード内で記述した[A]から[D]の箇所では、デバッグプリントやメッセージボックスなどをつかってDictionaryオブジェクトのMyDic3」に登録されていない要素のキー(Key)を指定しています。

さらに[E]では、それまでに登録した要素のアイテム(Item)の変更をしており、[F]登録されていない要素のキー(Key)とアイテム(Item)を指定しています。

[A]から[D]、[E]と[F]のあとでそれぞれキー(Key)とアイテム(Item)の配列データをJoin関数で取り出してみます。

どのようになるのか確認していきましょう。

全4回のJoin関数での配列データの取り出しの結果です。
(※画面上は見えませんが、最上段にはDebug.Print MyDic3.Item(“クワッス”)で返された空文字が入っています。)

結論から言ってしまえば、Itemプロパティで未登録の要素のキー(Key)を指定するとDictionaryオブジェクトに新たに要素が追加される処理になっています。

①の結果の時点では、「MyDic3」のキー(Key)の配列データを取り出しています。サンプルコードの[A]から[D]で指定した引数の値が取り出されました。

続いて②の結果ですが、”クワッス”、”ホゲータ”、”ニャオハ”、”ウェルカモ”のキー(Key)とペアになっているアイテム(Item)は登録されていないため、すべて空文字となりJoin関数の区切り記号だけが返ってきました。

③と④の結果は、直前の[E]と[F]の処理でそれまでに登録されていた要素のアイテム(Item)が取り出せました。[F]の箇所で新たに追加した”アチゲータ”と”赤”の要素についてもDictionaryオブジェクトの「MyDic3」に登録されていることがわかります。

このことからも、Itemプロパティで指定したキー(Key)がDictionaryオブジェクトに登録されていなかった場合は、Addメソッドのように要素の追加として処理されることがわかりました。

Itemプロパティで未登録のキー(Key)を指定すると要素として追加されるんだね。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました