即効テクニック |
たとえばアクティブブックに[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 SubPreviousプロパティと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 Sub2つのシートを比較するときも便利です。 次のコードは、アクティブシートと右隣のシートで、それぞれ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