この記事を読んでわかること
- VBAでシートを取得する方法がわかる
- シートのプロパティを取得する方法を学べる
- シート取得でよくあるエラーと対処法を知れる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBA(Excelマクロ)でシートを取得する方法
シートを取得するには、「Worksheets」コレクションの中からシート(オブジェクト)を指定します。
コレクションとは、同類のオブジェクトをまとめたもの(集合体)を指します。
オブジェクトとは、操作対象(ブックやシート、セルなど)を指します。
要は、数あるシートの中から1つを指定すればいいということになります。
ではまず、基本構文から見ていきましょう。
基本構文
シートを取得するには、下記のように記述します。
▼基本構文
Worksheets(シートを指定)
▼使用例
Worksheets("Sheet1") ' シート名で指定
Worksheets(1) ' シート番号で指定
アクティブシート(選択状態のシート)を取得する場合は、下記のとおり記述してください。
Activesheet
シートを指定する方法は下記記事で解説しております。ご参考ください。
しかしながら、シートを取得しただけでは、何もしていないのと同じです。
では次に、取得したシートを変数に代入してみましょう。
取得したシートを変数に代入
下記VBAコードにて、取得したシートを変数に代入することができます。
Dim ws As Worksheet ' シートを代入する変数(ws)を作成
Set ws = Worksheets("Sheet1") ' シートを変数に代入
前提知識{マクロの基礎・作り方から実行まで}
前提知識{変数の宣言や使い方}
シートやセルなど、「オブジェクト」を変数に代入する場合は「Set」が必要になります。
詳細は下記記事で解説しておりますのでご参考ください。
では、取得したシートのプロパティを表示してみましょう。
取得したシートのプロパティを表示
今回は、取得したシートのシート名を表示した例です。
下記のVBAコードを見てください。
Sub シート名を表示()
Dim ws As Worksheet
Set ws = Worksheets(1)
Debug.Print ws.Name
End Sub
前提知識{「Debug.Print」で値を表示させる方法}

今回は「シートを取得」→「取得したシートのプロパティ(シート名)を表示」という処理を行いましたが、
シートのプロパティだけを取得して表示する方法もあります。
次項をご覧ください。
シートのプロパティを取得する方法
シート数を取得
「Worksheets」に「.Count」を付けることで、シート数を取得することができます。
Sub シート数を取得()
Dim sheetnum As Integer
sheetnum = Worksheets.Count
Debug.Print sheetnum
End Sub
「Sheet1~3」の3枚のシートがあった場合、変数「sheetnum」には「3」が入ります。

シート名を取得
指定したシートに「.Name」を付けることで、シート名を取得することができます。
Sub シート名を取得()
Dim sheetname As String
sheetname = Worksheets(1).Name
Debug.Print sheetname
End Sub

Forループと絡めることで、全シート一覧を表示することも可能です。
前提知識{ループ処理(For)}
Sub シート名を取得()
Dim sheetname As String
Dim i As Integer
For i = 1 To Worksheets.Count
sheetname = Worksheets(i).Name
Debug.Print sheetname
Next i
End Sub

シート番号を取得
指定したシートに「.Index」を付けることで、そのシートの番号(インデックス)を取得することができます。
Sub シート番号を取得()
Dim sheetindex As Integer
sheetindex = Worksheets("Sheet1").Index
Debug.Print sheetindex
End Sub

シートのオブジェクト名を取得
指定したシートに「.CodeName」をつけることで、そのシートのオブジェクト名を取得することができます。
Sub シート名を取得()
Dim sheetcodename As String
sheetcodename = Worksheets(1).CodeName
Debug.Print sheetcodename
End Sub

オブジェクト名は、VBAProjectの画面で確認・変更することができます。

シートのオブジェクト名を取得することで、以降オブジェクト名でシート指定を行うことができます。
これにより、プログラム途中でシートの並び順が変わったり、シート名が変わっても影響を受けません。
よくあるエラーと対処法
オブジェクトが必要です

このエラーは、Setの使い忘れで発生する場合が多いです。
詳細な対処方法は、下記記事をご参考ください。
その他の実行時エラー


実行時エラーは、コードで指定した処理が実行できなかった時に発生します。
例えば「存在しないシートを指定した・選択した」「対応していないオブジェクトにメソッドを使った」などです。
「デバッグ」をクリックすることで、該当箇所が黄色くマーキングされますので、コードを再確認しましょう。
最後に
VBA(Excelマクロ)でシートを取得する方法について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!