「毎月、複数シートからコピペしてSUM入れて…」という作業、ボタン1つで5秒に短縮できます。
想定シナリオ
- 部署ごとの売上シート(5〜20枚)
- 各シートに「商品別売上」が入っている
- 月次で「全部署の合計」シートに集計したい
これを VBA + フォームコントロールのボタン で自動化します。
スクリプト
Sub MonthlyReport()
Dim ws As Worksheet
Dim summary As Worksheet
Dim lastRow As Long, i As Long
Dim total As Double
' 集計シートを準備(無ければ作る)
On Error Resume Next
Set summary = ThisWorkbook.Sheets("月次サマリー")
On Error GoTo 0
If summary Is Nothing Then
Set summary = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
summary.Name = "月次サマリー"
End If
' ヘッダー
summary.Cells.Clear
summary.Range("A1").Value = "シート名"
summary.Range("B1").Value = "合計売上"
summary.Range("A1:B1").Font.Bold = True
' 各シートを集計
i = 2
For Each ws In ThisWorkbook.Sheets
If ws.Name <> summary.Name Then
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
If lastRow >= 2 Then
total = Application.Sum(ws.Range("B2:B" & lastRow))
summary.Cells(i, 1).Value = ws.Name
summary.Cells(i, 2).Value = total
i = i + 1
End If
End If
Next ws
' 最終行に総計
If i > 2 Then
summary.Cells(i, 1).Value = "総計"
summary.Cells(i, 2).Formula = "=SUM(B2:B" & i - 1 & ")"
summary.Range("A" & i & ":B" & i).Font.Bold = True
End If
MsgBox "月次集計が完了しました(" & i - 2 & "シート集計)", vbInformation
End Sub
使い方
- 開発タブ → Visual Basic → 標準モジュール挿入 → 上記コードを貼り付け
- シートにフォームコントロールのボタンを配置 →
MonthlyReportを割り当て - ボタン押下で「月次サマリー」シートが自動生成
Mac版でも動く工夫
Workbooks.OpenではなくThisWorkbookを使う(Mac権限問題回避)Application.SumでVBA関数経由(互換性高い)MsgBoxの代わりにDebug.Printだとイミディエイトウィンドウで確認可能
拡張パターン
- PDF自動出力:
ExportAsFixedFormatで月次PDFを生成 → メール添付 - 前月比較:別シートに前月データを保持して、増減率を自動計算
- グラフ自動生成:
ChartObjects.Addで円グラフ/棒グラフを生成 - Slack通知:完了時に Slack Webhook 経由で投稿
「毎月◯時間かかっている繰り返し作業」、まずは無料相談から。 お問い合わせ →