配布先で Excel ファイルを開いた瞬間、全シートが A1 セル選択・倍率 100% で揃っていると、受け取った相手の印象は大きく変わります。手作業で各シートをクリックして A1 に戻す作業は地味に時間を取られますが、VBA マクロなら保存前に 1 ステップで完了します。
この記事では、ブック内の全シートを A1 セル選択・表示倍率 100%・スクロール位置 1 行 1 列目 に一括リセットする VBA マクロと、個人用マクロブック(PERSONAL.XLSB)に登録してどの Excel ファイルでも使えるようにする手順をまとめます。対象は Microsoft Excel 2024 / Microsoft 365 デスクトップ版(Windows・日本語 UI)です。
4 枚の日本語シート(売上データ・顧客一覧・商品カタログ・在庫管理)が、それぞれ違う倍率・違うスクロール位置で保存されています。記事のマクロも埋め込み済みなので、開いたら Alt+F8 で ResetAllSheetsToA1 を実行してみてください。
初回の開きかた: ダウンロードしたファイルをダブルクリックすると、上部に「保護されたビュー」や「セキュリティの警告 マクロが無効にされました」の黄色いバーが出ます。信頼できる場合のみ、バー右の 編集を有効にする → 続いて コンテンツの有効化(またはマクロを有効にする)をクリックしてください。これで Alt+F8 からマクロを実行できるようになります。社内配布する場合は、コードを自分で確認したうえで信頼する運用が基本です。
有効化した状態でファイルを開くと、例えば売上データのシートはこんな風に「どこに行ったのか分からない位置」から始まります。

本文だけでも動くように、先に完成したマクロを載せておきます。VBE にそのまま貼り付けてください。
全シートをA1・標準倍率に戻すVBAマクロ(完成コード)
以下のコードをそのまま標準モジュールに貼り付ければ動きます。Worksheets のみをループするのでグラフシートを自動で除外し、非表示シートの表示状態や元のアクティブシートも保持して復元します。
Sub ResetAllSheetsToA1()
Dim ws As Worksheet
Dim origVisible As Variant
Dim origActiveName As String
Dim i As Long
Dim prevSU As Boolean, prevEv As Boolean
prevSU = Application.ScreenUpdating
prevEv = Application.EnableEvents
On Error GoTo Finally_
Application.ScreenUpdating = False
Application.EnableEvents = False
With ActiveWorkbook
origActiveName = .ActiveSheet.Name
ReDim origVisible(1 To .Worksheets.Count)
i = 0
For Each ws In .Worksheets
i = i + 1
origVisible(i) = ws.Visible
ws.Visible = xlSheetVisible
ws.Activate
ws.Range("A1").Select
ActiveWindow.Zoom = 100
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Next ws
i = 0
For Each ws In .Worksheets
i = i + 1
ws.Visible = origVisible(i)
Next ws
On Error Resume Next
.Sheets(origActiveName).Activate
On Error GoTo Finally_
End With
Finally_:
Application.ScreenUpdating = prevSU
Application.EnableEvents = prevEv
End Sub実行すると、先ほどの「どこに行ったか分からない」状態が、開いた瞬間に読めるレイアウトへ変わります。

マクロをVBEに貼り付けて実行する手順
対象の Excel ファイルを開いた状態で、次の手順を踏んでください。
- Alt + F11 で VBE(Microsoft Visual Basic for Applications)を起動します。
- 左の「プロジェクト」ツリーで対象ブックを選択し、メニューの 挿入 > 標準モジュール をクリックします。
- 開いたコードウィンドウに、上のコード全文を貼り付けます。
- コードウィンドウ内にカーソルがある状態で F5 キーを押すと、その場で実行できます。

modResetSheets に ResetAllSheetsToA1 が入っている動作を確認するなら、顧客一覧や商品カタログのシートも、実行前後でどう変わるか見比べてみてください。
商品カタログや在庫管理のように「スクロールしたら列のヘッダーが見えなくなる」状態も、同じ処理でまとめて戻せます。
個人用マクロブック(PERSONAL.XLSB)に登録して、どのブックからも使う
このマクロは、配布前のファイルを整える用途で繰り返し使います。対象ファイルの中に毎回コードを貼るのは面倒なので、個人用マクロブック(PERSONAL.XLSB)に登録しておくのが現実的です。一度登録してしまえば、任意の .xlsx / .xlsm を開いた状態で Alt + F8 から呼び出せます。
初回セットアップ
- Excel を起動し、空の新規ブックを開きます。
- リボンの 表示 タブ > マクロ▼ > マクロの記録 をクリックします。
- 表示される「マクロの記録」ダイアログで、マクロの保存先 を 個人用マクロブック に変更し、OK をクリックします。
- すぐに 表示 タブ > マクロ▼ > 記録終了 をクリックします(中身は空で構いません)。これで
PERSONAL.XLSBが%AppData%\Microsoft\Excel\XLSTART\に自動生成されます。 - Alt + F11 で VBE を開き、左のツリーから
VBAProject (PERSONAL.XLSB)>標準モジュール>Module1を開きます。 - 先ほどの完成コードをそのまま貼り付けます。
- Excel を終了するとき 「個人用マクロブックの変更を保存しますか?」と聞かれたら 「保存」 を選びます。
以降の使い方
- 任意の
.xlsx/.xlsmを開いた状態で Alt + F8。 - マクロ一覧に
PERSONAL.XLSB!ResetAllSheetsToA1が出るので、選択して 実行。 - Ctrl + S で保存すれば配布準備完了です。
コードで ActiveWorkbook を使っているのがポイントです。PERSONAL.XLSB から見ると ThisWorkbook は PERSONAL.XLSB 自身を指してしまい、ユーザーが開いているブックに対して何も起きません。ActiveWorkbook に書き換えずに貼り付ければそのまま動きます。
コードの要所と、書き換えるときに踏みやすい落とし穴
見た目より地味に罠があるマクロです。書き換えるときに押さえておきたい挙動を 5 点挙げます。
Worksheetsループにすると、グラフシートを自動で外せる
For Each sh In ActiveWorkbook.Sheets と書くと、ワークシートに加えてグラフシートも回してしまいます。グラフシートに対して ActiveWindow.ScrollRow = 1 を実行すると「Window クラスの ScrollRow プロパティを設定できません」という実行時エラー 1004 が出ます。Worksheets コレクションで回せば、グラフシートは自動的に対象外になるので安全です。
Zoom・Scroll・選択セルはシート単位で保存される
「ウィンドウ」のプロパティに見えて、実際は各シートごとに保存されます。そのため 全シートを一度ずつアクティブにして書き換える 必要があります。1 つのシートで Zoom = 100 にしても、他のシートには反映されません。保存して閉じて開き直しても、シートごとに設定が復元されます。
非表示シートも一時可視化してからリセットする
Excel 2024 の実機検証では、Worksheet.Activate は非表示(xlSheetHidden)や超非表示(xlSheetVeryHidden)のシートに対してもエラーを出さずに成功しました。ただし ActiveWindow.Zoom 等のウィンドウ系プロパティを確実に書き換えるには、一度 xlSheetVisible に戻してから .Activate する のが安全です。処理後は origVisible 配列で元の表示状態へ戻します。
Application.EnableEvents を切る
マクロ内の Range("A1").Select は、対象シートに Worksheet_SelectionChange イベントが仕込んであれば発火します。業務ブックで「セル選択のたびに何か動く」マクロが入っていると、リセット中に何度も余計な処理が走ってしまいます。Application.EnableEvents = False で一時停止して、終了時に元の値へ戻します。
On Error GoTo Finally_ で Excel を操作不能にしない
もし途中でエラーが出ると、Application.ScreenUpdating = False や EnableEvents = False が そのまま残ってしまい、Excel が一見操作不能に見える状態になります。On Error GoTo Finally_ と組み合わせ、prevSU / prevEv に退避していた値を最後に必ず戻す構造にしておくと、事故が起きても画面が復旧します。
カスタマイズ例(倍率変更・特定シート除外・複数ウィンドウ対応)
標準倍率を100%以外に変える
社内標準が 125% の場合、Const で一か所に定数化しておくと書き換えやすくなります。
Const DEFAULT_ZOOM As Long = 125
' ...
ActiveWindow.Zoom = DEFAULT_ZOOM特定シートだけリセット対象から外す
ダッシュボードシートなど、開いたときのスクロール位置や倍率を保っておきたいシートは、名前で除外します。
If ws.Name <> "ダッシュボード" Then
ws.Activate
ws.Range("A1").Select
ActiveWindow.Zoom = 100
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
End Ifws.CodeName で比較する方法も紹介されがちですが、PERSONAL.XLSB から .xlsx ターゲットを触る場合は CodeName が空文字列になります。名前が変わる可能性が低い運用なら、ws.Name での比較で十分実用的です。
「表示 > 新しいウィンドウ」を使っている場合の対応
1 つのブックに対して複数のウィンドウを開いていると、ウィンドウごとに倍率が保存されます。全ウィンドウをリセットしたい場合は、Windows コレクションを外側ループにします。
Dim win As Window
For Each win In ActiveWorkbook.Windows
win.Activate
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
ws.Activate
ws.Range("A1").Select
ActiveWindow.Zoom = 100
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Next ws
Next winうまく動かないときの確認ポイント
| 症状 | 主な原因 | 対処 |
|---|---|---|
| 実行時エラー 1004「Window クラスの ScrollRow プロパティを設定できません」 | For Each sh In Sheets でグラフシートを処理している | For Each ws In Worksheets に変更する |
| 実行後に Excel の画面が更新されない / セル入力に反応しない | マクロが途中で中断し ScreenUpdating = False / EnableEvents = False のまま残った | イミディエイトウィンドウで Application.ScreenUpdating = True と Application.EnableEvents = True を実行。本記事のコードは Finally_ で自動復元する |
| 元々非表示だったシートが可視化されたまま | 復元ループが何らかのエラーで飛ばされた | VBE のイミディエイトウィンドウで Worksheets("シート名").Visible = xlSheetHidden を手動実行 |
| 拡大率 100 が小さく感じる | 社内標準と違う | カスタマイズ例の DEFAULT_ZOOM を変更 |
| 配布相手の PC でまだ画面がズレる | マクロ実行後に保存していない | Ctrl + S で保存する。マクロ末尾に ActiveWorkbook.Save を追加してもよい |
| 複数ウィンドウのブックで一部ウィンドウだけ残る | 基本版は ActiveWindow のみ処理 | カスタマイズ例の「新しいウィンドウ」対応版を使う |
| PERSONAL.XLSB に貼ったのに Alt+F8 のマクロ一覧に出ない | PERSONAL.XLSB が生成されていない | 「マクロの記録」→「個人用マクロブック」→「記録終了」の手順で PERSONAL.XLSB を先に作る |
まとめ
- Excel の 倍率・スクロール位置・選択セルはシート単位で保存されるため、全シートを一度ずつアクティブにしてリセットする必要がある。
Worksheetsコレクションで回すと、グラフシートを自動で除外できる(Sheetsだと ScrollRow 代入でエラーになる)。- 非表示シートは一時可視化してリセットし、元の表示状態に戻す。
- マクロ中は
ScreenUpdatingとEnableEventsをFalseにし、On Error GoTo Finally_で必ず元の値に戻す。 - 配布前処理として使うなら PERSONAL.XLSB に登録し、Alt + F8 から呼ぶ運用が最も実用的。
最後にコピペ用のコードをもう一度置いておきます。PERSONAL.XLSB に貼って保存すれば、翌日から使い始められます。
Sub ResetAllSheetsToA1()
Dim ws As Worksheet
Dim origVisible As Variant
Dim origActiveName As String
Dim i As Long
Dim prevSU As Boolean, prevEv As Boolean
prevSU = Application.ScreenUpdating
prevEv = Application.EnableEvents
On Error GoTo Finally_
Application.ScreenUpdating = False
Application.EnableEvents = False
With ActiveWorkbook
origActiveName = .ActiveSheet.Name
ReDim origVisible(1 To .Worksheets.Count)
i = 0
For Each ws In .Worksheets
i = i + 1
origVisible(i) = ws.Visible
ws.Visible = xlSheetVisible
ws.Activate
ws.Range("A1").Select
ActiveWindow.Zoom = 100
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Next ws
i = 0
For Each ws In .Worksheets
i = i + 1
ws.Visible = origVisible(i)
Next ws
On Error Resume Next
.Sheets(origActiveName).Activate
On Error GoTo Finally_
End With
Finally_:
Application.ScreenUpdating = prevSU
Application.EnableEvents = prevEv
End Sub




コメント