指定シートの前後(左右)のシートを参照するには
指定したシートの前(左)や後(右)のシートを参照する場合には、PreviousプロパティとNextプロパティを利用します。
Previousプロパティが左のシート、Nextプロパティが右のシートを指します。左右にシートがない場合はNothingを返します。
Nothingのシートを選択しようとするとエラーになるため、左右のシートを選択する際にはNothingかどうかの判定は必須になります。
いずれのプロパティもシートの種類に応じたオブジェクトを返します。
構文
Property シートオブジェクト.Previous As Object
Property シートオブジェクト.Next As Object
Worksheet | Previous、Nextともに親オブジェクトにシートを指定します。定義上はWorksheetとなっていますがワークシートだけでなくグラフシート、マクロシート、ダイアログシートを指定することも可能です。 |
戻り値 | 戻り値は指定したシートの左右のシートのオブジェクトが返却されます。
ワークシートかマクロシートの場合はWorksheetオブジェクト、グラフシートの場合はGraphオブジェクト、ダイアログシートの場合はDialogSheetオブジェクト、と参照したシートによって異なります。 指定したシートが一番左の場合のPreviousプロパティや一番右のシートのNextプロパティの場合はNothingが返却されます。 |
サンプルコード
左のシートを選択するサンプルコードです。左にシートがある場合のみ選択します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub PreviousTest() Dim sht '// 左のシートのオブジェクトを取得 Set sht = ActiveSheet.Previous CONTINUE: '// 左のシートが存在しない場合 If (sht Is Nothing) Then '// シート移動を行わず終了する Exit Sub End If '// 左のシートが非表示の場合 If (sht.Visible = xlSheetHidden) Or (sht.Visible = xlSheetVeryHidden) Then '// さらに左のシートのオブジェクトを取得 Set sht = sht.Previous '// もう一度上に戻る GoTo CONTINUE End If '// 左のシートが存在する場合 If (Not sht Is Nothing) Then '// 左のシートを選択する sht.Select End If End Sub |
上のコードをPreviousをNextにしただけです。右のシートを選択するサンプルコードです。右にシートがある場合のみ選択します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub NextTest() Dim sht '// 右のシートのオブジェクトを取得 Set sht = ActiveSheet.Next CONTINUE: '// 右のシートが存在しない場合 If (sht Is Nothing) Then '// シート移動を行わず終了する Exit Sub End If '// 右のシートが非表示の場合 If (sht.Visible = xlSheetHidden) Or (sht.Visible = xlSheetVeryHidden) Then '// さらに右のシートのオブジェクトを取得 Set sht = sht.Next '// もう一度上に戻る GoTo CONTINUE End If '// 右のシートが存在する場合 If (Not sht Is Nothing) Then '// 右のシートを選択する sht.Select End If End Sub |
上記の2つのサンプルとも、左右の参照先のシートが非表示になっている場合は選択しないようにしています。
上のコードでは非表示のシートは選択しないようにしていますが、そのような回避措置を行わず非表示のシートを表示しようとすると実行時エラーになります。
非表示のシートを選択したい場合は、事前にVisibleプロパティをxlSheetVisible(表示する)に変更しておく必要があります。
さらに応用すると・・
NextプロパティとPreviousプロパティは一方方向に対して参照しますが、一番右や一番左のシートに到達した場合はそこで止まってしまいます。
しかし、実際にExcelを使う場合で、特にシート数が多いブックの場合はシートの選択が結構面倒になります。
そこで、一番左に到達した場合でさらに左に移動した場合は一番右へ、逆に一番右から一番左へと、シートをくるくる回るようにした方が使い勝手が上がります。
以下のページにその方法を書いていますのでご参照ください。