【Excel VBA】複数のワークシートを作業グループとしてまとめて選択する方法

複数のシートに同じヘッダーを追加したり、同じ印刷設定を適用したりする際、手作業ではCtrlキーやShiftキーを押しながらシートタブをクリックして「作業グループ」を作成します。

VBAを使えば、この作業グループの作成も自動化できます。この記事では、Worksheet.SelectメソッドのReplace引数を使い、複数のシートをプログラムでまとめて選択する方法を解説します。


目次

核心は .Select メソッドの Replace 引数

シートを選択する.Selectメソッドには、Replaceという引数があります。この引数の設定値で、シート選択の挙動が変わります。

  • mySheet.Select (または mySheet.Select Replace:=True) これが既定の動作です。現在選択されているシートをすべて解除し、mySheetだけを新しく選択します。
  • mySheet.Select Replace:=False これが作業グループを作成するための鍵です。現在の選択状態を維持したまま、mySheet選択に追加します。Ctrlキーを押しながらシートタブをクリックする操作に相当します。

完成したVBAコード(実用例)

ここでは、実務でよく使われる2つのパターンをコード例として紹介します。

① 特定の複数シートを名前で選択する

Array関数を使い、作業グループにしたいシートの名前を列挙するのが最も確実で分かりやすい方法です。

Sub SelectSpecificSheets()

    ' Array関数の中に、グループ化したいシート名をカンマ区切りで記述
    ThisWorkbook.Worksheets(Array("概要", "データ入力", "グラフ")).Select

    MsgBox "指定した3枚のシートを作業グループとして選択しました。"
    
    '--- 作業グループを解除 ---
    ' 解除するには、いずれか1枚のシートを単独で選択し直します
    ' ThisWorkbook.Worksheets("概要").Select

End Sub

② 条件に一致するシートをすべて選択する

Forループを使い、条件に合致するシートを動的に作業グループに追加していく応用例です。ここでは、「Report」という文字で始まる名前のシートをすべて選択します。

Sub SelectSheetsByCondition()

    ' 変数を宣言します
    Dim ws As Worksheet
    Dim isFirstSheetFound As Boolean
    isFirstSheetFound = False

    ' ブック内のすべてのワークシートをループ
    For Each ws In ThisWorkbook.Worksheets
        ' シート名が "Report" で始まるかどうかを判定
        If ws.Name Like "Report*" Then
        
            ' 最初に見つかったシートか?
            If isFirstSheetFound = False Then
                ' 最初のシートは、通常通り選択 (Replace:=True)
                ws.Select
                isFirstSheetFound = True
            Else
                ' 2枚目以降は、選択に追加 (Replace:=False)
                ws.Select Replace:=False
            End If
            
        End If
    Next ws
    
    ' 1枚も見つからなかった場合の処理
    If isFirstSheetFound = False Then
        MsgBox "条件に一致するシートが見つかりませんでした。"
    Else
        MsgBox "条件に一致するシートをすべて選択しました。"
    End If

End Sub

コードのポイント解説

作業グループ作成の基本手順

Replace:=Falseを使って複数のシートを選択する場合、以下の手順を踏むのが基本です。

  1. まず、グループに含めたい1枚目のシートを通常通り.Selectで選択する。
  2. 次に、2枚目以降のシートをForループなどで巡回させ、.Select Replace:=Falseで選択に追加していく。

サンプルコード②では、フラグ変数(isFirstSheetFound)を使って、最初に見つかったシートかどうかを判定し、Selectの挙動を切り替えています。

作業グループの解除

VBAで作成した作業グループを解除したい場合は、いずれか1枚のシートを単独で(Replace引数を省略またはTrueで)選択し直すだけです。 ThisWorkbook.Worksheets(1).Select


まとめ

VBAで複数のワークシートを作業グループとして選択する際のポイントは、.SelectメソッドのReplace引数です。

  • 1枚目のシート: mySheet.Select または mySheet.Select Replace:=True
  • 2枚目以降のシート: mySheet.Select Replace:=False

このテクニックを使えば、多数のシートに対する一括書式設定やデータ入力など、手作業では時間のかかる定型業務を効率的に自動化することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次