ブックを開いたときに選択セルがシートのあちこちにあるのが嫌
資料を作る際に複数のシートを作成することがあります。
その場合、保存した時に選択していたセルが、開いた時も選択された状態で表示されます。
資料を開いた時に選択セルがスクロールの下の方にあると、先頭までスクロールし直さなければならなくなりとても不便です。
そこで、VBAで全シートのA1セルを選択した状態にする方法を以下に紹介します。
単純なコード
以下のマクロは全シートをA1セルで選択します。
1 2 3 4 5 6 7 8 |
Sub 全ページをA1に() Dim sht As Worksheet For Each sht In Sheets sht.Select sht.Range("A1").Select Next End Sub |
ほとんどの場合は上のマクロで問題ないと思いますが、単純なマクロのため以下のような場合はエラーや思った通りの表示にならなくなります。
・シートが非表示になっている。(Selectメソッドでエラー)
・ウインドウ枠が固定されている。(スクロール可能な部分がスクロールされたままになる)
・フィルターが設定されている。(フィルターの先頭が選択されない)
など。
これらの問題を解消するには個別に対応が必要になります。
改良版コード
コード量が多くなりますが、以下が解消版です。
非表示シートがある場合は最後にメッセージボックスで非表示シートの名前を表示します。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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 Sheets If (IsEmpty(shtVisible) = True) And (sht.Visible <> xlSheetHidden) And (sht.Visible <> xlSheetVeryHidden) Then Set shtVisible = sht End If '// シートが表示されている場合 If (sht.Visible <> xlSheetHidden) And (sht.Visible <> xlSheetVeryHidden) Then 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 '// シートが非表示の場合 Else sHiddenSheet = sHiddenSheet & "、" & sht.Name End If Next shtVisible.Select If (sHiddenSheet <> "") Then MsgBox sHiddenSheet, vbOKOnly, "非表示シートあり" End If End Sub |
利用方法
利用方法は上の関数を実行するだけです。
実行すると、ブックの全シートのA1セルを選択します。