0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実務VBA②】Dictionaryで売上データを集計する方法

0
Last updated at Posted at 2026-03-15

はじめに

Excelで業務データを扱う場合、
「商品別」「担当者別」などの集計処理が必要になることがよくあります。
Excel関数であれば

  • SUMIF
  • ピボットテーブル

などで対応できますが、VBAで自動化処理する場合は
Dictionaryを使った集計処理が非常に便利です。

さらに、データ量が多い場合は

  • 配列(Array)で一括読み込み
    (セルを1つずつ参照するよりExcelとのアクセス回数を減らせるため)
  • Dictionaryで集計

という形にすることで、
シンプルでメンテナンスしやすいコードを書くことができます。

今回は、実務でもよく使われる配列とDictionaryを組み合わせた実務的な集計方法を紹介します。

想定データ

以下のような売上データを例にします。

商品 売上
A 100
B 200
A 150
C 300
B 50

これを商品ごとに売上を集計します。
結果:

商品 合計
A 250
B 250
C 300

処理の流れ

今回の処理は次の流れになります。

Excelシート
   ↓
配列に一括読み込み
   ↓
Dictionaryで集計
   ↓
結果をExcelへ出力

ポイントはセルを1つずつ処理しないことです。

Dictionaryとは

Dictionaryはキー(Key)と値(Value)のペアでデータを管理するオブジェクトです。
今回の例では

商品 → 売上合計

という形で管理します。
例:

A → 250
B → 250
C → 300

実装コード

以下がサンプルコードです。

Sub SalesSummary()

    '----------------------------------------
    ' 売上データを商品別に集計するサンプル
    ' Dictionary + 配列を使用
    '----------------------------------------

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 最終行を取得
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' データを配列に読み込む
    ' A列:商品
    ' B列:売上
    Dim data As Variant
    data = ws.Range("A2:B" & lastRow).Value

    ' Dictionaryオブジェクトを作成
    ' Key   : 商品名
    ' Value : 売上合計
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    Dim i As Long
    Dim product As String
    Dim sales As Double

    '----------------------------------------
    ' 配列データを1行ずつ処理
    '----------------------------------------
    For i = 1 To UBound(data, 1)

        ' 商品名
        product = data(i, 1)
        
        ' 売上
        sales = data(i, 2)

        ' すでにDictionaryに存在するか確認
        If dict.Exists(product) Then
        
            ' 存在する場合:売上を加算
            dict(product) = dict(product) + sales
            
        Else
        
            ' 存在しない場合:新規追加
            dict.Add product, sales
            
        End If

    Next i

    '----------------------------------------
    ' 集計結果をExcelに出力
    '----------------------------------------

    Dim row As Long
    row = 2

    Dim key As Variant

    For Each key In dict.Keys
    
        ' 商品名
        ws.Cells(row, 4).Value = key
        
        ' 売上合計
        ws.Cells(row, 5).Value = dict(key)

        row = row + 1

    Next key

End Sub

コードのポイント

① 配列でデータを読み込む

data = ws.Range("A2:B" & lastRow).Value

この処理でExcel → VBAへデータを一括読み込みします。
セルを1つずつ処理するよりもコードがシンプルになります。

② Dictionaryで集計

If dict.Exists(product) Then

意味:

この商品がすでに登録されているか?

処理:

状態 処理
存在する 売上を加算
存在しない 新規追加

③ 集計結果の出力

For Each key In dict.Keys

Dictionaryのキーを順番に取り出してExcelに書き込みます。

実務での活用例

Dictionaryは次のような処理でよく使われます。
売上データ集計
担当者別集計
商品マスタ検索
重複データ削除
特に

キー → 値

という形で管理できるデータと相性が良いです。

まとめ

今回のポイント:

  • Dictionaryを使うと集計処理が書きやすい
  • 配列と組み合わせるとコードがシンプルになる
  • 実務でもよく使われる基本パターン

Excel VBAで業務自動化を行う場合、
覚えておくと便利なテクニックの1つです。

実務VBAシリーズ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?