vbaでデータベースから取ってきた値を集計する際、今まで値を配列に格納して1つずつFor文を回してたのですが、最近連想配列の使い方を覚えたので紹介します。
連想配列のメリット
vbaでの連想配列の主なメリットとしては、
- 重複判定が1行で書ける
- keyからitemを呼び出せる
の2点になります。さっそく例を見ていきます。
上の例で、店舗ごとに商品Aの売上合計を求めることをしてみます。以下がソースコードです。
まず初めに3、4行目で連想配列を定義してセットします。Dictionaryが連想配列の宣言となります。
Dictionaryオブジェクトではキー(key)と値(item)を1セットとなるデータ形式となります。
keyとitemを辞書に登録するって意味のDictionaryなのか・・・由来はよくわかりません。
またDictionaryオブジェクトはVBAのメニューの[ツール]-[参照設定]をクリック後に「Microsoft Scripting Runtime」を選ばないと使えないので、あらかじめ設定しておきます。
次にdata配列に元データを格納し(10行目)、13~20行目で目的のデータを取得していきます。
特に重要なのが14~16行目で、dic.Exists(キー)で指定したキーが含まれているか判定してくれます。
この場合はdicの連想配列にdata(i,2)(B列の店舗名)があるかを判定しています。なければdic.Add (キー), (値)とデータを1セットにしてdicに登録します。2回目以降のFor文も店舗名があるか確認するので、この1行で重複判定ができます。やったね!
Elseに入ったら(17行目)店舗が存在するときなので、そのときはその店舗ごとに売上を加算してあげます。
その後、23~31行目で取得したデータをE列とF列に書き込んでいきます。keys = dic.keys (24行目)とすることで店舗名を取得し、dic(keys()) (29行目)とすることでElseで計算した売上合計を取ることができます。
実行結果は以下のようになります。
vbaは他の言語に比べて癖が強いので慣れるまで時間がかかりそうです。(;´・ω・)
でも使いこなせるようになれば色んなことができそうなのでコツコツ続けいていこうと思います。(^^♪