VBA Dictionaryオブジェクト ~オブジェクトの解説と使用例~

VBA Dictionaryオブジェクト ~オブジェクトの解説と使用例~

ENGINEER.CLUB編集部

ENGINEER.CLUB編集部

VBAでは、データを格納する時に配列をよく使用します。Dictionaryオブジェクトは、データベースのようにキーワードからデータを取得することができます。


1.Dictionary オブジェクトについて

1-1.Dictionary オブジェクトとは

Dictionary(辞書)の名の通り、Key(キーワード)とItem(データ)で構成されています。Keyは重複することはできません。Keyを指定することで、Itemを取得できます。

1-2.Runtimeを使用する際の設定

Runtimeを使う場合は、事前に設定が必要です。

1-2-1.設定方法

メニューの[ツール][参照設定]を選択

メニューの[ツール]→[参照設定]を選択

参照可能なライブラリファイルから「Microsoft Scripting Runtime」にチェックを入れて「OK」をクリックします。

参照可能なライブラリファイルから「Microsoft Scripting Runtime」にチェックを入れて「OK」をクリックします。

1-3.Dictionary オブジェクトの構文

Dictionaryオブジェクトには、Runtimeを使う方法と使わない方法があります。使う場合と使わない場合で、記述方法が異なる場合があるので、注意が必要です。

1-3-1.Runtimeを使う場合

1-3-1-1.連想配列の定義方法
'連想配列をObject型で定義、
Dim [連想配列名] As Dictionary

'定義した連想配列にDirectoryインスタンスを指定
Set [連想配列名] = New Dictionary

'連想配列に、値を追加
[連想配列名].Add [Key], [Item]
1-3-1-2.連想配列への追加と取得方法
Sub sample01()
    Dim test As Dictionary
    Set test = New Scripting.Dictionary

'連想配列に、値を追加
    test.Add "001", "1000"
    test.Add "002", "2200"
    test.Add "003", "3330"

'連想配列からキー値が「001」のアイテム値を取得(1つ目のデータを取得)
    MsgBox "001" & ":" & test.Item("001")
End Sub

実行結果:

実行結果1

1-3-2.Runtimeを使わない場合

1-3-2-1.連想配列の定義方法
'連想配列をObject型で定義
Dim [連想配列名] as Object

'定義した連想配列にDirectoryオブジェクトへの参照を作成
Set [連想配列名] = CreateObject("Scripting.Dictionary")

'連想配列に、値を追加
[連想配列名].Add [Key], [Item]
1-3-2-2.連想配列への追加と取得方法
Sub sample02()
    Dim test As Dictionary
    Set test = New Scripting.Dictionary

    test.Add "001", "1000"
    test.Add "002", "2200"
    test.Add "003", "3330"

'連想配列から値を取得(1つ目のデータを取得)
    MsgBox test.Keys(0) & ":" & test.Items(0)
End Sub

実行結果:

実行結果2


2.特殊な使い方

2-1.重複するKeyを取り込まない

Dictionaryオブジェクトは、重複したKeyを追加しようとするとエラーになってしまいます。そのため、下記のようにKeyがすでに追加されているかをチェックした方が安全です。

Sub sample03()
    Dim test As Object
    Set test = CreateObject("Scripting.Dictionary")

    test.Add "001", "1000"
    test.Add "002", "2200"
    test.Add "003", "3330"

'追加したい値
    Dim addKey As String
    Dim addItem As String
    addKey = "004"
    addItem = "4444"

    For i = 0 To test.Count - 1
        '追加するKey値が、既に連想配列に存在するかチェック
        If Not test.Exists(addKey) Then
            '存在しないなら追加
            test.Add addKey, addItem
            Exit For
        End If
    Next i

End Sub

2-2.設定したデータを削除する

設定したデータを削除する場合は、以下のように行います

2-2-1.データを指定して削除

Sub sample04()
    Dim test As Dictionary
    Set test = New Scripting.Dictionary

    test.Add "001", "1000"
    test.Add "002", "2200"
    test.Add "003", "3330"

    '削除前の配列を表示
    wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
    For i = 0 To test.Count - 1
        wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
    Next i
    MsgBox wk

    '「002」のデータを削除
    test.Remove "002"
    
    '削除前の配列を表示
    wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
    For i = 0 To test.Count - 1
        wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
    Next i
    MsgBox wk

End Sub

実行前:

実行前

実行結果:

実行結果3

2-2-2.全データを削除

Sub sample05()
    Dim test As Dictionary
    Set test = New Scripting.Dictionary

    test.Add "001", "1000"
    test.Add "002", "2200"
    test.Add "003", "3330"

    '削除前の配列を表示
    wk = "削除前の配列(件数:" & test.Count & ")" & vbCrLf
    For i = 0 To test.Count - 1
        wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
    Next i
    MsgBox wk

    '「002」のデータを削除
    test.RemoveAll
    
    '削除後の配列を表示
    wk = "削除後の配列(件数:" & test.Count & ")" & vbCrLf
    For i = 0 To test.Count - 1
        wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
    Next i
    MsgBox wk

End Sub

実行前:

実行前2

実行結果:

実行結果4


3.その他の使用例

3-1.連想配列に追加するデータを、Excelのセルから取得

追加するデータは、下記のようなExcel表から取得することもできます。

キーアイテム
お茶120
紅茶150
コーヒー200
100
Sub sample06()
    Dim test As Dictionary
    Set test = New Scripting.Dictionary

    With Worksheets("データ")       '「データ」シート内での作業
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            test.Add .Cells(i, 1).Value, .Cells(i, 2).Value
        Next i
    End With
    
    '配列を表示
    wk = "配列(件数:" & test.Count & ")" & vbCrLf
    For i = 0 To test.Count - 1
        wk = wk & test.Keys(i) & ":" & test.Items(i) & vbCrLf
    Next i
    MsgBox wk

End Sub

実行結果:

実行結果5


4.最後に

Dictionaryオブジェクトには、上記以外の使い方もあります。通常の配列と使い分けてみてください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中