📊 Excel VBA Top100
⚡

RunMacroOnAllSheets

自動化

指定したマクロをブック内の全シートで順番に実行します

ブック内のすべてのシート(または指定したシートのみ)に対して、指定したマクロを順番に実行するマクロです。複数シートに同じ処理(書式統一・データクリーニング・レポート生成など)を行う場合に、一つひとつのシートを手動で切り替えながら実行する手間を省けます。処理を実行するシートをフィルタリングする機能も設定でき、特定の命名パターンのシートだけを対象にするなど柔軟な運用が可能です。内部ではWorksheetsコレクションをFor Eachでループし、各シートに対してApplication.RunメソッドまたはCallステートメントで指定マクロを実行しています。CalculateOnDemandやAlternateRowColorsなど1シート単位で作られた処理も、本マクロを介して呼び出すことでブック全体への一括適用に転用できる汎用性の高い仕組みです。

RunMacroOnAllSheets デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: RunMacroOnAllSheets を実行し、マクロ名を入力します

🎯 活用シーン

  • ✓年間12シート分の月次データシートすべてに同じ書式設定を一括適用して、ブック全体のデザインを一度に統一したいとき
  • ✓部門別・担当者別の複数シートに対して同じデータクレンジング処理を一括実行して、データ整理作業を効率化したいとき
  • ✓毎月追加されるシートすべてに対して自動的に集計処理を実行して、新しいシートが追加されても手動対応が不要な仕組みを作りたいとき
  • ✓四半期ごとに追加される多数の支店別シートに、共通の集計マクロを一括で流し込みたいとき
  • ✓決算期に全シートへ同じ検算処理を実行し、入力ミスがないか一括チェックしたいとき

💡 実装のヒント

  • ▸処理中にエラーが発生した場合の扱い(スキップして次のシートへ進む・エラーでとまる)をエラーハンドリングで制御してください。
  • ▸非表示シートに対しても処理を行うかどうかを設定できます。非表示シートは処理対象外にする場合は Worksheet.Visible プロパティを確認してください。
  • ▸処理の進捗状況をStatusBarに表示すると、大量シートの処理中でも進捗が確認できます。
  • ▸対象シートを特定の命名パターン(「月_」で始まるシートのみ等)に絞りたい場合は、InStr関数でシート名を判定する条件分岐を追加してください。
  • ▸処理中にエラーが起きても他のシートの処理を止めたくない場合は、On Error Resume Nextとエラーログ記録を組み合わせてください。

💻 VBAコード

' RunMacroOnAllSheets
' -----------------
' Macro Name: RunMacroOnAllSheets
' Description: 指定したマクロをブック内の全シートで順番に実行します
' Parameters: なし
' Returns: なし
' Usage: RunMacroOnAllSheets を実行し、マクロ名を入力します
' -----------------

Sub RunMacroOnAllSheets()
    On Error GoTo ErrorHandler

    Dim macroName As String
    Dim ws As Worksheet
    Dim runCount As Long

    macroName = InputBox("全シートで実行するマクロ名を入力してください", "マクロ名")
    If macroName = "" Then Exit Sub

    runCount = 0
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        On Error Resume Next
        Application.Run macroName
        If Err.Number = 0 Then runCount = runCount + 1
        Err.Clear
        On Error GoTo ErrorHandler
    Next ws

    MsgBox runCount & " シートで「" & macroName & "」を実行しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub