ワークシートを選択する
にメンテナンス済み
1 枚のシートを選択する
Worksheets コレクションにシート名またはインデックス番号を渡し、Select メソッドを実行します。
シート名を指定して選択
Public Sub SelectSingleSheet()
Worksheets("Sheet1").Select
End Sub
インデックス(左から数えた順番)を指定して選択
Public Sub SelectSingleSheetByIndex()
Worksheets(1).Select
End Sub
インデックスはブック内の並び順(非表示シートも数えます)です。文字列 "1" は「1 という名前のシート」、数値 1 は「1 番目のシート」を意味する点に注意してください。
Worksheets と Sheets の違い
Worksheets は、ワークシートのみを対象とします。Sheets は、ワークシートとグラフシートの両方を含むコレクションです。Select は対象が表示されているシートである必要があります。非表示のシートを選択しようとすると実行時エラー 1004 になります。
複数のシートを選択する
Array 関数でシート名を配列にして渡すと、複数のシートをまとめて選択できます。
Public Sub SelectMultipleSheets()
Worksheets(Array("Sheet1", "Sheet2")).Select
End Sub
アクティブシートを明示する
複数シートを選択した状態でも、アクティブなシートは 1 枚だけです。特定のシートをアクティブにしたい場合は、選択後に Worksheets("Sheet1").Activate を実行してください。
応用例
変数でシートを選択する
Public Sub SelectSheetDynamically()
Dim sheetName As String
sheetName = "Sheet3"
Worksheets(sheetName).Select
End Sub
名前の条件に合うシートをまとめて選択する
Select の引数 Replace を False にすると、現在の選択を解除せずにシートを追加できます。1 枚目は True(既定)で選択し、2 枚目以降を False で追加するのがポイントです。
名前に「Report」を含むシートをすべて選択
Public Sub SelectSheetsByPattern()
Dim ws As Worksheet
Dim isFirst As Boolean
isFirst = True
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If InStr(ws.Name, "Report") > 0 And ws.Visible = xlSheetVisible Then
ws.Select isFirst ' 1 枚目は選択を置き換え、以降は追加
isFirst = False
End If
Next ws
End Sub
最初から False を渡すと、すでにアクティブなシートも選択に含まれたままになるため、意図しないシートが対象になります。
シートを選択せずに操作する
多くの場合、シートを選択する必要はありません。選択は画面の切り替えを伴うため処理が遅くなり、実行中に別のシートがアクティブだと誤動作の原因にもなります。
選択せずにセルへ書き込む
Public Sub WriteWithoutSelect()
Worksheets("Sheet1").Range("A1").Value = "Hello"
End Sub
注意点
- 存在しないシート名を指定すると、実行時エラー 9(インデックスが有効範囲にありません)が発生します。
- 別のブックのシートを選択するには、先にそのブックをアクティブにする必要があります。
- 複数シートを選択した状態でセルを編集すると、選択中の全シートの同じセルに反映されます。意図せず実行しないよう、作業後は 1 枚のシートの選択に戻してください。
まとめ
- 1 枚の選択は
Worksheets("名前").SelectまたはWorksheets(番号).Select - 複数選択は
Worksheets(Array(...)).Select - 条件で追加選択する場合は、1 枚目を置き換え、以降を
Select Falseで追加する - 可能なら選択せず、シートを直接指定して操作する
#VBA
#Excel
#シート
#選択