VBAでシートを指定する3つの方法|シート名・インデックス番号・コード名の使い分け

VBAでシートを指定するには、「シート名」「インデックス番号」「コード名」の3つの方法があります。基本的にはシート名で指定するのが一番わかりやすく、初心者にはおすすめです。

この記事では、次の内容を順番に解説します。

  • シート名で指定する方法
  • インデックス番号で指定する方法
  • コード名で指定する方法
  • 3つの使い分けの考え方

なぜシートの指定が必要なのか?

1つのシートだけで作業するマクロなら、特にシートを指定しなくても動きます。しかし、複数のシートをまたいで処理する場合は、「どのシートのセルか」を明確にする必要があります。

' シートを指定しない場合(今選択しているシートのA1)
Cells(1, 1).Value = "Hello"

' シートを指定した場合(「一覧」シートのA1)
Sheets("一覧").Cells(1, 1).Value = "Hello"

シートを指定しないと、マクロ実行時にどのシートを開いているかによって結果が変わってしまいます。複数シートを扱うマクロでは、必ずシートを指定しましょう。

シート名で指定するには?

最も一般的でわかりやすい方法です。シートのタブに表示されている名前をそのまま使います。

' 「一覧」シートを選択する
Sheets("一覧").Select

' 「一覧」シートのA1に値を入れる
Sheets("一覧").Cells(1, 1).Value = "Hello"

メリット:シート名がそのままコードに書かれるので、何を操作しているか一目でわかります。

デメリット:シート名を変更すると動作しなくなります。シート名を変えたらコードも修正が必要です。

インデックス番号で指定するには?

ブック内で左から何番目のシートかを番号で指定します。

' 左から1番目のシートを選択する
Sheets(1).Select

' 左から2番目のシートのA1に値を入れる
Sheets(2).Cells(1, 1).Value = "Hello"

メリット:シート名がわからなくても順番で指定できます。全シートをループ処理するときに便利です。

デメリット:シートの追加・削除・並び替えで番号がずれるリスクがあります。

注意点として、シート名が数字の場合は "" で囲む必要があります。

Sheets(1)    ' 左から1番目のシート
Sheets("1")  ' シート名が「1」のシート(別物)

コード名で指定するには?

VBE(Visual Basic Editor)内でシートに割り当てられているオブジェクト名で指定します。デフォルトでは「Sheet1」「Sheet2」などの名前がついています。

' コード名で指定する
Sheet1.Select

' コード名でA1に値を入れる
Sheet1.Cells(1, 1).Value = "Hello"

メリット:シート名を変更しても、シートの順番を変えても影響を受けません。最も安定した指定方法です。

デメリット:コード名はVBEを開かないと確認できないため、初心者には少しわかりにくいです。

3つの指定方法をどう使い分ける?

おすすめは、基本的にはシート名で指定し、必要に応じて他の方法を組み合わせることです。

  • シート名:普段使いに最適。コードが読みやすい。
  • インデックス番号:全シートをループ処理するときに使う。
  • コード名:シート名や順番が変わる可能性があるときに使う。

また、同じシートに対して複数の操作をする場合は、With を使うとコードがすっきりします。

Sub WithExample()

    With Sheets("一覧")
        .Cells(1, 1).Value = "Hello"
        .Cells(1, 1).Interior.Color = RGB(255, 0, 0)
    End With

End Sub

まとめ

  • シート名で指定Sheets("一覧").Select — 一番わかりやすい。シート名変更時はコード修正が必要。
  • インデックス番号で指定Sheets(1).Select — ループ処理に便利。シートの順番変更に注意。
  • コード名で指定Sheet1.Select — 最も安定。VBEでの確認が必要。
  • おすすめ:基本はシート名で指定し、必要に応じて使い分ける。

よくある質問

SheetsとWorkSheetsの違いは?

WorkSheets はワークシートだけを対象にします。Sheets はワークシートに加えてグラフシートなども含みます。通常のExcel作業ではどちらを使っても結果は同じですが、厳密にはワークシートだけを扱う場合は WorkSheets が正確です。

存在しないシート名を指定するとどうなる?

「インデックスが有効範囲にありません」というエラーが発生します。シート名を変数で指定する場合は、事前にそのシートが存在するかチェックしてからアクセスすると安全です。

コード名はどこで確認できる?

VBE(Alt+F11で開く)の左側にある「プロジェクトエクスプローラー」で確認できます。「Sheet1(一覧)」のように表示されていて、カッコの外がコード名、カッコの中がシート名です。

全シートに対して同じ処理をしたい場合は?

For Each を使うと、すべてのシートに対してループ処理ができます。For Each ws In Sheets と書いて、ws の中で各シートを操作します。

シートを指定せずにCells(1,1)と書くとどうなる?

その時点で選択されている(アクティブな)シートのA1セルが対象になります。1つのシートだけを操作するマクロなら問題ありませんが、複数シートを扱う場合は意図しないシートが操作される原因になるので、必ずシートを指定しましょう。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール