「毎月、複数シートからコピペして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

使い方

  1. 開発タブ → Visual Basic → 標準モジュール挿入 → 上記コードを貼り付け
  2. シートにフォームコントロールのボタンを配置 → MonthlyReport を割り当て
  3. ボタン押下で「月次サマリー」シートが自動生成

Mac版でも動く工夫

  • Workbooks.Open ではなく ThisWorkbook を使う(Mac権限問題回避)
  • Application.Sum でVBA関数経由(互換性高い)
  • MsgBox の代わりに Debug.Print だとイミディエイトウィンドウで確認可能

拡張パターン

  • PDF自動出力ExportAsFixedFormat で月次PDFを生成 → メール添付
  • 前月比較:別シートに前月データを保持して、増減率を自動計算
  • グラフ自動生成ChartObjects.Add で円グラフ/棒グラフを生成
  • Slack通知:完了時に Slack Webhook 経由で投稿

「毎月◯時間かかっている繰り返し作業」、まずは無料相談から。 お問い合わせ →