【VBA(Excelマクロ)】シートを指定する方法まとめ|シート名からオブジェクト名まで

スポンサードリンク
VBA

この記事を読んでわかること

  • 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」の画面を開いてください。

オブジェクト名で指定1

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

オブジェクト名で指定2

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

オブジェクト名で指定3

Sheet1が青くなるのと同時に、左下にプロパティが出ました。

プロパティウィンドウが表示されていない場合は、上部メニューの「表示」→「プロパティウィンドウ」を選択してください。

プロパティの一番上に「オブジェクト名」というのがあります。
この右の「Sheet1」がオブジェクト名です。

オブジェクト名で指定4

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

オブジェクト名で指定5

今回は「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
実行時エラー-2147352565

「実行時エラー -2147352565」が発生した場合は、指定するシート名やシート番号に誤りがある可能性が高いです。
コードを再確認しましょう。
シート名で指定している場合は、大文字小文字・全角半角・スペースのあるなしなどで不一致と判断される場合があります。

スポンサードリンク

最後に

VBA(Excelマクロ)のシート指定方法について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました