【Excel VBA】隣のシート(前・後ろ)をオブジェクトとして取得する方法

VBAで複数のワークシートを順番に処理していく際、「現在アクティブなシートの、すぐ隣のシート」を操作したいという場面がよくあります。

VBAのWorksheetオブジェクトには、こうした隣接シートを簡単に取得するための便利なプロパティ、.Previous(前のシート)と.Next(後のシート)が用意されています。この記事では、これらのプロパティの使い方と、エラーを避けるための注意点を解説します。


目次

完成したVBAコード

以下が、現在アクティブなシートを基準に、その両隣のシートの名前を取得して表示するVBAコードです。先頭や末尾のシートでエラーにならないための考慮も含まれています。

Sub GetNeighborSheetNames()

    ' 変数を宣言します
    Dim currentSheet As Worksheet
    Dim previousSheetName As String
    Dim nextSheetName As String
    
    ' 現在アクティブなシートを基準とする
    Set currentSheet = ActiveSheet
    
    ' --- 1. 前(左隣)のシートを取得 ---
    On Error Resume Next ' エラーを一旦無視する設定
    Set prevSheet = currentSheet.Previous
    On Error GoTo 0 ' エラー処理を元に戻す
    
    If Not prevSheet Is Nothing Then
        previousSheetName = prevSheet.Name
    Else
        previousSheetName = "(ありません)"
    End If
    
    
    ' --- 2. 後(右隣)のシートを取得 ---
    On Error Resume Next
    Set nextSheet = currentSheet.Next
    On Error GoTo 0
    
    If Not nextSheet Is Nothing Then
        nextSheetName = nextSheet.Name
    Else
        nextSheetName = "(ありません)"
    End If

    
    ' --- 3. 結果を表示 ---
    MsgBox "基準のシート: " & currentSheet.Name & vbCrLf & vbCrLf & _
           "前のシート (.Previous): " & previousSheetName & vbCrLf & _
           "後のシート (.Next): " & nextSheetName, vbInformation, "隣接シートの取得"

End Sub

コードのポイント解説

① 前のシートを取得: .Previous プロパティ

mySheet.Previousは、mySheetすぐ左隣にあるシートWorksheetオブジェクトを返します。このプロパティを使えば、シートのインデックス番号や名前が分からなくても、相対的な位置で前のシートを特定できます。

② 後のシートを取得: .Next プロパティ

mySheet.Nextは、mySheetすぐ右隣にあるシートWorksheetオブジェクトを返します。

③【重要】エラーハンドリング

これらのプロパティを使う上で、最も注意すべき点が**「端のシート」の扱い**です。

  • ブックの**一番左にあるシート(先頭のシート)**に対して.Previousを使おうとすると、「前のシート」が存在しないため、エラーが発生してマクロが停止します。
  • 同様に、**一番右にあるシート(末尾のシート)**に対して.Nextを使おうとすると、「後のシート」がないためエラーになります。

このエラーを回避するため、サンプルコードではOn Error Resume Nextを使用しています。これは「もしエラーが起きても、マクロを止めずに次の行へ進んでください」という命令です。

On Error Resume Next
Set prevSheet = currentSheet.Previous ' もしここでエラーが起きても、prevSheetはNothingのまま
On Error GoTo 0 ' エラー処理を通常モードに戻す

If Not prevSheet Is Nothing Then ...

この構造により、もし.Previousで前のシートが取得できなければ(=先頭のシートだった場合)、変数prevSheetは空っぽの状態(Nothing)のままになります。その後のIf文で変数が空でないかを確認することで、エラーを回避し、安全に処理を分岐させています。


まとめ

シートの相対的な位置で隣のシートを取得するには、.Previous.Nextプロパティが非常に便利です。

  • 前のシート(左隣): mySheet.Previous
  • 後のシート(右隣): mySheet.Next

ただし、これらのプロパティは、ブックの先頭または末尾のシートで使うとエラーになるため、必ずエラーハンドリングとセットで使うことを強くお勧めします。この点に注意すれば、シート間の移動や連続処理を、より柔軟に記述できるようになります。

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

この記事を書いた人

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

目次