大体でIT

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

大体でIT

Excel VBAで、「Dictionary」の要素数をカウントする方法について、ご紹介します。要素をカウントするには、「.Count」を使います。要素数が取得できれば登録されたデータを「ループして取得」することができます。要素は「0番目」から始まるので注意です。

はじめに

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

要素数を取得するには、「.Count」を使います。

要素数を取得できれば、「Dictionary」に登録された値を「要素分」ループして取得することができます。

要素は、「0」番目から始まりますので、取得する際は注意です。

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

この記事で紹介すること

  • 「Dictionary」の要素数を取得する方法

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

目次

VBAコードまとめ

「Dictionary」の要素数をカウントするVBAコードについて、まとめています。

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

Dim A
Set A = CreateObject("Scripting.Dictionary")
b = A.Count '要素をカウントする

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

Dictionaryの要素数を「Count」で取得する

「Dictionary」の要素数を「Count」で取得してみます。

「Count」で要素数を取得

「Count」で要素数を取得する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.Count
    
End Sub

では、実行してみます。

「Count」で要素数を取得

「Count」で要素数を取得

結果は、「5」個となりました。

登録した数は、「5」個なので、正しく取得できています。

要素数分だけループして値を取得する

要素数を取得できれば、要素数分だけループして値を取得することができます。

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

要素は「0」番目から始まるので、取得する際に注意です。

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

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

では、要素をループして、要素分の値を取得してみます。

Forを使って「0」から「Count-1」までループする

Forを使って「Count-1」だけループして、「キー」と「アイテム」を取得します。

「キー」と「アイテム」を配列に入力して、値を取得します。

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

では、実行してみます。

「0」から「Count-1」をループする

「Count-1」だけループする

「Count-1」だけループして、「キー」と「アイテム」を取得できました。

キーで検索してアイテムの値を取得する

キーで検索してアイテムの値を取得することもできます。

「A.(キー)」で「アイテム」が取得できます。

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"
    
    'キーを配列に入力
    Dim b
    b = A.keys
    
    '要素分だけループ
    For i = 0 To A.Count - 1
        '値を出力
        Debug.Print b(i) & " " & A(b(i))
    Next
    
End Sub

では、実行してみます。

キーで検索してアイテムの値を取得

キーで検索してアイテムの値を取得

キーで検索してアイテムの値を取得して、「キー」と「アイテム」を取得できました。

アイテムを検索してループしても、速度は変わらないので、好きな方を使うといいです。

「.keys()(i)」と「.items()(i)」でも取得できるけど遅い

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

ただ、この方法は遅いので、使わない方がいいです。

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

「.keys()(i)」と「.items()(i)」で取得するVBAコードです。

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

では、実行してみます。

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

「.keys()(i)」と「.items()(i)」で値を取得することができました。

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

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

「.keys()(i)」と「.items()(i)」で取得する方法で計測してみます。

「10001」個の値を「Dictionary」に登録して、仮の配列に入力するだけのVBAコードです。

Sub TEST5()
    
    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

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

10001個で、4秒かかっています。

かなり遅いです。

配列に入力して取得する方法で計測

次は、配列に入力して取得する方法で計測してみます。

Sub TEST6()
    
    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 秒」となりました。

かなり高速ですよね。

「Count」で要素数を取得して、ループして値を取得する際は、一旦、配列に入力して取得しましょう。

おわりに

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

要素数を取得するには、「.Count」を使います。

要素数を取得できれば、「Dictionary」に登録された値を「要素分」ループして取得することができます。

要素は、「0」番目から始まりますので、取得する際は注意です。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す