Excelのシートを移動するマクロ
経緯
- エクセルのシード移動が面倒くさい
- マウス移動 → 手を放したくないとき、画面が大きいとき面倒
- Ctrl + Page Up/Down → キーボードによってボタンの場所が違うので不便
⇒ [結論] マクロを組んで好きなキーに割り当てる
コード
'================================================================================
'シート移動(左)
'================================================================================
'アクティブシートの左隣のシートに移動する
'左隣のシートが非表示の場合は飛ばしてさらに1つ左のシートに移動する
'------------
'■ 移動呼び出し
'------------
'ChangeSheetLeftExceptHideSheetを呼び出す
'このマクロを再帰で実行しようかと思ったが引数ありマクロだと直接実行できなかった
Sub ChageSheetLeft()
'シート移動処理
Call ChangeSheetLeftExceptHideSheet(ActiveSheet)
End Sub
'------------
'■ 移動実行
'------------
'ChangeSheetLeftからアクティブシートを受け取り
'非表示シートを除いた左隣のシートに移動する
Sub ChangeSheetLeftExceptHideSheet(ByVal ArgSheet As Worksheet)
'移動先シートを設定
Dim Sheet_Moveto As Worksheet
If ArgSheet.Previous Is Nothing Then
'左隣のシートがない場合、インデックスが最大のシートを設定
Set Sheet_Moveto = Worksheets(ActiveWorkbook.Worksheets.Count)
Else
'左隣のシートが存在する場合、左隣のシートを設定
Set Sheet_Moveto = ArgSheet.Previous
End If
'シート移動
If Sheet_Moveto.Visible = False Then
'移動先シートが非表示の場合、移動先シートを起点に再度シート移動処理を行う
Call ChangeSheetLeftExceptHideSheet(Worksheets(Sheet_Moveto.Index))
Else
'移動先シートが存在し非表示でない場合、移動先シートに移動する
Sheet_Moveto.Activate
End If
End Sub
'================================================================================
'シート移動(右)
'================================================================================
'アクティブシートの右隣のシートに移動する
'右隣のシートが非表示の場合は飛ばしてさらに1つ右のシートに移動する
'------------
'■ 移動呼び出し
'------------
'ChangeSheetRightExceptHideSheetを呼び出す
Sub ChageSheetRight()
'シート移動処理
Call ChangeSheetRightExceptHideSheet(ActiveSheet)
End Sub
'------------
'■ 移動実行
'------------
'ChangeSheetRightからアクティブシートを受け取り
'非表示シートを除いた右隣のシートに移動する
Sub ChangeSheetRightExceptHideSheet(ByVal ArgSheet As Worksheet)
'移動先シートを設定
Dim Sheet_Moveto As Worksheet
If ArgSheet.Next Is Nothing Then
'右隣のシートがない場合、インデックス1のシートを設定
Set Sheet_Moveto = ActiveWorkbook.Worksheets(1)
Else
'右隣のシートが存在する場合、右隣のシートを設定
Set Sheet_Moveto = ArgSheet.Next
End If
'シート移動
If Sheet_Moveto.Visible = False Then
'移動先シートが非表示の場合、移動先シートを起点に再度シート移動処理を行う
Call ChangeSheetRightExceptHideSheet(Worksheets(Sheet_Moveto.Index))
Else
'移動先シートが存在し非表示でない場合、移動先シートに移動する
Sheet_Moveto.Activate
End If
End Sub