大体でIT

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

大体でIT

Excel VBAで、「Dictionary」の値を取得する方法について、ご紹介します。方法としては、「検索して取得」する方法と、「一括で取得」する方法、「ループして取得」する方法があります。状況に応じて使い分けていきましょう。

はじめに

この記事では、「Dictionary」の値を取得する方法について、ご紹介します。

値を取得する方法は、「検索して取得」する方法と、「一括で取得」する方法、「ループして取得」する方法があります。

「検索して取得」するには、「Dictionary」に「キー」を入力して「アイテム」を取得します。

  • 辞書.(キー)→「アイテム」を取得

という感じです。

「一括で取得」したい場合は、「Dictionary」の「.Keys」と「.Items」を使えばできます。

  • キー:「.Keys」
  • アイテム:「.Items」

という感じです。

「ループして取得」する方法には、2つあります。

  • 「For Each」で取得
  • 「For」で取得

一つずつ、条件を指定して取得したい場合に使えます。

では、「Dictionary」の値を取得する方法について、解説していきます。

この記事で紹介すること

  • 「Dictionary」の値を取得する方法

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

目次

VBAコードまとめ

「Dictionary」の値を取得するVBAコードについて、まとめています。

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

'検索して取得
Debug.Print A("C")

'一括で取得
Range("A1").Resize(A.Count) = WorksheetFunction.Transpose(A.keys) 'キーを入力
Range("B1").Resize(A.Count) = WorksheetFunction.Transpose(A.items) 'アイテムを入力

'「For Each」で取得
For Each B In A
    Debug.Print B & " " & A(B) '値を出力
Next

'「For」で取得
Dim B, C
B = A.keys
C = A.items
For i = 0 To A.Count - 1
    Debug.Print B(i) & " " & C(i) '値を出力
Next

'「For」で取得(アイテムは検索)
Dim B
B = A.keys
For i = 0 To A.Count - 1
    Debug.Print B(i) & " " & A(B(i)) '値を出力
Next

'「For」で取得(配列を使わない)←これは遅い
For i = 0 To A.Count - 1
    Debug.Print A.keys()(i) & " " & A.items()(i) '値を出力
Next

では、解説していきます。

Dictionaryの値を検索する

「Dictionary」の値を検索して取得してみます。

「キー」を入力して「アイテム」を取得

「Dictionary」に「キー」を入力することで、「アイテム」を取得することができます。

登録されている値の検索が速いのが、「Dictionary」のメリットです。

VBAコードは、こんな感じになります。

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"
    
    '検索して取得
    Debug.Print A("C")
    
End Sub

検索して取得するイメージは、こんな感じです。

検索して取得するイメージ

検索して取得するイメージ

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

検索して取得

検索して取得

「"C"」で検索して値を取得できました。

Dictionaryの値を一括でセルに入力

「Dictionary」の値を一括でセルに入力してみます。

セルに入力する

「Dictionary」の値を一括で取得するには、「.Keys」と「.Items」を使います。

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"
    
    'キーを入力
    Range("A1").Resize(A.Count) = WorksheetFunction.Transpose(A.keys)
    'アイテムを入力
    Range("B1").Resize(A.Count) = WorksheetFunction.Transpose(A.items)
    
End Sub

「.Resize」でセル範囲を指定します。

「.Resize」でセル範囲を指定

「.Resize」でセル範囲を指定

「TransPose」で行と列を入れ替えることができます。

「TransPose」で行と列を入れ替える

「TransPose」で行と列を入れ替える

これで、セルに一括で入力することができます。

セルに一括入力

セルに一括入力

セルに「Dictionary」の値を一括入力できました。

Dictionaryの値を「For Each」で取得する

Dictionaryの値を「ForEach」で取得してみます。

「For Each」で値を取得

「ForEach」で値を取得するVBAコードです。

「キー」はループして取得して、「アイテム」は検索して取得します。

Sub TEST3()
    
    '辞書を登録
    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"
    
    '要素数分だけループ
    For Each B In A
        '値を出力
        Debug.Print B & " " & A(B)
    Next
    
End Sub

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

「For Each」で値を取得

「For Each」で値を取得

「For Each」で値を取得できました。

Dictionaryの値を「For」で取得する

Dictionaryの値を「For」で取得してみます。

要素は「0」番目から始まる

「Dictionary」の要素は「0」番目から始まるのがポイントです。

要素は「0」番目から始まる

要素は「0」番目から始まる

「0」番目から始まる点に気を付けて値を取得します。

「For」で値を取得

「For」で値を取得するVBAコードです。

ポイントは、「.Keys」と「.Items」で「キー」と「アイテム」を配列に入力する点です。

Sub TEST4()
    
    '辞書を登録
    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, C
    B = A.keys
    C = A.items
    
    '要素分だけループする
    For i = 0 To A.Count - 1
        '値を出力
        Debug.Print B(i) & " " & C(i)
    Next
    
End Sub

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

「For」で値を取得

「For」で値を取得

「For」で値を取得できました。

アイテムは検索して取得

「For」を使う方法で、アイテムは検索して取得することもできます。

Sub TEST5()
    
    '辞書を登録
    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
    B = A.keys
    
    '要素分だけループ
    For i = 0 To A.Count - 1
        '値を出力
        Debug.Print B(i) & " " & A(B(i))
    Next
    
End Sub

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

「アイテム」は検索して取得

「アイテム」は検索して取得

「For」で「アイテム」は検索して、値を取得することができました。

「.Keys()(i)」と「.Items()(i)」で取得は遅い

ちなみに、「.keys()(i)」と「.items()(i)」で取得することもできます。

ただ、実行速度が遅いので、使わない方がいいです。

「.keys()(i)」と「.items()(i)」で取得

「.keys()(i)」と「.items()(i)」で取得してみます。

Sub TEST6()
    
    '辞書を登録
    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"
    
    '要素数分だけループ
    For i = 0 To A.Count - 1
        '値を出力
        Debug.Print A.keys()(i) & " " & A.items()(i)
    Next
    
End Sub

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

「.keys()(i)」と「.items()(i)」で取得

「.keys()(i)」と「.items()(i)」で取得できました。

「.keys()(i)」と「.items()(i)」で取得する方法で計測

実行する時間を計測してみます。

「10001」個の値を、仮の配列に入力してみます。

Sub TEST7()
    
    t = Timer
    
    '辞書を登録
    Dim A
    Set A = CreateObject("Scripting.Dictionary")
    
    '値を登録する
    For i = 1 To 10001
        A.Add i, 0
    Next
    
    Dim B
    ReDim B(10000, 1)
    
    '要素分だけループ
    For i = 0 To A.Count - 1
        '配列に入力
        B(i, 0) = A.keys()(i)
        B(i, 1) = A.items()(i)
    Next
    
    Debug.Print Timer - t & " 秒"
    
End Sub

かかった時間は、「3.34375 秒」となりました。

遅いですね。

配列を使う方法で計測

配列を使う方法で計測してみます。

Sub TEST8()
    
    t = Timer
    
    '辞書を登録
    Dim A
    Set A = CreateObject("Scripting.Dictionary")
    
    '値を登録する
    For i = 1 To 10001
        A.Add i, 0
    Next
    
    Dim B
    ReDim B(10000, 1)
    
    '要素を配列に入力
    Dim C, D
    C = A.keys
    D = A.items
    
    '要素分だけループ
    For i = 0 To A.Count - 1
        '別の配列に入力
        B(i, 0) = C(i)
        B(i, 1) = D(i)
    Next
    
    Debug.Print Timer - t & " 秒"
    
End Sub

かかった時間は、「0.015625 秒」という結果です。

「For」を使って取得する場合は、配列に入力して取得する方法を使いましょう。

おわりに

この記事では、「Dictionary」の値を取得する方法について、ご紹介しました。

値を取得する方法は、「検索して取得」する方法と、「一括で取得」する方法、「ループして取得」する方法があります。

「検索して取得」するには、「Dictionary」に「キー」を入力して「アイテム」を取得します。

  • 辞書.(キー)→「アイテム」を取得

という感じです。

「一括で取得」したい場合は、「Dictionary」の「.Keys」と「.Items」を使えばできます。

  • キー:「.Keys」
  • アイテム:「.Items」

という感じです。

「ループして取得」する方法には、2つあります。

  • 「For Each」で取得
  • 「For」で取得

一つずつ、条件を指定して取得したい場合に使えます。

では、「Dictionary」の値を取得する方法について、解説していきます。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す