大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、「Dictionary」にキーとアイテムを登録する方法について、ご紹介します。「Dictionary」に登録するには、「.Add」を使います。「Dictionary」に同じキーを登録できないので「.Exists」で確認して登録します。セルの値を登録する際は、「.Value」を付けるのがポイントです。

はじめに

この記事では、「Dictionary」に「キー」と「アイテム」を登録する方法について、ご紹介します。

Dictionaryに値を登録するには、「.Add」を使います。

「Dictionary」に登録するときのポイントは、次の3つです。

  • 「Dictionary」には同じキーを登録できない
  • 「.Exists」で存在確認をして登録する
  • セルの値を辞書に登録するときは「.Value」をつける

Dictionaryは「辞書の検索」と「存在の確認」が高速でできます。

Dictionaryを使って、VBAを高速化していきましょう。

では、「Dictionary」に「キー」と「アイテム」を登録する方法について、解説していきます。

この記事で紹介すること

  • 「Dictionary」にキーとアイテムを登録する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

「Dictionary」にキーとアイテムを登録するVBAコードについて、まとめています。

VBAコードだけを確認したい場合に、ご活用ください。

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」に登録すると、こんな感じで登録されます。

「Add」を使って登録できました

「キー」と「アイテム」がペアとなって登録される、という感じです。

「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」で確認した登録

「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

表を用意します。

表を用意

表を用意します

では、VBAコードを実行してみます。

「セルの値」を「Dictionary」に登録

セルの値から辞書に登録

「セルの値」から「Dictionary」に登録できました。

セルの値から登録する際の注意

セルの値から登録する際の注意は、「.Value」をつけるて登録する、ということです。

「.Value」をつけないで登録すると「セル範囲」が登録されてしまいますので、うまく検索ができないです。

値で検索して出力できる

「.Value」をつけてセルの値を登録すると、「値で検索」して出力できます。

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

「重複」データを用意しておきます。

「重複」データを用意

「重複」データを用意

では、VBAコードを実行してみます。

「重複しない」値を登録

「重複しない」値を登録

「重複しない」値を登録できました。

おわりに

この記事では、「Dictionary」に「キー」と「アイテム」を登録する方法について、ご紹介しました。

Dictionaryに値を登録するには、「.Add」を使います。

「Dictionary」に登録するときのポイントは、次の3つです。

  • 「Dictionary」には同じキーを登録できない
  • 「.Exists」で存在確認をして登録する
  • セルの値を辞書に登録するときは「.Value」をつける

Dictionaryは「辞書の検索」と「存在の確認」が高速でできます。

Dictionaryを使って、VBAを高速化していきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す