📋
GroupSheets
シート管理複数のシートをグループ化する
複数のワークシートをグループ化してVBAで一括操作するマクロです。Worksheets(Array("Sheet1", "Sheet2")).Selectでシートグループを作成し、グループ全体に対して書式設定やデータ入力を一度に適用できます。手動でのCtrl+クリックによるシート選択を自動化し、大量のシートへの同一操作を効率化します。処理後はグループ解除して通常の単一シート操作に戻る処理も重要です。内部ではWorksheets(Array(...)).Selectでシート選択状態を作り出し、選択中はどのシートに対する操作もグループ内全シートへ同時反映される仕組みを利用しています。ColorSheetTabsやAddHeaderFooterのような1シート単位の処理も、事前にグループ化しておくことで全シートへの一括適用に転用できます。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとグループ化するシート名を選択するダイアログが表示される
🎯 活用シーン
- ✓12ヶ月分のシートに同じヘッダー行を一括追加
- ✓複数の支店シートに統一フォントと書式を一度に設定
- ✓グループ化してページ設定を全シートに同時適用
- ✓月別に分かれた12枚のシートへ、同じ数式や書式を一度の操作でまとめて適用したいとき
- ✓支店別シートの表題行を統一フォーマットに揃える作業を、グループ化で一括処理したいとき
💡 実装のヒント
- ▸Worksheets(Array(names)).Selectでグループ選択できます
- ▸グループ解除はActiveWorkbook.Sheetsのいずれかをクリックするかコードで選択します
- ▸グループ操作中はActiveSheetが最初に選択したシートを指します
- ▸グループ化したまま保存すると、次回開いたときにも選択状態が残ることがあるため、処理後は必ず単一シートに戻す処理を入れてください。
- ▸グループ化中の入力はすべての選択シートに反映されるため、意図しない上書きを避けるには対象を絞り込んでから実行してください。
💻 VBAコード
' GroupSheets
' -----------------
' Macro Name: GroupSheets
' Description: 複数のシートをグループ化する
' Parameters: なし
' Returns: なし
' Usage: 実行するとグループ化するシート名を選択するダイアログが表示される
' -----------------
Sub GroupSheets()
Dim ws As Worksheet
Dim sheetNames() As String
Dim inputList As String
Dim i As Long
Dim validCount As Long
Dim tempWs As Worksheet
On Error GoTo ErrorHandler
inputList = "グループ化するシート名をカンマ区切りで入力:" & vbCrLf & vbCrLf
For i = 1 To Worksheets.Count
inputList = inputList & " " & Worksheets(i).Name & vbCrLf
Next i
inputList = InputBox(inputList, "シートグループ化", "")
If inputList = "" Then
Exit Sub
End If
Dim entries() As String
entries = Split(inputList, ",")
ReDim sheetNames(1 To UBound(entries) + 1)
validCount = 0
For i = LBound(entries) To UBound(entries)
Dim sheetName As String
sheetName = Trim(entries(i))
For Each tempWs In Worksheets
If tempWs.Name = sheetName Then
validCount = validCount + 1
sheetNames(validCount) = sheetName
Exit For
End If
Next tempWs
Next i
If validCount = 0 Then
MsgBox "有効なシート名が指定されませんでした。", vbExclamation
Exit Sub
End If
If validCount = 1 Then
MsgBox "シートは1つしか選択されていません。グループ化するには2つ以上必要です。", vbExclamation
Exit Sub
End If
Worksheets(sheetNames(1)).Select
For i = 2 To validCount
Worksheets(sheetNames(i)).Select False
Next i
MsgBox validCount & "枚のシートをグループ化しました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub