VLOOKUPはもう卒業?VBA連想配列(Dictionary)の使い方を解説

【業務効率化】VBA
スポンサーリンク

「ああ、またExcelが固まった……。たった 3万行のデータから重複を消して集計したいだけなのに。VLOOKUPを使いすぎて、再計算が終わらない……。もう帰りたい……」

このような経験に、身に覚えはありませんか? 

私も初心者の頃、膨大な顧客リストを前に複雑なループ処理を書いてしまい、 PCがうなりを上げるのをただ眺めることしかできませんでした。 当時は「10分かかるのはデータが多いから仕方ない」と諦めていました。

でも、この「Dictionary(辞書)」を知ってからは、あんなに時間がかかっていた処理が、文字通り数秒で完了するようになりました。 

【業務効率化】VBAの記事を見る 

Dictionary(連想配列)とは?

プログラミング用語で「連想配列」なんて言われると難しそうですが、身近なものに例えると、これは「ホテルのクローク(荷物預かり所)」です。

  1. 番号札(キー)を渡す。
  2. 荷物(値)を預ける。
  3. 後で番号札を見せれば、すぐに荷物が出てくる。

一般的な配列は引き出しのようなもので、 順番に中身を確認して探す必要があります 。
一方、Dictionaryはキーを指定するだけで一瞬で中身を取り出せるため、驚異的な速さを実現できます。 

なぜDictionaryを使うと「速い」のか?

Excelのセルに何度もアクセスしたり、VLOOKUPを数千行に書いたりすると、PCは計算のたびに大きな負担がかかります。

Dictionaryを活用すれば、PCのメモリ内に一時的な高速データベースを構築するような形になります。そこで計算をすべて完結させてから最後にシートへ書き戻すため、処理時間を劇的に削減できるというわけです。

【実践】コピペで使える!重複を除いて集計するコード

例として、A列の商品名とB列の売上額が並ぶリストから、商品ごとの合計金額を算出してみます。

Sub FastSummary()
    ' Dictionaryを使うための準備

    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
   
    Dim lastRow As Long
    Dim i As Long
    Dim itemName As String
    Dim itemPrice As Long
   
    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
   
    ' 2行目から最終行までループ
    For i = 2 To lastRow
        itemName = Cells(i, 1).Value  ' 商品名(キー)
        itemPrice = Cells(i, 2).Value ' 売上額(値)
       
        ' もしDictionaryにまだその商品名がなければ追加
        If Not myDic.Exists(itemName) Then
            myDic.Add itemName, itemPrice
        Else
            ' すでにある場合は、現在の値に加算(集計)
            myDic(itemName) = myDic(itemName) + itemPrice
        End If
    Next i
   
    ' 最後に、結果をD列とE列に一気に書き出す
    Dim k As Variant
    Dim outRow As Long
    outRow = 2
   
    For Each k In myDic.Keys
        Cells(outRow, 4).Value = k             ' 商品名
        Cells(outRow, 5).Value = myDic(k)      ' 合計金額
        outRow = outRow + 1
    Next k
   
    MsgBox "集計完了!"
    Set myDic = Nothing ' メモリを解放
End Sub


まとめ

  1. Dictionaryはキーと値のセットで覚える。
  2. とにかく速い。セルへのアクセスを最小限にできる。
  3. 重複削除や集計に最強の威力を発揮する。

まずは上記のコードをコピペして、手元のデータで試してみてください!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました