【Excel VBA】シートを選択・アクティブにする3つの方法と使い分け

VBAで複数のシートにまたがる処理を行う際には、まず「どのシートを操作するのか」を明確に指定する必要があります。これは、ユーザーが手作業でシートタブをクリックする操作に相当します。

VBAでシートを選択(アクティブ化)するには、主に**インデックス番号(左からの順番)**で指定する方法と、シート名で指定する方法があります。この記事では、それぞれの方法と、どちらを使うべきかという指針、そしてWorksheetsSheetsの重要な違いを解説します。


目次

方法1:インデックス番号(左からの順番)でシートを選択する

Excelのシートタブの、左からの順番を「インデックス番号」としてシートを指定する方法です。一番左のシートが1、次が2となります。

コードと解説

Sub SelectSheetByIndex()
    ' 1番目(一番左)のワークシートを選択します
    ThisWorkbook.Worksheets(1).Select
    
    ' 選択したシートの名前を確認
    MsgBox "1番目のワークシート「" & ActiveSheet.Name & "」を選択しました。"
End Sub
  • Worksheets(1): 1番目のワークシートを指します。
  • .Select: 指定したシートを選択(アクティブに)します。

✓ 注意点: この方法は、ユーザーがシートの順番をドラッグ&ドロップで入れ替えると、Worksheets(1)が指すシートも変わってしまいます。そのため、意図しないシートを操作してしまう危険性があり、通常この方法の使用は推奨されません。


方法2:シート名でシートを選択する(推奨)

シートタブに表示されている名前を直接指定する方法です。シートの順番に影響されないため、最も安全で確実な方法です。

コードと解説

Sub SelectSheetByName()
    Dim sheetToSelect As String
    sheetToSelect = "売上データ" ' 例: 操作したいシート名を指定

    On Error Resume Next ' シートが存在しない場合のエラーを回避
    
    ' 指定した名前のワークシートを選択します
    ThisWorkbook.Worksheets(sheetToSelect).Select
    
    ' エラーが発生した場合(シート名が間違っているなど)の処理
    If Err.Number <> 0 Then
        MsgBox "「" & sheetToSelect & "」という名前のシートは見つかりませんでした。", vbCritical
    Else
        MsgBox "「" & sheetToSelect & "」シートを選択しました。"
    End If
    
    On Error GoTo 0 ' エラー処理を元に戻す
End Sub
  • Worksheets("売上データ"): 「売上データ」という名前のワークシートを正確に指します。

この方法であれば、ユーザーがシートの順番を自由に入れ替えても、マクロは常に正しいシートを選択できます。


Worksheets と Sheets の違い

VBAには、シートの集まりを指すオブジェクトとしてWorksheetsSheetsの2種類があります。

  • Worksheets: ワークシート(セルがある通常のシート)のみを含みます。
  • Sheets: すべての種類のシート(ワークシート、グラフシート、古いマクロシートなど)を含みます。

通常は、セルを操作することがほとんどなのでWorksheetsを使えば問題ありません。しかし、グラフシートをアクティブにしたい場合など、ワークシート以外のシートも操作対象に含めたい場合は、Sheetsを使う必要があります。

Sub SelectAnySheet()
    ' ブック内の3番目の「シート」(種類を問わない)を選択
    ThisWorkbook.Sheets(3).Select
    
    ' 選択したシートの種類を調べる
    MsgBox "3番目のシート「" & ActiveSheet.Name & "」を選択しました。" & vbCrLf & _
           "このシートの種類は " & TypeName(ActiveSheet) & " です。"
End Sub

まとめ

VBAでシートを選択する方法にはいくつかありますが、以下の指針で使い分けるのがベストです。

方法構文特徴
インデックス番号Worksheets(1)簡単だが、シートの順番が変わると誤動作するリスクがあるため非推奨
シート名Worksheets("シート名")確実で、シートの順番に依存しないため強く推奨
SheetsコレクションSheets(1) or Sheets("シート名")グラフシートなど、ワークシート以外のシートも対象にしたい場合に必須

Google スプレッドシートにエクスポート

結論として、マクロの安定性を保つために、原則としてシート名でシートを選択するように心がけましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次