📊 Excel VBA Top100
📋

GroupSheets

シート管理

複数のシートをグループ化する

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

GroupSheets デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(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