LoginSignup
5
4

More than 5 years have passed since last update.

全シートのカーソルをA1に移動するマクロ

Last updated at Posted at 2019-05-30

はじめに

毎回、新しい現場に行くたびにこのマクロ検索してカスタマイズして作ってるなぁと思い、
もう二度と書くのやめようとここに残すことにした。

参考サイト

全シートの選択セルをA1に設定する
VBA応用(シートの表示位置を左上に戻す。)

ソース

Sub 全ページをA1にEx()
    Dim sht                     As Worksheet            '// 処理中のワークシート
    Dim shtVisible                                      '// 表示可能なワークシート
    Dim iRow, iCol                                      '// 縦、横座標
    Dim sHiddenSheet                                    '// 非表示シート名
    Dim oFilterStatus           As AutoFilter           '// オートフィルタ状態
    Dim oRangeFilter            As Range                '// オートフィルタ設定

    For Each sht In Worksheets
        If (IsEmpty(shtVisible) = True) And (sht.Visible = xlSheetVisible) Then
            Set shtVisible = sht
        End If

        '// シートが表示されている場合
        If sht.Visible = xlSheetVisible Then
            Call A1(sht)
        '// シートが非表示の場合
        Else
            sHiddenSheet = sHiddenSheet & "、" & sht.Name
            sht.Visible = xlSheetVisible
            Call A1(sht)
            sht.Visible = xlSheetHidden
        End If
    Next

    shtVisible.Select

    If (sHiddenSheet <> "") Then
        MsgBox sHiddenSheet, vbOKOnly, "非表示シートあり"
    End If
End Sub

Sub A1(ByVal sht As Worksheet)
        sht.Select

        '// ウインドウ枠の固定がされている場合
        If ActiveWindow.FreezePanes = True Then
            iRow = ActiveWindow.SplitRow + 1
            iCol = ActiveWindow.SplitColumn + 1
            Cells(iRow + 1, iCol + 1).Activate
        End If

        Set oFilterStatus = sht.AutoFilter
        '// オートフィルタが設定されている場合
        If Not oFilterStatus Is Nothing Then
            '// フィルタが掛かっている場合
            If oFilterStatus.FilterMode = True Then
                '// フィルタが掛かっている行の先頭を選択
                Set oRangeFilter = Range("A1").CurrentRegion
                Set oRangeFilter = Application.Intersect(oRangeFilter, oRangeFilter.Offset(1, 0))
                Set oRangeFilter = oRangeFilter.SpecialCells(xlCellTypeVisible)
                Range("A" & CStr(oRangeFilter.Row)).Select
            End If
        End If

        sht.Range("A1").Select
        ActiveWindow.Zoom = 100

        ActiveCell.Activate         ' Excel97対策
        ' スクロール列の設定
        ActiveWindow.ScrollColumn = 1
        ' スクロール行の設定
        ActiveWindow.ScrollRow = 1

End Sub

おわりに

非表示のシートもA1に動かしたかったとか、
拡大率100%にしたかったとかそんなところ。
スクロールバーの位置も初期化したかったとか。

これから指定したフォルダの全ブックにこれを適用するマクロでも作る。
こんなことを人海戦術でやってる現場がまだまだあるんだぜ。

謝辞

@nukie_53 さん
ご指摘ありがとうございました。

5
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4