すべてのシートへ一括処理
「全シートに同じ処理を適用」「除外や対象指定」「可視だけ」「選択中だけ」——初心者でも迷わず使える安全テンプレートと実務例をまとめました。コピペして、あなたの処理だけ差し替えればすぐ動きます。
基本:全ワークシートに同じ処理を適用
Sub ApplyAllWorksheets_Basic()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'ここにやりたい処理を書く(例:ヘッダー設定)
ws.Range("A1").Value = "タイトル"
ws.Range("B1").Value = "作成日"
ws.Range("C1").Value = Date
Next
End Sub
VB- ポイント:
- 全ワークシート対象: グラフシートは含まれない。
- 処理差し替え: コメント部だけあなたの処理に置き換えればOK。
安全テンプレート:共通処理を1か所に定義して呼ぶ
Sub ProcessAllSheets()
Dim s As Object
Application.ScreenUpdating = False '画面更新オフで高速・安定
For Each s In ThisWorkbook.Sheets
Call ApplyToSheet(s)
Next
Application.ScreenUpdating = True
End Sub
Sub ApplyToSheet(ByVal s As Object)
'グラフシートも来る可能性があるので分岐
If TypeOf s Is Worksheet Then
'ワークシート向けの共通処理(例:ヘッダー+罫線)
With s
.Range("A1").Value = "タイトル"
.Range("B1").Value = "更新日"
.Range("C1").Value = Date
.Range("A1:C1").Font.Bold = True
.Range("A1:C1").Borders.LineStyle = xlContinuous
End With
Else
'必要ならグラフシート(Chart)向け処理を書く
'例:何もしない
End If
End Sub
VB- ポイント:
- 共通処理を関数化: 1か所変更すれば全体に反映。
- Sheetsで包括: グラフシートも来るためType判定で安全に。
条件指定:除外・可視のみ・名前一致・部分一致
Sub ApplyAllWorksheets_WithFilters()
Dim ws As Worksheet
Dim exclude As Variant: exclude = Array("設定", "Index") '除外名
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
'除外名ならスキップ
If Not IsInArray(ws.Name, exclude) Then
'可視のみ
If ws.Visible = xlSheetVisible Then
'名前に「売上」を含むシートだけ
If InStr(1, ws.Name, "売上", vbTextCompare) > 0 Then
'ここに処理を書く(例:A2へ印刷日)
ws.Range("A2").Value = "印刷日"
ws.Range("B2").Value = Date
End If
End If
End If
Next
Application.ScreenUpdating = True
End Sub
Function IsInArray(val As String, arr As Variant) As Boolean
Dim i As Long
For i = LBound(arr) To UBound(arr)
If StrComp(val, CStr(arr(i)), vbTextCompare) = 0 Then
IsInArray = True: Exit Function
End If
Next
End Function
VB- ポイント:
- 除外リスト: 管理しやすい定番。
- 可視限定+名前フィルタ: 実務の「対象だけ」に効かせる。
選択中の複数シートだけを一括処理(作業グループ)
Sub ApplySelectedSheetsOnly()
Dim s As Object
If TypeName(ActiveWindow) = "Window" Then
Application.ScreenUpdating = False
For Each s In ActiveWindow.SelectedSheets
If TypeOf s Is Worksheet Then
'ここに処理(例:A1に日付)
s.Range("A1").Value = Date
End If
Next
Application.ScreenUpdating = True
End If
End Sub
VB- ポイント:
- SelectedSheets: Shift+クリックで複数選択したシートにだけ処理。
- 安全運用: グラフシート混入に備えType判定。
実務テンプレート:保護の一時解除→処理→再保護
Sub ApplyAll_WithProtectCycle()
Dim ws As Worksheet
Dim pwd As String: pwd = "lock" '必要に応じて入力運用に変更
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
'必要なら除外条件
If ws.Visible = xlSheetVisible Then
'一時解除
On Error Resume Next
ws.Unprotect Password:=pwd
On Error GoTo 0
'処理(例:最終行の下にログ追記)
Dim r As Long
r = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
ws.Cells(r, "A").Value = Now
ws.Cells(r, "B").Value = Environ$("Username")
ws.Cells(r, "C").Value = "一括更新"
'再保護(必要なオプションを併用)
ws.Protect Password:=pwd, AllowFiltering:=True, AllowSorting:=True
End If
Next
Application.ScreenUpdating = True
End Sub
VB- ポイント:
- 忘れない構造: 解除→処理→再保護のワンセット。
- 例外耐性: Unprotect失敗でも処理が止まらない。
例題で練習:よくある一括タスク
印刷設定を全シートへ適用
Sub ApplyPrintSettingsAll()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.CenterHorizontally = True
.CenterVertically = False
End With
Next
MsgBox "印刷設定を全シートへ適用しました。"
End Sub
VB- ポイント:
- 横向き・横幅1ページ: 配布用に便利な標準設定。
見出し行と書式を全シートへ
Sub ApplyHeaderStyleAll()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws.Range("A1:D1")
.Value = Array("項目A", "項目B", "項目C", "項目D")
.Font.Bold = True
.Interior.Color = RGB(221, 235, 247) '薄いブルー
.Borders.LineStyle = xlContinuous
End With
ws.Columns("A:D").AutoFit
Next
End Sub
VB- ポイント:
- 体裁統一: 配布物の見やすさが一気に上がる。
可視ワークシートのみ日付スタンプ
Sub StampDate_VisibleOnly()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
ws.Range("Z1").Value = "更新日: " & Format(Date, "yyyy/mm/dd")
End If
Next
End Sub
VB- ポイント:
- 画面操作前提: 非表示は触らない運用。
実務の落とし穴と対策
- 対象の取り違え:
- ThisWorkbook/ActiveWorkbookを統一: マクロ格納ブックか操作中ブックかを明示。
- グラフシート混入:
- Type判定: Sheetsを走査するならTypeOfでWorksheetか確認。
- 表示更新で遅い・ちらつく:
- ScreenUpdatingをFalse: 開始時オフ→終了時オンが基本。
- 保護やVeryHiddenが邪魔:
- 事前チェック: Visible状態や保護有無を見て分岐。一時解除→再保護のテンプレートを活用。
- 例外で途中停止:
- On Errorの最小限活用: 必要箇所だけResume Nextを使い、最後に戻す。
次の一歩(小課題)
- 課題1: 除外リスト(「Index」「設定」)を維持しつつ、全シートのA1:D1に見出し+体裁を適用。
- 課題2: 可視シートだけ印刷設定を横向き・横幅1ページにし、完了後にメッセージ表示。
- 課題3: 選択中(作業グループ)の複数シートにだけ「最終行へログ追記」を行う。
