VBA

Dictionaryオブジェクトの基本的な使い方(要素の格納と取り出し)

記事内に商品プロモーションを含む場合があります

このページでわかること

Dictionaryオブジェクトに要素を格納したり、代入したりすることができます。

覚えること

  1. 要素の取り込み方
  2. 要素を一つだけ取りだす方法
  3. 要素を全て取り出す方法

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オブジェクトの良さは
格納する際、
キーが重複した場合はエラーが発生することです。

これを使ってダブりのないユニークな表を作ることが出来ます。

次回これについて記事を書きたいと思います。

ではでは