ワークシートを選択する

にメンテナンス済み

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 #シート #選択