複数のシートに同じヘッダーを追加したり、同じ印刷設定を適用したりする際、手作業では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枚目のシートを通常通り
.Select
で選択する。 - 次に、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
このテクニックを使えば、多数のシートに対する一括書式設定やデータ入力など、手作業では時間のかかる定型業務を効率的に自動化することができます。