この記事を読んでわかること
- 「Worksheets」でできることや役割を学べる
- 「Worksheets」を使用した時によくあるエラーと対処法を知れる
- 「Worksheets」と「Sheets」の違いがわかる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBA(Excelマクロ)のWorksheetsとは
Worksheetsは、Excelのワークシートを指定・操作するためのコレクションです。
コレクションとは、同類のオブジェクトをまとめたもの(集合体)を指します。
オブジェクトとは、操作対象(ワークブックやワークシート、セルなど)を指します。
要は、ワークシートを操作するための命令だと思ってください。
WorksheetsとSheetsの違い
似たようなものに「Sheets」があります。
「Worksheets」は、Excelのワークシートのみを指します。
一方「Sheets」は、Excelのワークシートだけでなく、グラフシートやVBAのモジュールシートなども含まれます。

ワークシートを操作する場合は、「Worksheets」を使うのが無難です。
なぜなら、例えばワークシートがいくつあるのかをカウントしたい場合、「Sheets」を使うとグラフシートなども含んでしまうことになるからです。
「Sheets」がパソコン、「Worksheets」がノートパソコンみたいなものでしょうか。
「パソコンの数をカウントして!」と言われて、ノートパソコンしか無ければ問題ありませんが、
デスクトップパソコンもある場合、これもカウントしてしまいますよね…。
「Sheets」の方が文字数が少なくて書きやすいので、ついこちらを使ってしまいがちです。
グラフシートなどが無ければ「Sheets」でも問題は起きませんが、一度ついたクセはなかなか直りません。
予期せぬバグが起こる前に「ワークシート操作=Worksheetsを使う」というクセをつけておきましょう。
Worksheetsでシートを操作する方法
シートを指定(シート名・シート番号)
下記VBAコードは、「Worksheets」を使ってシートを指定した例です。
▼シート名で指定
Worksheets("Sheet1")
▼シート番号で指定
Worksheets(1)
▼アクティブシートを指定(参考)
ActiveSheet
シート名で指定する場合は「”(ダブルクォーテーション)」で囲ってください。
下記のように、変数に入れたシート名で指定する場合、「”」は不要です。
sheetname = "Sheet1"
Worksheets(sheetname).Range("A1") ' シート名の「"」は不要
シート番号の「1」は一番左側のシートを指します。
「2」なら左から二番目、一番右のシートを指定したい場合は、「Worksheets.Count」を記述してください。
▼一番右のシートを指定
Worksheets(Worksheets.Count)
シート指定に続けてセルを指定する場合が多いです。
Worksheets("Sheet1").Range("A1")
上記VBAコードでは、「Sheet1」の「A1」セルを指定したことになります。
▼セル指定後の使用例
Sub セルの値を表示()
Debug.Print Worksheets("Sheet1").Range("A1").Value
End Sub


前提知識{マクロの基礎・作り方から実行まで}
前提知識{「Debug.Print」で値を表示させる方法}
今回は一般的な「Range」を使っていますが、「Cells」でもセルを指定できます。
Worksheets("Sheet1").Cells(1, 1) ' Cells(行, 列)
()内の左側の1が1行目を指し、右側の1が1列目(A列)を指します。
つまり「Cells(1, 1)」はA1セルを指定したということになります。
シートを選択(.Select)
「Select」メソッドを使うことで、指定したシートを選択した状態にすることができます。
Worksheets("Sheet2").Select ' Sheet2を選択(Activeにする)

メソッドとは、特定のオブジェクト(セルやシートなど)に対して実行できる機能で、
「オブジェクト名.メソッド名」というコードで記述します。
「Worksheets(“Sheet2”).Select」と記述することで、AddメソッドをSheet2に対して実行したということになります。
シート選択の詳細解説は、下記記事をご参考ください。
グループ化や選択解除方法なども解説しております。
シートを追加(.Add)・削除(.Delete)
「Add」メソッドや「Delete」メソッドを使うことで、シートの追加や削除が可能です。
Worksheets.Add ' 新しいシートを追加
Worksheets("Sheet1").Delete ' 指定のシートを削除
シートの追加や削除方法の詳細は、下記記事で解説しております。
シートをコピー(.Copy)
「Copy」メソッドを使用することで、指定のシートをコピーすることができます。
Worksheets("Sheet1").Copy
コピー方法の詳細は、下記記事をご参考ください。
シートを移動(.Move)
「Move」メソッドを使用することで、シートを指定の位置に移動させることができます。
Worksheets("Sheet2").Move Before:=Worksheets(1) ' Sheet2を先頭に移動
シートの名前を変更(.Name)
「Name」メソッドを使用することで、指定のシート名を変更することができます。
Worksheets("Sheet1").Name = "Utataneシート" ' Sheet1の名前を「Utataneシート」に変更
シート名変更方法の詳細は、下記記事をご参考ください。
シートを取得(set)
「Set」ステートメントを使うことで、シートを取得して変数に代入することができます。
Set sht = Worksheets("Sheet1") ' Sheet1を取得して変数「sht」に代入
ステートメントとは、命令や宣言を行うための構文です。
「今から特別な処理を始めますよ!」という宣言だと思ってください。
「選手宣誓」や「○○を始めます!」といった感じでしょうか。
VBAで代表されるステートメントには、変数の宣言を行う「Dim」やループ文を管理する「For」、サブプロシージャの始まりとなる「Sub」などがあります。
通常、セルの値を取得する場合などは、「Set」をつけません。
val = Worksheets("Sheet1").Range("A1").Value ' Sheet1のA1セルの値を取得して変数に代入
しかしながらシートそのものやセルそのものを取得する場合は、特別な処理となるため「Set」が必要になります。
詳細は下記記事をご参考ください。
Worksheets使用時のよくあるエラーと対処法
オブジェクトが必要です

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


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