Excel VBAで店舗別売上報告書を自動生成する方法

この記事では、Excel VBAを使用して店舗別売上報告書の自動生成に関する詳細な手法を解説します。自動生成の基本から応用例まで、実際のコードとともに具体的な手順を紹介します。経験者から初心者まで、VBAを活用して効率的に売上報告書を作成する方法を学べます。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本の自動生成コード

店舗別の売上報告書を自動生成する基本のコードを以下に示します。

Sub GenerateSalesReport()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("SalesData")
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    '新しいワークシートを作成
    Dim newWs As Worksheet
    Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    newWs.Name = "Report"
    
    'データを新しいワークシートにコピー
    ws.Range("A1:C" & lastRow).Copy newWs.Range("A1")
    
    '店舗別に売上合計を計算
    newWs.Cells(1, 5).Value = "店舗"
    newWs.Cells(1, 6).Value = "売上合計"
    newWs.Range("E2").Value = "=UNIQUE(A2:A" & lastRow & ")"
    newWs.Range("F2").Value = "=SUMIF(A:A,E2,C:C)"
    newWs.Range("F2").AutoFill Destination:=newWs.Range("F2:F" & lastRow)
End Sub

このコードは、「SalesData」という名前のワークシートから売上データを取得し、新しいワークシート「Report」に店舗別の売上合計を計算して表示します。

コードの詳細解説

1. 最初に`SalesData`ワークシートをws変数にセットします。
2. `lastRow`変数を使用して、データの最後の行を特定します。
3. 新しいワークシートを作成し、それを`newWs`変数にセットします。
4. データを新しいワークシートにコピーします。
5. 新しいワークシート上で、店舗別の売上合計を計算します。

応用例1: 日付範囲指定の追加

特定の日付範囲での報告書を自動生成したい場合のコード例です。

Sub GenerateSalesReportByDate(startDate As Date, endDate As Date)
    '基本の処理は前述のコードと同じ
    '...
    
    '指定された日付範囲でのデータのみをフィルタリング
    ws.Rows(1).AutoFilter Field:=2, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<=" & endDate
    '...
End Sub

解説

`AutoFilter`メソッドを使用して、指定された日付範囲内のデータのみを表示するようにフィルタリングします。

応用例2: 売上ランキングの作成

店舗別の売上ランキングを自動生成するコード例です。

Sub GenerateSalesRanking()
    '基本の処理は前述のコードと同じ
    '...

    '売上ランキングの計算
    newWs.Cells(1, 7).Value = "ランキング"
    newWs.Range("G2").FormulaR1C1 = "=RANK.EQ(F2,F:F,0)"
    newWs.Range("G2").AutoFill Destination:=newWs.Range("G2:G" & lastRow)
End Sub

解説

`RANK.EQ`関数を使用して、売上のランキングを計算します。

応用例3: グラフの自動挿入

店舗別の売上合計をグラフで表示するコード例です。

Sub InsertGraph()
    '基本の処理は前述のコードと同じ
    '...

    'グラフの作成
    Dim chart As Chart
    Set chart = newWs.Shapes.AddChart2(251, xlColumnClustered).Chart
    chart.SetSourceData newWs.Range("E1:F" & lastRow)
    chart.HasTitle = True
    chart.ChartTitle.Text = "店舗別売上合計"
End Sub

解説

`AddChart2`メソッドを使用して、新しいワークシートにグラフを追加します。ソースデータは店舗名とその売上合計です。

まとめ

Excel VBAを活用することで、店舗別の売上報告書を簡単に自動生成することができます。基本のコードからさまざまな応用例まで、VBAの可能性を最大限に活用して作業効率を向上させましょう。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次