Excelで直前に参照していたシートに戻る(シートの参照履歴を保持する)
Excelで直前に参照していたシートに戻る方法について書きます。
Excelの標準機能では、以下のショートカットでシートを移動できます。
(1) Ctrl+PageUP…左のシートへ移動
(2) Ctrl+PageDown…右のシートへ移動
しかし、たくさんのシートがあるブックで作業したり、複数のブックを開いているときなどは、
となりのシートではなく、直前に参照していたシートに戻りたいという時がよくあります。
イメージとしては、Ctrl+Tabで、以下の様な移動ができるショートカットが欲しい。といった感じです。
Excelの標準機能には、残念ながらこういった機能はありません。
「Alt+Tabなどでファイルを選択→シートを選択する」ということをいちいちやるしかありません。
しかしそれは面倒なので、VBAでなんとかしてみました。
VBAで直前に参照していたブック.シートに戻る(参照履歴を保持する)
以下のサンプルを組み込むことで、上記で説明したCtrl+Tabショートカットを実現できます。※ブック・シートの参照履歴を保持し、直前に参照していたシートに戻ります。(アクティブにします)
参考:
VBA Help: How to run macro in active workbook (via SheetActivate) with code only in personal.xls
GPソフト Wiki - Excelのあれこれ 〜 マクロの自動ロード
エクセルExcel大事典 VBAマクロ イベントプロシージャ Open Target Cancel EnableEvents Volatile
Excel VBA 入門講座 ワークブックのイベントプロシージャ
WithEventsでイベントを拾う - EXCEL-LENCE web EnableEvents Volatile
[コードの記述箇所]
(1) PERSONAL.XLSB>Microsoft Excel Objects>ThisWorkBook
(2) PERSONAL.XLSB>標準モジュール>任意のモジュール(ただし他のモジュールとは独立したモジュール。以下例では「goBackSheet」モジュールとして追加しています。)
以下、ソースです。
[サンプルソース(1)]※ThisWorkBookに記述
'PERSONAL.XLSB ThisWorkBook 'WithEventsにてApplicationオブジェクト(Excel全体を示すオブジェクト)に発生するイベントを拾える様にする |
任意のブックではなく、Excel全般に適用したいため、PERSONAL.XLSBに記述します。
ThisWorkBookにはファイルオープン時やウインドウがアクティブになった時に自動実行させる、イベントプロシージャを利用したコードを記述しています。
その他の説明については、ソース内のコメントを参照してください。
[サンプルソース(2)]※標準モジュールに記述
'PERSONAL.XLSB 標準モジュール goBackSheet '前に参照していたファイル.シートへ戻る(アクティブにする) 'マクロの実行メニューにPublicプロシージャが表示されないようにする。 Option Private Module '参照履歴 Public oldBook As String '前に参照していたブック Public oldSheet As String '前に参照していたブック Public nowBook As String '現在参照しているブック Public nowSheet As String '現在参照しているブック '前に参照していたシートに戻る(Activeにする)マクロ Public Sub oldsheet_act() 'エラー発生した場合は無視する On Error Resume Next Workbooks(oldBook).Worksheets(oldSheet).Activate End Sub 'Excel起動時に自動呼出しされるモジュール 'ファイル読込みに時間がかかるとエラーになるためスキップする
|
こちらは実際にシートを移動するためのコードを記述しています。
「oldsheet_act()」をショートカットキー(サンプルでは、Ctrl+Tab)で呼び出すことで、直前に参照していたファイルのシートへ移動できます。
ショートカットは、「appFirst()」をExcel起動時に呼出し、登録しています。
なお、既に他のマクロをCtrl+Tabで登録している場合は、上記ソースの「"^{TAB}"」を変更してください。
他のマクロも「appFirst()」へ記述すれば、ショートカットを登録できます。
その他の説明はソース内のコメントをご参照ください。
以上です。
2014.6.30 訂正
「appFirst()」に以下の処理を追加しました。
'ファイル読込みに時間がかかるとエラーになるためスキップする On Error GoTo nextProc 'ブック名・シート名を取得 nowBook = ActiveWorkbook.Name nowSheet = ActiveSheet.Name nextProc: |
初回に開くファイルのサイズが大きい場合エラーになるため、対応しました。