Dim A
Set A = CreateObject("Scripting.Dictionary") '辞書を作成
A.Add "A", "10" '辞書に登録する
では、解説していきます。
Dictionaryに新しく登録する
「Dictionary」に新しく登録してみます。
「Add」を使ってキーとアイテムを登録する
「Add」を使ってキーとアイテムを登録してみます。
「Add」を使って登録する
Sub TEST1()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
'辞書に登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
End Sub
これで、「Dictionary」に値を登録できます。
「Dictionary」に登録すると、こんな感じで登録されます。
「キー」と「アイテム」がペアとなって登録される、という感じです。
「Dictionary」の値を出力する
「Dictionary」の値を出力してみます。
「For Each」を使って、登録してみます。
Sub TEST2()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
'辞書に登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
'辞書の値を出力する
Dim B
For Each B In A
Debug.Print B & " " & A(B)
Next
End Sub
では、VBAコードを実行してみます。
「Dictionary」の値を出力できました。
同じキーは登録できない
「Dictionary」には、同じキーは登録できません。
同じキーを登録するとエラー
同じキーを登録するとエラーとなります。
「"A"」を2回登録してみます。
Sub TEST3()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
'辞書に登録
A.Add "A", "10"
A.Add "A", "10" '←同じキーはエラーになる
End Sub
実行してみます。
同じ「キー」を登録するとエラー
同じ「キー」を登録するとエラーとなりました。
登録するときは「Exists」で存在を確認して登録する
重複データがあるような場合は、「Exists」で存在を確認して登録する必要があります。
Sub TEST4()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
'辞書を登録
A.Add "A", "10"
'辞書に登録されていない場合
If A.exists("A") = False Then
A.Add "A", "10" '辞書を登録
End If
'辞書の値を出力する
Dim B
For Each B In A
Debug.Print B & " " & A(B)
Next
End Sub
では、VBAコードを実行してみます。
「Exists」で確認した登録
1つ目の「"A"」のキーとアイテムだけが登録されています。
セルの値から辞書に登録する
「セルの値」から「Dictionary」に登録する際は、「.Value」をつけて値を登録します。
セルの値を登録する(.Valueをつける)
「.Value」をつけてセルの値を登録してみます。
Sub TEST5()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
For i = 2 To 6
'セルの値を辞書に登録
A.Add Cells(i, "A").Value, Cells(i, "B").Value
Next
'辞書の値を出力
Dim B
For Each B In A
Debug.Print B & " " & A(B)
Next
End Sub
Sub TEST6()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
For i = 2 To 6
'セルの値を辞書に登録
A.Add Cells(i, "A").Value, Cells(i, "B").Value
Next
'検索して「アイテム」を出力
Debug.Print A("C")
End Sub
セルに値を入力しておきます。
では、VBAコードを実行してみます。
結果は、「30」となりました。
「"C"」で検索して、「30」を取得できました。
値で検索できています。
「.Value」をつけない場合は値で検索できない
「.Value」をつけないで登録してみます。
Sub TEST7()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
For i = 2 To 6
'「.Value」をつけないで、辞書に登録
A.Add Cells(i, "A"), Cells(i, "B")
Next
'値で検索できない
Debug.Print A("C")
End Sub
「.Value」をつけない場合は、「セル範囲」が辞書に登録されてしまいます。
なので、「値」で検索することができません。
セルに値を入力しておきます。
実行してみます。
「"C"」で検索しましたけど、結果は、「空白」です。
値で検索できていないですね。
「Dictionary」に登録する場合は、「.Value」を使って「値」を登録しましょう。
存在を確認してセルの値を登録する
セルの値に重複するデータがあるとエラーとなってしまうので、存在を確認してセルの値を登録してみます。
Sub TEST8()
'辞書を作成
Dim A
Set A = CreateObject("Scripting.Dictionary")
'セルの値をループ
For i = 2 To 6
'辞書に登録されていない場合
If A.exists(Cells(i, "A").Value) = False Then
'セルの値を辞書に登録
A.Add Cells(i, "A").Value, Cells(i, "B").Value
End If
Next
'辞書の値を出力
Dim B
For Each B In A
Debug.Print B & " " & A(B)
Next
End Sub