Excelで「自動的にホームに戻りたい」といっても、Excelには複数の意味で「ホーム」と呼べる場所があります。例えば、シートの左上であるA1セルへ戻る、ブック内に作ったメニュー用の「ホーム」シートへ戻る、一定の操作後に指定セルへ戻る、といったケースです。
そのため、まずどこを「ホーム」と呼んでいるのかを整理すると、必要な操作やVBAが分かりやすくなります。
ここでは、Excelでよく使われる「ホームへ戻る」方法を、VBAを使わない方法から自動実行するマクロまで具体的に解説します。
シートの左上に戻るだけならCtrl+Homeが簡単
Excelで大きな表を右や下までスクロールしたあと、シートの先頭付近へ戻りたい場合は、Windows版では基本的にCtrl+Homeを使用します。これによりワークシートの先頭側へ素早く移動できます。
例えば数千行ある表の2000行目付近を編集していて、A1付近へ戻りたい場合、スクロールバーを何度も動かす必要はありません。キーボード操作で一気に移動できます。
なお、これは「自動的に戻る」のではなくショートカットによる移動です。何らかの処理が終わったら毎回自動で戻したい場合は、後述するVBAが適しています。
VBAでA1セルへ自動的に戻す方法
マクロによる処理が終わったあとに必ずA1セルへ戻したいなら、VBAの最後にA1を選択する処理を追加できます。
最も単純な例はRange("A1").Selectです。例えば既存のマクロでデータを加工したあと、最後にA1へカーソルを戻す場合は次のような考え方になります。
Sub Sample()
'ここに通常の処理を書く
Range("A1").Select
End Sub
ただし、Rangeだけでは「現在アクティブになっているシート」のA1が対象になります。特定のシートへ確実に戻したい場合は、シートも指定したほうが安全です。
「ホーム」という名前のシートへ戻す方法
業務用Excelでは、最初のシートをメニュー画面にして「ホーム」「メニュー」「TOP」などの名前を付けることがあります。このシートへ自動的に戻すなら、VBAで対象シートを指定します。
例えば「ホーム」という名前のワークシートへ戻してA1を選択する場合は、次のように記述できます。
Sub Homeに戻る()
Worksheets("ホーム").Activate
Range("A1").Select
End Sub
これをボタンに登録すれば、利用者がどのシートにいても「ホームへ戻る」ボタンを押すだけでホームシートへ移動できます。シート数が多いブックでは特に便利です。
ブックを開いたとき自動的にホームへ戻す
Excelファイルを開くたびに前回作業していたシートが表示されるのではなく、必ず「ホーム」シートから開始したい場合は、ブックを開いたときに実行されるWorkbook_Openイベントを利用できます。
この処理は通常の標準モジュールではなく、VBAエディター内のThisWorkbookに記述します。
Private Sub Workbook_Open()
Worksheets("ホーム").Activate
Range("A1").Select
End Sub
例えば社内で複数人が使用するExcelファイルなら、前回どのシートで保存されたかにかかわらず、起動時に案内用のホームシートを表示させる設計にできます。
なお、VBAを保存する場合は通常の「.xlsx」ではなく、マクロを保持できる.xlsm形式などで保存する必要があります。また、利用環境でマクロが無効化されている場合は自動実行されません。
保存する前にホームへ戻したい場合
ファイルを保存するときにホームシートへ戻す方法もあります。例えば共有するExcelで「保存したときには必ずメニュー画面に戻しておきたい」という運用が考えられます。
その場合はWorkbook_BeforeSaveなどのブックイベントを利用できます。ただし、保存するたびに作業中のシートから突然ホームへ移動すると、利用者にとって使いにくい場合があります。
「保存時」「終了時」「起動時」のどのタイミングで戻すべきかを考えると、一般的なメニューブックでは起動時だけホームへ戻すほうが自然なケースもあります。
ボタンを押したときだけホームへ戻す方法も便利
完全自動ではなく、必要なときだけホームへ戻りたい場合は、ワークシートにボタンや図形を配置して「Homeに戻る」マクロを割り当てる方法が分かりやすいです。
例えば各シートの右上に「ホームへ戻る」という図形を置き、その図形へ同じマクロを登録しておけば、利用者はシートタブを探さずにメニュー画面へ戻れます。
Sub GoHome()
Worksheets("ホーム").Activate
Worksheets("ホーム").Range("A1").Select
End Sub
シート名を変更するとコード内の「ホーム」と一致しなくなる点には注意が必要です。長期間使用するブックでは、シート名を不用意に変更しない運用にするとトラブルを減らせます。
スクロール位置まで左上へ戻したい場合
A1を選択しても、目的によっては表示位置をより明確に制御したいことがあります。その場合はActiveWindowのScrollRowとScrollColumnを使用できます。
Sub GoHome()
Worksheets("ホーム").Activate
Worksheets("ホーム").Range("A1").Select
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
End Sub
ScrollRowは画面上端側に表示する行、ScrollColumnは画面左端側に表示する列を制御するために利用できます。大きな表を扱うマクロでスクロール位置を変更している場合には便利です。
ただし、ウィンドウ枠の固定などを設定しているブックでは見え方が異なることがあります。「A1を選択したい」のか「画面表示を左上へ戻したい」のかを分けて考えるのがポイントです。
「ホーム」がExcelのホームタブを意味する場合は別の話
Excelにはリボン上にホームタブがあります。そのため「ホームに戻る」が、A1セルやホームシートではなく、リボンのホームタブを表示したいという意味の場合もあります。
ホームタブにはコピー・貼り付け、フォント、配置、数値の表示形式、セルのスタイルなどの機能があります。これはワークシート内の位置とは別のものです。
つまり、「A1へ戻りたい」「ホームというシートへ戻りたい」「Excelを開いたらホームシートを表示したい」「リボンのホームタブへ戻したい」では、それぞれ解決方法が異なります。
まとめ:Excelで自動的にホームへ戻すなら目的に合わせて設定する
Excelで「ホームへ戻る」方法は、戻りたい場所によって異なります。シート左上へ移動するだけならCtrl+Homeが手軽です。
マクロ処理後にA1へ自動移動したい場合はRange("A1").Select、特定のホームシートへ戻したい場合はWorksheets("ホーム").Activateを利用できます。さらに、Excelファイルを開くたび自動的にホーム画面を表示したい場合はWorkbook_Openイベントが適しています。
「自動的に戻る」という目的なら、いつ戻したいのかも重要です。マクロ終了時、ファイル起動時、保存時など、タイミングによって使用するVBAが変わります。
まず「どのホームへ」「いつ戻りたいのか」を決め、その目的に合わせてショートカット、ボタン、通常のマクロ、Workbook_Openなどを使い分けると、シンプルで使いやすいExcelファイルを作れます。


コメント