このページでわかること
覚えること
- 要素の取り込み方
- 要素を一つだけ取りだす方法
- 要素を全て取り出す方法
Dictionaryオブジェクトとは
Dictionaryオブジェクトは連想配列といいます。
キーとアイテムをペアで格納することで、
キーを入力するとアイテムを値として取得することが出来ます。
簡単な使い方を見てみましょう。
Sub dictionary()
'Dictionaryオブジェクトの宣言
Dim dic As New dictionary
'Dictionaryオブジェクトにキーと値を入れます。
'キーが左(リンゴとかバナナとか)
'アイテムが右(青森とかフィリピンとか)
dic.Add "リンゴ", "青森"
dic.Add "バナナ", "フィリピン"
dic.Add "メロン", "北海道"
'一つだけキーとアイテムを取り出す方法
MsgBox (dic.Keys(0) & ":" & dic.Item("リンゴ"))
'全てのキーとアイテムを取り出す方法
Dim str As String
Dim l As Variant
For Each l In dic
str = str & l & ":" & dic.Item(l) & vbCrLf
Next
MsgBox (str)
End Sub
それぞれの使い方を見ていきます。
Dictionaryオブジェクトに格納する方法
構文:Dictionaryオブジェクト.Add key,item
addメソッドを使います。
最初にキー、その後にアイテムを入れると格納できます。
キーが重複した場合はエラーが発生します
Sub dictionaryAdd()
Dim dic As New dictionary
dic.Add "リンゴ", "青森"
End Sub
Dictionaryオブジェクトからキーを取り出す方法
構文:Dictionaryオブジェクト.Keys(インデックス番号)
Keysメソッドを使います。
引数には数値を入れます。
戻り値はキーです。
KeyではなくKeysであること注意(私はよく間違えます)
Sub dictionaryKeys()
Dim dic As New dictionary
dic.Add "リンゴ", "青森"
MsgBox (dic.Keys(0))
End Sub
Dictionaryオブジェクトからアイテムを取り出す方法
構文:Dictionaryオブジェクト.item(key)
itemメソッドを使います。
引数にはキーを入れます。
戻り値はアイテムです。
Sub dictionaryItem()
Dim dic As New Dictionary
Dim str As String
dic.Add "リンゴ", "青森"
str = dic.Keys(0)
MsgBox (dic.Item(str))
End Sub
Dictionaryオブジェクトから全てのキーとアイテムを取り出す方法
構文というわけではないですが、よく使うのでご紹介します
Sub dictionaryオブジェクト全部出し()
Dim dic As New dictionary
dic.Add "リンゴ", "青森"
dic.Add "バナナ", "フィリピン"
dic.Add "メロン", "北海道"
Dim l As Variant'Variant型にしないとエラーになります。
'for each文でまわすとキーをまわす事になります。
For Each l In dic
Debug.Print l 'キー
Debug.Print dic.Item(l) 'アイテム
Next
End Sub
エクセルの値をDictionaryオブジェクトに取り込む方法
最後にエクセルの表を格納する方法をご紹介します。
Sub エクセルから直接Dictionaryに格納()
'ディクショナリーオブジェクトの宣言
Dim dic As New dictionary
Dim Rng As Range '格納するエクセルの範囲
Dim r As Range 'for each文で使用
'=======================================================
'格納する範囲をセット
'実務で使用する場合はRngの範囲を変更してください
'=======================================================
Set Rng = ActiveSheet.Range("A3:A5")
'=======================================================
'一つずつディクショナリーオブジェクトに入れていく
'実務で使用する場合はキーとアイテムの範囲を変更してください
'=======================================================
For Each r In Rng
dic.Add r.Value, r.Offset(, 1).Value
Next
'全てのキーとアイテムを取り出す方法
Dim str As String
Dim l As Variant
For Each l In dic
str = str & l & ":" & dic.Item(l) & vbCrLf
Next
MsgBox (str)
End Sub
Rngの範囲や、キーとアイテムの位置を修正すれば基本的にはこの形で実務に使えると思います。
Dictionaryオブジェクトって事務でどう使うの?
Dictionaryオブジェクトは
使い方によってはあまり実務向きではないかもしれないです。
例えば番号と値を取り込んで、1番だったら○○みたいに値を取り出してもいいんですが、
だったらエクセルの表をVlookupでいいじゃんてなるので。。。
Dictionaryオブジェクトの良さは
格納する際、
キーが重複した場合はエラーが発生することです。
これを使ってダブりのないユニークな表を作ることが出来ます。
次回これについて記事を書きたいと思います。
ではでは