【Excel VBA】全シートのスクロール位置、シート選択位置、セル選択位置を揃える

VBA

仕事でExcelファイルを開いたとき、スクロールされた状態だったりシートの選択が左端になっていなかったりすることがあります。人に見てもらう資料ではこのような状態は見づらく不親切な資料と思います。私は神経質な方なので、こういった部分は綺麗に揃えないと落ち着きません。

ということで今回は以下を設定するサンプルコードを紹介します。

  • 全シートのスクロール位置を一番上(左上)に設定する
  • 全シートのセル選択位置をA1に設定する
  • シート選択位置を左端のシートに設定する

スクロールを一番上!シート選択は一番目!セルはA1!

Option Explicit

' ::::::::::::::::::::::::::::::::::::::::::::::::::
' 全シートのスクロール位置を先頭にする
' ::::::::::::::::::::::::::::::::::::::::::::::::::
Public Sub ScrollTop()
    Dim sht As Worksheet
    Dim bVisible As Boolean
    
    ' 画面更新 無効
    Application.ScreenUpdating = False

    ' 全てのシートを処理する
    For Each sht In ActiveWorkbook.Worksheets
        ' シート表示状態を保管する
         bVisible = sht.Visible
        
        ' シートを表示する
        sht.Visible = xlSheetVisible
        
        ' シート選択
        sht.Select
        
        ' A1セル選択
        sht.Cells(1, 1).Select
        
        ' スクロール列の設定
        ActiveWindow.ScrollColumn = 1
        
        ' スクロール行の設定
        ActiveWindow.ScrollRow = 1
    
        ' シート表示状態を戻す
        sht.Visible = bVisible
    
    Next

    ' 一番左のシートを選択する
    Call SelectFirstSheet

    ' 画面更新 有効
    Application.ScreenUpdating = True

End Sub

' ::::::::::::::::::::::::::::::::::::::::::::::::::
' 一番左のシートを選択する
' ::::::::::::::::::::::::::::::::::::::::::::::::::
Private Sub SelectFirstSheet()
    Dim sht As Worksheet
    
   ' 全てのシートを処理する
    For Each sht In ActiveWorkbook.Worksheets
        ' シートが表示されているか判定する
        If sht.Visible = xlSheetVisible Then
            ' シートを選択しループを中断する
            sht.Select
            Exit Sub
        End If
    Next

End Sub

アドイン化も視野に入れたコードです。リボン等に設定して呼び出すと便利です。全シートを処理するとき非表示のシートを選択するとエラーになるので、その点については一旦表示状態にした上で処理するように対応しています。
よかったら使ってください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です