この記事を読んでわかること
- VBAでシートを指定する方法がわかる
- シート指定と同時によくする処理も学べる
- シート指定時によくあるエラーを知れる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBA(Excelマクロ)でシートを指定する方法まとめ
シートをコピーしたり、隣のシートを操作する場合、まずは「シート指定」をする必要があります。
指定方法はいくつかありますので、それぞれ紹介していきます。
まずは基本構文から学んでいきましょう。
基本構文
下記VBAコードがシート指定の基本構文です。
Worksheets(指定するシート)
「Worksheets」を書いたら「()」を書きます。
()内に指定するシートを記述して完了です。
「Worksheets」に他にも「Sheets」を使うことで同様の結果が得られます。
しかしながら、「Sheets」はワークシートだけではなくグラフシートなども含まれるため、予期せぬ結果になる場合があります。
ワークシートを操作する場合は、「Worksheets」と記述する方が無難です。
では、具体的なシート指定方法を見ていきましょう。
シート名で指定(変数指定)
下記のVBAコードを見てください。
Worksheets("Sheet1")
Worksheetsの()内に「シート名」を記述することで、そのシートを指定できます。
()内のシート名は「”(ダブルクォーテーション)」で囲ってください。
囲わないとうまく動作しません。
変数にシート名を代入し、その変数を()内に記述することでも同様の結果が得られます。
Dim name As String
name = "Sheet1"
Worksheets(name) ' Sheet1を指定
前提知識{変数の宣言や使い方}
()内に変数を記述する場合は、「”」で囲う必要はありません。
むしろ囲ってしまうと、「name」というシート名を指定したことになり、エラーが発生する場合があります。
シート番号(インデックス)で指定
シート名が不明な場合は、シート番号(インデックス)で指定することも可能です。
Worksheets(1)
()内にシート番号(インデックス)を指定してください。
一番左のシートなら「1」、左から2番目なら「2」という具合です。
一番右のシートを指定したい場合は、「Worksheets.Count」と記述してください。
Worksheets(Worksheets.Count) ' 一番右のシートを指定
もちろん変数に入れた数値でも指定できます。
Dim num As Integer
num = 1
Worksheets(num) ' 一番左のシートを指定
アクティブシートを指定
現在アクティブ(選択状態)になっているシートを指定する場合は、「Activesheet」と記述するだけでOKです。
Activesheet
()は必要ありません。
オブジェクト名で指定
シート名やシート番号で指定する方法を紹介しましたが、これらには大きな欠点があります。
それは、シート名やシートの並び順が変更されると機能しなくなるという点です。
一方、オブジェクト名でシートを指定することで、シート名やシートの並び順が変わっても影響しません。
まずはシートにオブジェクト名をつける方法から紹介いたします。
「VBAproject」の画面を開いてください。

左上のツリーにシート名が並んでいます。

正確には、「オブジェクト名(シート名)」となっています。
では、Sheet1のオブジェクト名を変えてみましょう。
Sheet1をクリックしてください。

Sheet1が青くなるのと同時に、左下にプロパティが出ました。
プロパティウィンドウが表示されていない場合は、上部メニューの「表示」→「プロパティウィンドウ」を選択してください。
プロパティの一番上に「オブジェクト名」というのがあります。
この右の「Sheet1」がオブジェクト名です。

この部分を好きな名前に変えてみましょう。

今回は「Obj_sheet1」というオブジェクト名に変更しました。
左上のツリーのオブジェクト名も連動して変わります。
では、Sheet1をオブジェクト名で指定してみましょう。
指定はとても簡単です。
Obj_sheet1
「Worksheets(1)」や「Activesheet」の代わりにオブジェクト名である「Obj_sheet1」を記述するだけです。
これでSheet1を指定することができます。
繰り返しになりますが、シート名やシートの並び順が変わっても影響しませんので、
最も安全な指定方法と言えます。
では次に、シート指定と同時によくする処理を見ていきましょう。
シート指定と同時によくする処理
シートを指定しただけでは何も処理することはできません。
今回はシート指定と同時によくする処理をいくつか紹介いたします。
シートの移動・コピー・削除
▼シートの移動
Worksheets("Sheet1").Move
▼シートのコピー
Worksheets("Sheet1").Copy
▼シートの削除
Worksheets("Sheet1").Delet
「Worksheets(“Sheet1”)」の部分はこれまで紹介したシート番号やオブジェクト名での指定でもOKです。
移動・コピー・削除の詳細解説は、下記記事をご参考ください。
シートをアクティブにする
Worksheets("Sheet1").Select
指定したシートの後ろに「.Select」と記述することで、そのシートをアクティブにすることができます。
これにより、シートをグループ化したり解除したりすることもできます。
詳細は下記記事をご参考ください。
セルを指定(値を取得)
Worksheets("Sheet1").Range("A1")
指定したシートに続けて「.Range」を記述することで、セルを指定することができます。
()内にセル名を記述してください。
「Range」の他にも「Cells」を使うことで同様の結果が得られます。
Worksheets("Sheet1").Cells(1,1)
これを利用して、セルの値を取得することもできます。
詳細は下記記事をご参考ください。
よくあるエラーと対処法

「実行時エラー -2147352565」が発生した場合は、指定するシート名やシート番号に誤りがある可能性が高いです。
コードを再確認しましょう。
シート名で指定している場合は、大文字小文字・全角半角・スペースのあるなしなどで不一致と判断される場合があります。
最後に
VBA(Excelマクロ)のシート指定方法について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!