【Excelマクロ】シートの指定

Excelマクロ

シートの指定方法とその選び方

マクロを作成する際、操作対象が1つのシートに限られる場合もあれば、複数のシートをまたいで処理を行う場合もあります。

1つのシートであれば、特に気にせずコードを書いていけばいいですが、複数のシートを操作する場合は、必ずシートを明確に指定する必要が出てきます。

単に「Cells(1,1)」と書くと「選択してあるシートの「A1」になるため、「このシートのA1」という指定をしたいなら具体的に指定をする必要がある、ということです。

シートの指定方法としては次の3種類があります。

・シート名で指定する
・インデックス番号で指定する
・コード名で指定する

それぞれの方法と注意点について、見ていきましょう。


シート名で指定する方法

シート名で指定する方法が最も一般的で分かりやすいです。例えば、シート名が「一覧」という名前の場合、次のようにコードを記載します。

Sheets("一覧").Select

通常、あなたのシートのことはシートと呼んでいると思いますが、実はワークシートというのが正式な名称です。

そのため、「WorkSheets(“一覧”)」と書くのが正しいですが、ほとんどの場合、「Sheets("一覧")」と記載しても動作に影響がないので、シンプルな表現にしていきます。(一部、動かない場合がありますが、今回は説明を省略します。)

この指定方法は見ている「シート名」をそのままコードに書くだけです。

この記載方法のメリット・デメリット
メリット: シート名が一目で分かるため、コードの可読性が高い。
デメリット: シート名を変更すると動作しなくなります。そのため、シート名を変更した場合はコードの修正が必要になります。

インデックス番号で指定する方法

インデックス番号というのは、ブック内で左から何番目のシートか?というのを番号で指定したいものです。

例えば、左から1番目のシートを操作したい場合は次のようなコードになります。

Sheets(1).Select

同様に2番目、3番目のシートを指定する場合には次のように指定します。

Sheets(1): 左から1番目のシート
Sheets(2): 左から2番目のシート
Sheets(3): 左から3番目のシート
注意点

インデックス番号は、お伝えしたようにシートの順序によります。

そのため、シートの追加や削除、並び替えの処理をマクロの動作の一つとして組み込んでいる場合には、指定したインデックス番号がずれてしまうリスクがあります。

シートの順番が変わるような動作を入れる場合には注意をしましょう。

また、次の例のように、シート名が「数字」の場合、「””」で囲って処理をしますが、これはインデックス番号ではなく、シート名が「1」のシートになり、別のものとなるので、注意しましょう。

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

コード名で指定する方法

コード名は、VBE(Visual Basic Editor)内でシートに割り当てられているオブジェクト名です。

デフォルトでは「Sheet1」「Sheet2」などの名前が割り当てられており、次のように指定します。

Sheet1.Select

メリット:オブジェクト名については、VBE上でしか変えることができないので、シート自体を削除する以外には、その他の部分にシートが追加されたり、削除されたりしても影響を受けません。

デメリット:オブジェクト名を確認するにはVBEを開く必要があるため、初心者には少し面倒に感じるかもしれません。

実践的なコード例

それぞれの基本的なコードの使用例です。

Sub SelectSheet()
    ' シート名で指定
    Sheets("一覧").Select

    ' インデックス番号で指定
    Sheets(1).Select

    ' コード名で指定
    Sheet1.Select
End Sub

また、複数回同じシートを参照する場合、Withステートメントを活用するとコードが簡潔になります。

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

まとめ

改めてまとめると、シートの指定方法には次の3つがあります。

シート名で指定

通常使っているシート名をそのまま使えるので、一番わかりやすいです。ただし、シート名を変更した場合にはその都度修正が必要になります。

インデックス番号で指定

全てのシートの順番に応じて指定をすることができます。ただし、シート順序に依存するため、順序が変わると違う処理をしてしまうリスクがあります。

コード名で指定

VBE上で管理されているオブジェクト名を使って指定をすることができます。シート名や順序変更の影響を受けませんが、VBE上での把握が必要となります。

おすすめ

おすすめは、基本的には分かりやすい「シート名での指定」を使用し、必要に応じて「コード名」や「インデックス番号」を組み合わせて使うことです。

また、複数回シートを参照する場合には、WithSet を活用することで、さらに効率的なコードが書けます。ぜひ使い分けを覚えていきましょう!

コメント