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

VBA|Addメソッド(Dictionaryオブジェクト)

連想配列(Dictionaryオブジェクト)は、連想配列や辞書とよばれるオブジェクトのひとつで、複数の便利なメソッドとプロパティをもっています。こちらの記事では、連想配列(Dictionaryオブジェクト)のメソッドやプロパティの使いかたを紹介しています。

PR

PCでスキルアップをしたい・Excelをしっかり学んで社内の評価を高めたい人は必見!
実務をプロから学べる「ユースフル」は講座の動画は永年見放題。安心のQ&A機能で分からないを解決。

Addメソッドは連想配列(Dictionaryオブジェクト)に要素を追加する

Addメソッドは、連想配列(Dictionaryオブジェクト)に要素を追加します。通常の配列と異なる点として、連想配列(Dictionaryオブジェクト)はキーとアイテムの要素のペアによる要素の指定ができます。

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

Addメソッドの構文

連想配列(Dictionary オブジェクト).Add key,item

※要素は左からキー、アイテムの順番で指定します。

Addメソッドの構成要素と引数

要素/引数 必須/任意 説明
オブジェクト
(object)
必須 宣言したDictionaryオブジェクトの名前を指定します。
キー
(key)
必須 追加するキーの要素を指定します。
アイテム
(item)
必須 追加するアイテムの要素を指定します。

追加するキー(key)が既に連想配列(Dictionary オブジェクト)に存在する場合は、エラーが発生します。アイテム(Item)は重複登録することが可能です。

キー(key)は同じものを登録できないんだね。

Addメソッドをつかったサンプルマクロ

連想配列(Dictionary オブジェクト)のAddメソッドをつかったサンプルマクロを紹介します。要素のもととなるデータによってイメージしやすいように、個別に指定した要素を追加するセルに書かれたデータを要素として追加する配列のデータを要素として追加する3つの種類のマクロを掲載しています。

Addメソッドで個別に指定した要素を追加する

以下のマクロは、Addメソッドをつかって宣言した連想配列(Dictionary オブジェクト)である「MyDic」にキーとアイテムの要素を追加します。

Option Explicit

Sub Dic_study1() '指定したデータを要素に追加する場合

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

'Addメソッドで要素を追加する(要素は左からキー、アイテムの順番で指定する)
MyDic.Add "クワッス", "あお" '「クワッス」がキー、「あお」がアイテムになる
MyDic.Add "ホゲータ", "あか"
MyDic.Add "ニャオハ", "みどり"

'キーを指定することでアイテムを取り出すことができる
Debug.Print MyDic("クワッス") '実行結果>>>あお
Debug.Print MyDic("ホゲータ") '実行結果>>>あか
Debug.Print MyDic("ニャオハ") '実行結果>>>みどり

End Sub

キーを指定することで、アイテムを取り出すことができました。

Addメソッドでセルに書かれたデータから要素を追加する

以下のマクロは、エクセルのシート1の表にあるデータを、Addメソッドを利用して連想配列(Dictionary オブジェクト)の「MyDic2」にキーとアイテムの要素として追加します。

要素の取り出しについては4つの方法で書いていますが、どれも同じ結果になるので1つのみが実行されるようにしています。

Option Explicit

Sub Dic_study2() 'セルデータから要素を追加する場合

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

'シート1の表からデータを取得する
With ThisWorkbook.Sheets(1)
Dim i As Integer 'くり返し用の変数を宣言する

'2行目からA列の最終行(10行目)までくり返す
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
'A列の値がキー、B列の値がアイテム
MyDic2.Add .Cells(i, 1).Value, .Cells(i, 2).Value 'セルの場所を適宜変更してください。
Next i

End With

'くり返しによる要素の取り出し(方法1)
Dim MyDicKey As Variant
For Each MyDicKey In MyDic2 'MyDic2は配列なので要素の分だけくり返す
Debug.Print MyDicKey; ":"; MyDic2(MyDicKey)
Next MyDicKey

''くり返しによる要素の取り出し(方法2)
'Dim j As Integer
'For j = 0 To UBound(MyDic2.Items) 'Itemsメソッドで配列の要素の分だけくり返す
' Debug.Print MyDic2.Keys(j); ":"; MyDic2.Items(j)
'Next j
'
''くり返しによる要素の取り出し(方法3)
'Dim k As Integer
'Do While k <= UBound(MyDic2.Items)
' Debug.Print MyDic2.Keys(k); ":"; MyDic2.Items(k)
' k = k + 1
'Loop
'
''くり返しによる要素の取り出し(方法4)
'Dim l As Integer
'Do Until l > UBound(MyDic2.Items)
' Debug.Print MyDic2.Keys(l); ":"; MyDic2.Items(l)
' l = l + 1
'Loop

End Sub

「MyDic2」に代入されたキーとアイテムをすべて取り出すことができました。

Addメソッドで配列のデータから要素を追加する

以下のマクロは、Addメソッドを利用して2つの配列データから連想配列(Dictionary オブジェクト)である「MyDic3」にキーとアイテムの要素を追加します。キー、アイテムの要素のあつまりをArray関数をつかって配列データにし、それぞれ「KeyArray」、「ItemArray」の変数に代入しています。

Option Explicit

Sub Dic_study3() '配列データから要素を追加する

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

'キーの配列の宣言
Dim KeyArray As Variant
'Array関数つかってキーの配列をつくる
KeyArray = Array("クワッス", "ホゲータ", "ニャオハ", "ウェルカモ", "アチゲータ", "ニャローテ", "ウェーニバル", "ラウドボーン", "マスカーニャ")

'アイテムの配列の宣言
Dim ItemArray As Variant
'Array関数つかってアイテムの配列をつくる
ItemArray = Array("あお", "あか", "みどり")

'くり返し用の変数を宣言する
Dim i As Integer, j As Integer

'上記の配列の要素を連想配列に追加する
For i = 0 To UBound(KeyArray)
MyDic3.Add KeyArray(i), ItemArray(j)
j = j + 1 'jをインクリメント

If j > 2 Then 'jが3以上になれば0に戻す処理
j = 0
End If
Next i

'くり返しによる要素の取り出し
Dim MyDicKey As Variant
For Each MyDicKey In MyDic3 'MyDic2は配列なので要素の分だけくり返す
Debug.Print MyDicKey; ":"; MyDic3(MyDicKey)
Next MyDicKey

End Sub

「MyDic3」に代入されたキーとアイテムをすべて取り出すことができました。

Addメソッドは要素を追加するときに使うものだね。

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

コメント

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