現在選択されているシートを操作する


たとえば、Sheet1とSheet3のシート見出しを赤色に設定する場合、次のように操作します。

  1. Sheet1をアクティブにする
  2. Ctrlキーを押しながらSheet3のシート見出しをクリックして選択する
  3. Ctrlキーを押しながらSheet3のシート見出しをクリックして選択する
  4. シート見出しの色を赤色に設定する

この操作をマクロ記録すると、次のようなコードが生成されます。

Sub Macro1()
    Sheets(Array("Sheet1", "Sheet3")).Select
    Sheets("Sheet1").Activate
    ActiveWorkbook.Sheets("Sheet1").Tab.ColorIndex = 3
    ActiveWorkbook.Sheets("Sheet3").Tab.ColorIndex = 3
End Sub

毎回Sheet1とSheet3を操作するのでしたら、この記録されたコードを再利用すればいいでしょう。そうではなく現在選択されているシート(グループ化されているシート)を対象にしたマクロを作りたいのでしたら、ここで記録されたコードはあまり役立ちません。なぜなら、Sheet1やSheet3といったシート名が固定されているからです。

マクロを実行するときに選択されているシートだけを操作しようと、次のようなコードを実行しても結果は失敗に終わります。

Sub Sample1()
    ActiveSheet.Tab.ColorIndex = 3
End Sub

アクティブシートとはアクティブなシートであり、これは常に1つしか存在しません。アクティブシートと現在選択されているシート(グループ化されているシート)は別だからです。

現在選択されているシート(グループ化されているシート)に対する操作は、次のようにSelectedSheetsプロパティを使います。SelectedSheetsプロパティは、現在選択されているシートのコレクションを返します。

Sub Sample2()
    Dim s
    For Each s In ActiveWindow.SelectedSheets
        s.Tab.ColorIndex = 3
    Next s
End Sub

SelectedSheetsプロパティがあまり有名でないのは、上記のようにグループ化したシートを操作してもマクロ記録されないからです。また、SelectedSheetsプロパティはWorkbookオブジェクトではなくWindowオブジェクトのプロパティだということも、認知度を下げている理由のひとつでしょう。

なお、シートをグループ化する方法は「シートをグループ化する」をご覧ください。