ExcelVBA~Excelマクロを活用した売上データの可視化~

1. 概要

Excelのマクロ(VBA)を使用して、売上データを可視化する方法について解説します。主に以下の4つの手法を紹介します。

  1. 棒グラフグラフ作成
  2. ピボットテーブルの作成
  3. 売上推移の折れ線グラフ作成
  4. 条件付き書式によるヒートマップ

これらの手法を活用することで、データ分析の効率を向上させ、視覚的にわかりやすいレポートを作成できます。テンプレートを作っておけば、任意のデータを加工して使いまわすことができます。


2. 必要な準備

  • 「開発」タブの有効化
    1. Excelを開く
    2. 「ファイル」→「オプション」→「リボンのユーザー設定」
    3. 「開発」にチェックを入れる
  • サンプルデータの用意
    • 売上日、商品名、金額、営業担当の4つの列があるデータ
      ここではchatGPTにサンプルデータを作ってもらいました!
  • VBAマクロの有効化
    • Excelのセキュリティ設定から「マクロを有効化」、ブックとして保存も忘れずに!

3. 実行方法

1 自動グラフ作成マクロ

  1. 「開発」タブから「Visual Basic」を開く
  2. 新しいモジュールを追加し、以下のコードを貼り付け
Sub 棒グラフ()
    Dim ws As Worksheet
    Dim chartObj As ChartObject
    Dim lastRow As Long

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

    ' 売上データの範囲をグラフ用に設定
    Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)
    
    With chartObj.Chart
        .SetSourceData Source:=ws.Range("B2:B" & lastRow & ",C2:C" & lastRow)
        .ChartType = xlColumnClustered ' 棒グラフ
        .HasTitle = True
        .ChartTitle.Text = "商品別売上金額"
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.Text = "商品名"
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.Text = "売上金額"
    End With
End Sub
  1. 「Alt + F8」を押してマクロを実行

2 ピボットテーブルの自動作成

  1. VBAエディターを開き、以下のコードを貼り付け
Sub ピボットテーブル()
    Dim wsData As Worksheet
    Dim wsPivot As Worksheet
    Dim pc As PivotCache
    Dim pt As PivotTable

    Set wsData = ThisWorkbook.Sheets("Sheet1")
    Set wsPivot = ThisWorkbook.Sheets.Add
    wsPivot.Name = "ピボットテーブル"

    ' ピボットキャッシュを作成
    Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsData.Range("A1:D100"))

    ' ピボットテーブルの挿入
    Set pt = pc.CreatePivotTable(TableDestination:=wsPivot.Range("A3"), TableName:="SalesPivot")

    ' フィールドの設定
    With pt
        .PivotFields("商品名").Orientation = xlRowField
        .PivotFields("営業担当").Orientation = xlColumnField
        .PivotFields("金額").Orientation = xlDataField
    End With
End Sub
  1. マクロを実行

3 売上推移の折れ線グラフ作成

  1. VBAエディターを開き、以下のコードを貼り付け
Sub 折れ線グラフ()
    Dim ws As Worksheet
    Dim chartObj As ChartObject
    Dim lastRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' グラフオブジェクトの追加
    Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=400, Height:=300)

    With chartObj.Chart
        .SetSourceData Source:=ws.Range("A2:A" & lastRow & ",C2:C" & lastRow)
        .ChartType = xlLine ' 折れ線グラフ
        .HasTitle = True
        .ChartTitle.Text = "売上推移"
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.Text = "売上日"
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.Text = "売上金額"
    End With
End Sub
  1. マクロを実行

4 条件付き書式によるヒートマップ

  1. VBAエディターを開き、以下のコードを貼り付け
Sub ヒートマップ()
    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

    With ws.Range("C2:C" & lastRow)
        .FormatConditions.AddColorScale ColorScaleType:=3
        .FormatConditions(1).ColorScaleCriteria(1).Type = xlConditionValueLowestValue
        .FormatConditions(1).ColorScaleCriteria(1).FormatColor.Color = RGB(255, 0, 0)
        .FormatConditions(1).ColorScaleCriteria(2).Type = xlConditionValuePercentile
        .FormatConditions(1).ColorScaleCriteria(2).Value = 50
        .FormatConditions(1).ColorScaleCriteria(2).FormatColor.Color = RGB(255, 255, 0)
        .FormatConditions(1).ColorScaleCriteria(3).Type = xlConditionValueHighestValue
        .FormatConditions(1).ColorScaleCriteria(3).FormatColor.Color = RGB(0, 255, 0)
    End With
End Sub
  1. マクロを実行

4. 出力結果

  • グラフ作成: 商品別売上金額の棒グラフが表示される
  • ピボットテーブル: 売上データの集計表が作成される
  • 折れ線グラフ: 時系列の売上推移が可視化される
  • ヒートマップ: 売上金額に応じたセルの色が変化

5. 注意事項

  1. データ範囲の確認: マクロ実行前にデータの最終行を正しく把握する。
  2. フィールド名の確認: 列名が正しく一致しているかチェック。
  3. マクロのセキュリティ: 信頼できる環境でのみ実行。
  4. バックアップの作成: 実行前にデータのバックアップを取る。
  5. グラフの位置調整: 作成されたグラフの位置やサイズを適宜調整。

コメント