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