複数のシートに同じヘッダーを追加したり、同じセルの値を更新したり、同じ印刷設定を適用したり…。Excelで複数のシートにまったく同じ操作をしたい、という場面は頻繁にあります。
VBAを使えば、「現在選択されているすべてのシート(作業グループ)」を対象として、ループ処理で同じ命令を一度に実行できます。
この記事では、ActiveWindow.SelectedSheetsコレクションを使い、選択中の複数シートに同じ処理を一括で適用するための基本パターンを解説します。
核心は ActiveWindow.SelectedSheets コレクション
VBAで現在選択されているシートの集まりを取得するには、ActiveWindow.SelectedSheetsという特殊なコレクションを利用します。
- ActiveWindow: 現在アクティブになっているExcelのウィンドウを指します。
- SelectedSheets: そのウィンドウ内で、選択状態になっているシート(作業グループ)の集まりを返します。
このSelectedSheetsコレクションに対してFor Eachループを実行することで、グループ内のシートを一枚ずつ順番に処理することができます。
完成したVBAコード
以下が、まず特定の複数シートを選択し、その選択されたシートすべてに対して、A1セルに日付を入力して書式を設定するVBAコードです。
Sub ProcessAllSelectedSheets()
    ' 変数を宣言します
    Dim targetSheet As Worksheet
    
    ' --- 1. 処理対象の複数シートを選択(作業グループを作成) ---
    ' ここでは例として、特定の名前のシートを選択しています
    ' ユーザーが手動で複数シートを選択した状態でマクロを実行しても機能します
    On Error Resume Next ' 存在しないシート名を指定した場合のエラーを回避
    ThisWorkbook.Worksheets(Array("Report_Jan", "Report_Feb", "Report_Mar")).Select
    If Err.Number <> 0 Then
        MsgBox "指定されたシートの一部が見つかりません。", vbCritical
        On Error GoTo 0
        Exit Sub
    End If
    On Error GoTo 0
    
    '--- シートが1枚しか選択されていない場合は処理を中断 ---
    If ActiveWindow.SelectedSheets.Count <= 1 Then
        MsgBox "このマクロは、複数のシートを選択した状態で実行してください。", vbInformation
        Exit Sub
    End If
    
    ' --- 2. 選択されているすべてのシートをループ処理 ---
    For Each targetSheet In ActiveWindow.SelectedSheets
    
        ' --- 3. 各シートに対して同じ処理を実行 ---
        ' 例: セルA1に「最終更新日: (今日の日付)」と入力し、太字にする
        With targetSheet.Range("A1")
            .Value = "最終更新日: " & Date
            .Font.Bold = True
        End With
        
    Next targetSheet
    
    ' --- 4. 処理後に作業グループを解除(推奨) ---
    ' 意図しない複数シートへの入力を防ぐため、先頭のシートを選択し直す
    ThisWorkbook.Worksheets(1).Select
    
    MsgBox "選択されたシートに処理を実行しました。"
End Sub
コードのポイント解説
① 作業グループの作成
ThisWorkbook.Worksheets(Array("Report_Jan", "Report_Feb", "Report_Mar")).Select
まず、処理の対象となるシートを作業グループとして選択します。この部分はマクロに含めず、ユーザーが手動でCtrlキーを押しながらシートを選択した状態で、後述のループ処理だけを実行するマクロを作成することも可能です。
② 選択されたシートのループ処理
For Each targetSheet In ActiveWindow.SelectedSheets
これがこのテクニックの心臓部です。For Eachループを使い、ActiveWindow.SelectedSheetsコレクションに含まれるシートを、変数targetSheetに一つずつ格納しながら巡回します。
③ 各シートへの共通処理
With targetSheet.Range("A1")
    .Value = "最終更新日: " & Date
    .Font.Bold = True
End With
ループの中で、変数targetSheetは選択されたシートを順番に指していきます。そのため、この変数に対して行った操作(ここではA1セルへの入力と書式設定)が、選択されたすべてのシートに対して実行されます。
④ 作業グループの解除(推奨)
ThisWorkbook.Worksheets(1).Select
マクロの処理が終わった後もシートがグループ化されたままだと、ユーザーが意図せず複数のシートに同じデータを入力してしまう事故につながる可能性があります。 処理の最後に、いずれか1枚のシートを単独で選択し直し、作業グループを解除しておくのが親切な設計です。
まとめ
選択した複数のシートに一括で同じ処理を行うための手順は、非常にシンプルです。
- 手動またはVBAで、対象となる複数のシートを作業グループとして選択する。
- For Each mySheet In ActiveWindow.SelectedSheetsの構文でループを開始する。
- ループの中で、変数mySheetを使って、各シートに対する共通の処理を記述する。
- (推奨)最後にいずれか1枚のシートを選択し直し、作業グループを解除する。
このパターンは、多数のシートの体裁を整えたり、共通の項目を一括で更新したりする際に、絶大な効果を発揮する強力なテクニックです。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。


 
			 
			 
			 
			 
			 
			 
			