サイトについて      連絡先   検索

VBA シートを取得する

はじめに

Excel VBA マクロのシートを取得する方法を紹介します。

Sheets プロパティまたは Worksheets プロパティからシートを取得できます。

名前やインデックスや選択中、ワークブックなどを指定できます。

  • 目次
    • シートを取得する
    • すべてのシートを取得する

シートを取得する

sheet1

インデックスで取得

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

1 番目のシートを取得するにはSheets(1)またはWorksheets(1)を入力します。1 番左のシートが 1 です。


Dim ws As Worksheet
Set ws = Sheets(1)     ' 1 番目のシートを取得
Set ws = Worksheets(1) ' 1 番目のシートを取得
Debug.Print(ws.Name)

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

シート名で取得

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

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


Dim ws As Worksheet
Set ws = Sheets("Sheet1")     ' シート「Sheet1」を取得
Set ws = Worksheets("Sheet1") ' シート「Sheet1」を取得
Debug.Print(ws.Index)

指定したシートが存在しないときは「エラー 9 インデックスが有効範囲にありません。」が発生します。

アクティブなシートを取得

アクティブなシートを取得するには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)

ActiveWindow は VBA を実行しているシートではなく、アクティブなワークブックのシートを取得します。

最後のシートを取得

最後のシートを取得するにはSheets(Sheets.Count)またはWorksheets(Worksheets.Count)を入力します。最後とは 1 番右のシートのことです。


Dim ws As Worksheet
Set ws = Sheets(Sheets.Count)         ' 最後のシートを取得
Set ws = Worksheets(Worksheets.Count) ' 最後のシートを取得
Debug.Print(ws.Name)

別のワークブックを取得

Workbooks の引数にインデックスかブック名を指定すると、そのブックのシートを取得できます。

ブック名「Book2.xlsx」のブックを取得するにはWorkbooks("Book2.xlsx").SheetsまたはWorkbooks("Book2.xlsx").Worksheetsのように入力します。


Dim ws As Worksheet
' ブック「Book2.xlsx」のシート「Sheet1」を取得
Set ws = Workbooks("Book2.xlsx").Sheets("Sheet1")
' 2 番目のブックの 2 番目のシートを取得
Set ws = Workbooks(2).Sheets(2)

Debug.Print(ws.Name)

すべてのシートを取得する

Sheets または Worksheets はコレクションになっているので、これをループしてすべてのシートを取得できます。


' Sheets を For Each でループする
Dim ws As Worksheet
For Each ws In Sheets
    Debug.Print(ws.Name)
Next

' Worksheets を For Next でループする
Dim i As Integer
For i = 1 To Worksheets.Count
    Set ws = Worksheets(i)
    Debug.Print(ws.Name)
Next
  • 目次
    • シートを取得する
    • すべてのシートを取得する