大体でIT

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

大体でIT

Excel VBAで、Dictionaryを使って複数アイテムを扱うには、Dictionaryと配列を組み合わせることでできます。Dictionaryのアイテムに、連番を登録して、連番の値を使って配列から値を取得する、という感じです。うまくDictionaryを使って、VBAの処理を高速化していきましょう。

はじめに

この記事では、Dictionaryで複数アイテムを扱う方法について、ご紹介します。

Dictionaryでは、1つのアイテムのみ使うことができます。

複数のアイテムを使いたい場合は、Dictionaryと配列を組み合わせることで、複数の項目をアイテムとして使うことができます。

Dictionaryのアイテムには、連番を登録して、配列の値を取得するという感じです。

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

では、Dictionaryで複数アイテムを扱う方法について、解説していきます。

この記事を読むメリット

  • Dictionaryで複数アイテムを扱って、複数項目のデータの取得を高速化できます。

本記事の内容を動画でまとめています

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

目次

Dictionaryで複数アイテムを扱う方法

Dictionaryで複数アイテムを扱う方法について、解説していきます。

結論から言うと、Dictionaryでは1つのアイテムしか登録できないので、配列と組み合わせることで、複数アイテムを扱うことができるようになります。

Dictionaryでアイテムは1つのみ

Dictionaryを使う場合、アイテムは1つのみになります。

アイテムは1つのみ

Dictionaryを使う場合、アイテムは1つのみになります

なので、Dictionaryと配列を組み合わせて、複数アイテムを扱えるようにします。

配列を組み合わせて複数アイテムを扱う

では、Dictionaryと配列を組み合わせて、複数アイテムを扱う方法について、みてみます。

複数項目のデータを用意しておきます。

複数項目のデータを用意

複数項目を辞書に登録する方法についてみてみます

上記のデータで、Dictionaryを使って、複数アイテムを使えるようにしてみます。

Dictionaryに登録して、配列に格納

次のように、Dictionaryと配列を組み合わせて登録します。

Dictionaryと配列を組み合わせて登録します

ポイントは、Dictionaryのアイテムには、連番を登録する点になります。

ポイントは、Dictionaryのアイテムには、連番を登録する点になります

Dictionaryで検索して、連番を取得して、取得して連番を使って配列の値を取得する、という感じになります。

検索する手順についてみてみます。

検索する手順

例えば、「C」を検索して、「3」を取得します。

例えば、「C」を検索して、「3」を取得します

取得した「3」を使って、配列の3番目を取得することで、複数の項目を取得することができます。

取得した「3」を使って、配列の3番目を取得することで、複数の項目を取得することができます

というような感じで、Dictionaryと配列を組み合わせて、複数のアイテムを扱うことができます。

同じ要領で、2つのアイテムだけでなく、自由に項目数を増やすことができます。

辞書を検索して複数アイテムを取り出す

では、辞書を検索して、複数アイテムを取り出すVBAコードをみてみます。

VBAコード

Dictionaryを使って、複数アイテムを取り出すVBAコードです。

Sub TEST1()
  
  Dim A
  '辞書を作成
  Set A = CreateObject("Scripting.Dictionary")
  
  Dim B
  '配列に格納
  B = Range("A2:C7")
  
  '辞書に登録
  For i = 1 To UBound(B)
    A.Add B(i, 1), i
  Next
  
  Dim C
  C = A(Range("E2").Value) '何番目かを取得
  Range("F2") = B(C, 2) '価格を取得
  Range("G2") = B(C, 3) '数量を取得
  
End Sub

「B」を検索して、価格と数量を取得してみます。

「B」を検索して複数の項目を取得する

「B」を検索して、価格と数量を取得してみます

順を追って、実行する手順をみてみます。

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

手順

最初に、値を配列に格納します。

値を配列に格納します

アイテムは連番として、辞書にキーを登録していきます。

アイテムは連番として、辞書にキーを登録していきます

辞書で「B」を検索して、「2」を取得して、配列の2番目の値を取得します。

辞書で「B」を検索して、「2」を取得して、配列の2番目の値を取得します

これで、辞書を検索して、複数アイテムを取得できます。

複数アイテムを取得できた

辞書を検索して、複数アイテムを取得できました

辞書を検索して、複数アイテムを取得できました。

Dictionaryを使えば高速化できる

Dictionaryを使うメリットは、何といってもVBAの処理を高速化できることになります。

どれぐらい高速にできるかをみてみます。

結論から言うと、ForとIfを使う方法と比較して、「100倍」ぐらい速くすることができます。

では、実際にやってみます。

ForとIfと配列を使って計測

次のように大量のデータを用意しました。

元データが17,577行あって、検索は、1000行分を検索してみます。

大量データを用意

ForとIfと配列を使って、大量データから一致する値を取得してみます

まずは、FotとIfと配列を使って、計測してみます。

ForとIfと配列を使って、一致する値を取得

ForとIfと配列を使って、一致した値を取得するVBAコードになります。

Sub TEST2()
  
  t = Timer
  
  Dim A, B
  A = Range("E2:G1001") '検索する値を配列に格納
  B = Range("A2:C17577") 'データベースを配列に格納
  
  For i = 1 To UBound(A)
    For j = 1 To UBound(B)
      '値が一致した場合
      If A(i, 1) = B(j, 1) Then
        A(i, 2) = B(j, 2) '価格を取得
        A(i, 3) = B(j, 3) '数量を取得
      End If
    Next
  Next
  
  '配列をセルに入力
  Range("E2").Resize(UBound(A, 1), UBound(A, 2)) = A
  
  Debug.Print Timer - t & " 秒"
  
End Sub

では、実行してみます。

大量データから一致する値を取得できました

大量データから一致する値を取得できました。

かかった時間

かかった時間はちょっと遅いという感じです

かかった時間は、ちょっと遅いという感じです。

セルに入力する際は、配列を使って一括で入力しているんですけども、ForとIfで検索するとちょっと遅くなります。

Dictionaryを使って計測

Dictionaryを使って計測してみます。

使うデータは先ほどと同じになります。

大量データを用意

Dictionaryを使って、大量データから一致した値を取得してみます

では、VBAコードからみていきます。

Dictionaryを使って、一致する値を取得

Dictionaryと配列を使って、一致した値を取得するVBAコードになります。

Sub TEST3()
  
  t = Timer
  
  Dim A, B, C
  '辞書を作成
  Set A = CreateObject("Scripting.Dictionary")
  B = Range("A2:C17577") 'データベースを配列に格納
  C = Range("E2:G1001") '検索する値を配列に格納
  
  '辞書に登録
  For i = 1 To UBound(B)
    A.Add B(i, 1), i
  Next
  
  Dim D
  For i = 1 To UBound(C)
    D = A(C(i, 1)) '何番目かを取得
    C(i, 2) = B(D, 2) '価格を取得
    C(i, 3) = B(D, 3) '数量を取得
  Next
  
  '配列をセルに入力
  Range("E2").Resize(UBound(C, 1), UBound(C, 2)) = C
  
  Debug.Print Timer - t & " 秒"
  
End Sub

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

大量データから一致する値を取得できます。

大量データから一致する値を取得できました

大量データから一致する値を取得できました。

かかった時間

かなり高速で値を取得することができます

かなり高速で値を取得することができました。

ForとIfと配列を使う方法より、「100倍」ぐらい速くなっています。

おわりに

この記事では、Dictionaryで複数アイテムを扱う方法について、ご紹介しました。

Dictionaryでは、1つのアイテムのみ使うことができます。

複数のアイテムを使いたい場合は、Dictionaryと配列を組み合わせることで、複数の項目をアイテムとして使うことができます。

Dictionaryのアイテムには、連番を登録して、配列の値を取得するという感じです。

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

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す