「activesheet 変更する」
「excel vba activesheet 変更」
といった検索キーワードで、時折アクセスがあります。
Excel VBAでアクティブなシートを変更するには、どのようなコードを書けばいいのかを探していらしたのでしょうか。
Selectメソッドでアクティブなシートを変更できる
拙著『いちばんやさしいExcel VBAの教本』のChapter 11でもご紹介している、Worksheetオブジェクト(あるいはChartオブジェクト)のSelectメソッドを使えば、アクティブなシートを変更できます。
Sheets(1).Select
End Sub
上記のSubプロシージャを実行すると、アクティブなブックの一番左のシートが選択されます。
複数シート選択時にはActivateメソッド
複数のシートが選択されているときにアクティブシートを変更したい場合には、Selectメソッドではダメです。複数シートの選択状態が解除され、1枚のシートのみ選択されてしまいます。
こういう場合にはActivateメソッドを利用します。Activateメソッドなら、複数シートの選択状態は解除されずにアクティブなシートが変更されます。
非表示シートがあるときにActivateメソッドは要注意
であるならば、Activateメソッドをいつでも使えばイイのではないか、と考える方がいらっしゃるかもしれませんが、ダメです。
非表示シートが存在するときにActivateメソッドを使うと、期待していたのとは別のシートがアクティブになるためです。Activateメソッドの場合、非表示になっていない別のシートがアクティブになってしまうのです。
先にご紹介したSelectメソッドの場合、非表示シートであれば、正しく実行時エラーが発生してくれます。
非表示を考慮してアクティブシートを変更する
If文やOn Error文で、非表示シートだった場合の処理を入れた上で、Selectメソッドを使うことをおすすめします。
With Sheets(1)
If .Visible = xlSheetVisible Then
.Select
Else
MsgBox "非表示シートはアクティブにできません。"
End If
End With
End Sub
Sub ActiveSheetを変更する_OnError文で非表示シートに対応()
On Error GoTo ErrHandl
Sheets(1).Select
Exit Sub
ErrHandl:
MsgBox "非表示シートはアクティブにできません。"
End Sub
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » ActiveSheetを変更するには