更新日:、 作成日:

VBA シートを選択またはアクティブにする

はじめに

Excel VBA マクロでシートを選択またはアクティブにする方法を紹介します。

Sheets(1).Select または Worksheets(1).Select メソッドから、1 番左のシートを選択できます。

ActiveWindow.SelectedSheets プロパティから、選択しているシートを取得できます。

Activate メソッドから、シートをアクティブにできます。

ActiveSheet オブジェクトから、アクティブシートを取得できます。

シートを指定して取得するには「シートを取得する」をご覧ください。

シートを選択する

sheet1

Sheets または Worksheets からシートを取得できます。

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

  • Sheets:すべてのシートを取得
  • Worksheets:ワークシートのみ取得(グラフシートなどは取得しない)

インデックスで選択

Sheets の引数にインデックスを指定すると、そのシートを選択できます。

1 番左のシートを選択するには Sheets(1).Select または Worksheets(1).Select を入力します。1 番左のシートが 1 です。

Sheets(1).Select     ' 1 番左のシートを選択
Worksheets(1).Select ' 1 番左のシートを選択
Sheets(2).Select     ' 2 番目のシートを選択
Worksheets(2).Select ' 2 番目のシートを選択

シート名で選択

Sheets の引数に名前を指定すると、そのシートを選択できます。

シート名「Sheet1」のシートを選択するには Sheets("Sheet1").Select または Worksheets("Sheet1").Select を入力します。

Sheets("Sheet1").Select     ' 「Sheet1」のシートを選択
Worksheets("Sheet1").Select ' 「Sheet1」のシートを選択

複数のシートを選択

1 番目と 2 番目のシートを選択するには Sheets(Array(1, 2)).Select または Sheets(Array("Sheet1", "Sheet2")).Select のように入力します。

Sheets(Array(1, 2)).Select               ' 1 番目と 2 番目のシートを選択
Sheets(Array("Sheet1", "Sheet2")).Select ' 「Sheet1」と「Sheet2」のシートを選択

Worksheets(Array(1, 2)).Select               ' 1 番目と 2 番目のシートを選択
Worksheets(Array("Sheet1", "Sheet2")).Select ' 「Sheet1」と「Sheet2」のシートを選択
sheet12

引数に配列でインデックスやシート名を指定します。

すべてのシートを選択

すべてのシートを選択するには Sheets.Select または Worksheets.Select を入力します。

Sheets.Select
Worksheets.Select

シートをアクティブにする

シートをアクティブにするには Sheets(1).Activate または Worksheets("Sheet1").Activate のように入力します。

Sheets(1).Activate            ' 1 番左のシートをアクティブ
Worksheets("Sheet1").Activate ' 「Sheet1」のシートをアクティブ

複数選択しているシートの中から選択するとき、Select は選択範囲がそのシートになるのに対して、Activate は選択範囲を維持したまま指定したシートをアクティブにできます。

アクティブシートを取得する

アクティブシートを取得するには ActiveSheet を入力します。

Dim ws As Worksheet
Set ws = ActiveSheet ' アクティブシートを取得
Debug.Print(ws.Name)

アクティブシートとは、開いているシートのことです。

選択シートを取得

アクティブブックの選択しているシートを取得するには ActiveWindow.SelectedSheets を入力します。複数のシートが選択されているときは、そのすべてのシートを取得します。

Dim ws As Worksheet
Set ws = ActiveWindow.SelectedSheets(1)        ' 選択している 1 番左のシートを取得
Set ws = ActiveWindow.SelectedSheets("Sheet2") ' 選択しているシート「Sheet2」を取得
Debug.Print(ws.Name)

VBA を実行しているブックの選択しているシートを取得するには ThisWorkbook.Windows(1).SelectedSheets を入力します。

' このコードを実行しているブックの選択シートを取得
Dim ws As Worksheet
For Each ws In ThisWorkbook.Windows(1).SelectedSheets
    Debug.Print(ws.Name)
Next

' 開いているブック「Book1.xlsx」の選択シートを取得
For Each ws In Workbooks("Book1.xlsx").Windows(1).SelectedSheets
    Debug.Print(ws.Name)
Next

SelectedSheets のインデックスは、選択している中で 1 番左のシートが 1 です。

ブックの指定について詳しくは下記の「別ブックのシートを選択やアクティブにする」をご覧ください。

別ブックのシートを選択やアクティブにする

アクティブブックに対してのみシートを選択できます。別ブックのシートを選択するには、先にそのブックをアクティブにします。シートをアクティブにするのはすべてのブックに対してできます。

ブックを指定しないシートの操作はすべて「アクティブブック」に対して行われます。

  • アクティブブック:開いているすべてのブックの中で一番手前に表示されているブックです。
  • VBA を実行しているブック:実行している VBA のコードがあるブックです。

アクティブブック

ブックを指定しないシートの操作は、アクティブブックを表す ActiveWorkbook. が省略されています。

' どちらも同じコード
Call Sheets.Add
Call ActiveWorkbook.Sheets.Add
ショートカットや VBA の IDE から実行したときに、別ブックがアクティブになっていることがあります。

VBA を実行しているブック

VBA を実行しているブックに対して操作するには ThisWorkbook を入力します。

' VBA を実行しているブックに対して操作
Call ThisWorkbook.Sheets.Add
Call ThisWorkbook.Worksheets.Add

ブックを指定

ブックを指定するには Workbooks の引数にブック名またはインデックスを指定します。

ブック「Book2.xlsx」を指定するには Workbooks("Book2.xlsx") を入力します。

Dim wb As Workbook
Set wb = Workbooks("Book2.xlsx")
' Set wb = Workbooks(2) ' 2 番目のブック

wb.Activate ' 先にブック「Book2.xlsx」をアクティブにする
wb.Sheets(1).Select              ' そのブックのシートを選択
wb.Worksheets("Sheet1").Activate ' そのブックとシートをアクティブ

Workbooks のインデックスは、ブックを開いた順番に 1 からスタートします。