#はじめに
毎回、新しい現場に行くたびにこのマクロ検索してカスタマイズして作ってるなぁと思い、
もう二度と書くのやめようとここに残すことにした。
#参考サイト
全シートの選択セルを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 さん
ご指摘ありがとうございました。