HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > 隣のシートを表すプロパティ(Previous/Nextプロパティ)

即効テクニック

シート操作関連のテクニック

隣のシートを表すプロパティ(Previous/Nextプロパティ)

(Excel 97/2000/2002/2003/2007)
たとえばアクティブブックに[Sheet1][Sheet2][Sheet3]という3つのシートがあったとします。
現在のアクティブシートが真ん中の[Sheet2]だったとき、1つ左や、1つ右のシートを取得するにはどうしたらいいでしょう。

一般的には、次のようにアクティブシートのインデックス値を調べて、それを増減します。

Sub Sample1()
    Dim n As Long
    n = ActiveSheet.Index
    MsgBox "1つ左は" & Sheets(n - 1).Name
    MsgBox "1つ右は" & Sheets(n + 1).Name
End Sub
もちろんこれでも問題はありません。 しかし、Worksheetオブジェクトには前のシートを返すPreviousプロパティと、次のシートを返すNextプロパティもあります。これらのプロパティを使うと、次のように書けます。
Sub Sample2()
    MsgBox "1つ左は" & ActiveSheet.Previous.Name
    MsgBox "1つ右は" & ActiveSheet.Next.Name
End Sub
PreviousプロパティとNextプロパティは、存在しないシートを取得しようとするとNothingを返します。
Sub Sample3()
    If ActiveSheet.Previous Is Nothing Then
        MsgBox ActiveSheet.Name & "は左端です"
    Else
        MsgBox "1つ左は" & ActiveSheet.Previous.Name
    End If
    If ActiveSheet.Next Is Nothing Then
        MsgBox ActiveSheet.Name & "は右端です"
    Else
        MsgBox "1つ右は" & ActiveSheet.Next.Name
    End If
End Sub
このように、PreviousプロパティやNextプロパティを使うと、アクティブシートを基準に1つ左や、1つ右のシートを取得することができます。 いくつか応用例をお見せしましょう。 ワークシートを挿入すると、新しいワークシートはアクティブシートの左に配置されます。 したがって、アクティブシートの全セルをそっくり新しいワークシートにコピーするには次のようなコードで実現できます。
Sub Sample4()
    With Worksheets.Add
        .Next.Cells.Copy .Cells
    End With
End Sub
2つのシートを比較するときも便利です。 次のコードは、アクティブシートと右隣のシートで、それぞれA1:A8のセルを比較して、もし違いがあれば表示します。
Sub Sample5()
    Dim I As Long
    With ActiveSheet
        For I = 1 To 8
            If .Cells(I, 1) <> .Next.Cells(I, 1) Then
                MsgBox I & "行目:" & .Cells(I, 1) & "<>" & .Next.Cells(I, 1)
            End If
        Next I
    End With
End Sub