HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > 選択されたシートを操作する

即効テクニック

シート操作関連のテクニック

選択されたシートを操作する

(Excel 97/2000/2002/2003/2007)
Excelでは複数のシートを同時に操作する「シートのグループ化」という機能があります。
たとえば、Sheet1とSheet2をグループ化した状態でアクティブセルに何かデータを入力すると、入力したデータはSheet1とSheet2の両方に入力されます。
もちろんデータの入力だけでなく、セルの書式設定や行列の挿入/削除などワークシートに対するほとんどの操作を複数シートに一括して行えます。
手作業でシートをグループ化するときは、グループ化したシート見出しを、Ctrlキーを押しながらクリックします。

しかし、この機能をマクロから実行しようとすると問題が生じます。
たとえば、Sheet1とSheet2をグループ化した状態で、シート見出しの色を赤色に変えてみましょう。
この操作をマクロ記録すると、次のようなコードが得られます。

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

※注意※
シート見出しの色は、Excel 2002以降のバージョンで変更できます。
マクロ記録では、実際の操作が忠実に記録されます。上記の場合Sheet1とSheet2をグループ化していたのですから、それぞれのシート名が記録されています。 毎回Sheet1とSheet2を操作するマクロならこれでも良いのですが「現在グループ化されているシート」を操作したいときには、どうしたらいいのでしょう。 そのような汎用的なコードは、マクロ記録だけでは作成できません。現在選択されているシートは、SelectedSheetsプロパティで取得できるのですが、このSelectedSheetsプロパティはマクロ記録では記録されないからです。 シートを限定せず、現在選択されているシートのシート見出しを変更するには、次のようにします。
Sub Sample1()
    Dim s As Worksheet
    For Each s In ActiveWindow.SelectedSheets
        s.Tab.ColorIndex = 3
    Next s
End Sub
シートのグループ化を解除するには、任意のシートだけを選択状態にします。 上記のコードで、グループ化の解除まで行いたい場合は次のようにしてください。
Sub Sample2()
    Dim s As Worksheet
    For Each s In ActiveWindow.SelectedSheets
        s.Tab.ColorIndex = 3
    Next s
    ActiveWindow.SelectedSheets(1).Select
End Sub

SelectedSheets(1)は、グループ化されているシートの左端(1枚目)を表します。
さて、グループ化の解除はわかりましたが、任意のシートをグループ化するマクロはどのように書けばいいのでしょう。 グループ化の操作をマクロ記録するとSheets(Array("Sheet1", "Sheet2"))のようなコードが得られます。 もちろんこの方法でも可能ですが、実はもっと簡単なやり方もあります。 たとえば、Sheet1とSheet2をグループ化するには次のように書けます。
Sub Sample3()
    Sheets("Sheet1").Select
    Sheets("Sheet2").Select False
End Sub
あまり知られていませんが、Selectメソッドには「Replace」という引数を指定できます。 引数ReplaceにFalseを指定すると、直前の選択状態を解除しないで、新しいオブジェクトが選択状態になります。 つまり、アクティブシートがSheet1の状態でSheets("Sheet2").Select Falseを実行すると、 Sheet1の選択が解除されないでSheet2も選択されるわけです。 これは、Sheet1とSheet2をグループ化したのと同じ結果になります。 Selectメソッドの引数Replaceは、指定できるオブジェクトが限定されています。 残念ですがセルの選択では使用できません。詳しくはヘルプをご覧ください。