複数のシートを頻繁に切り替えて操作しているような方から、
「直前に操作していたシートに戻るショートカットキーってないんでしょうか?」
といったご質問をいただくことがあります。
シートの切り替えは、シート見出しをクリックして行いますが、シート見出しをクリックする操作を何度も面倒です。そのためこのようなご質問をいただくことになります。
そのような機能は標準では用意されていませんが、VBA(Visual Basic for Applications)を利用してマクロを作成してやれば、もちろん実現可能です。
グローバル変数に直前に操作していたシート名を保持するようにしておいて、そのシートに戻るマクロをショートカットキーで呼べるようにすればOKです。
Public gstrLastSheet As String
Sub GotoLastSheet()
If gstrLastSheet <> "" Then Sheets(gstrLastSheet).Activate
End Sub直前に操作していたシート名をどのタイミングで保持させるかがポイントで、シート名を保持するタイミングなどから、シート名保持用の変数「gstrLastSheet」をPublic宣言をして「Public gstrLastSheet As String」グローバル変数にしています。
実際に直前のシートに戻る処理をする「GotoLastSheet」マクロ自体は簡単です。
グローバル変数gstrLastSheetが空でなかったら、「If gstrLastSheet <> "" Then」そのグローバル変数に保持されている直前に操作していたシートをアクティブに「Sheets(gstrLastSheet).Activate」しているだけです。
ポイントのグローバル変数gstrLastSheetに、いつどうやってシート名を保持させるかですが、わかってしまえば決して難しくありません。
シートがアクティブでなくなるときには、SheetDeactivateイベントが発生します。
ですから、Workbook_SheetDeactivateイベントプロシージャでgstrLastSheetにシート名を保持させてやればOKなのです。
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
gstrLastSheet = Sh.Name
End Sub以上で実際に動作する部分は完成です。
GotoLastSheetマクロを実行すれば、直前に操作していたシートがアクティブになります。
ただせっかく作ったGotoLastSheetマクロを実行するのが面倒だと意味がありません。
そこで、ショートカットキーでGotoLastSheetを呼べるようにします。
定番技のWorkbook_Openイベントプロシージャで、先GotoLastSheetマクロにショートカットキーを割り当てます。
Private Sub Workbook_Open()
Application.OnKey "+^{BACKSPACE}", "GotoLastSheet"
End SubExcelには、アクティブセルを表示する[Ctrl]+[BackSpace]というショートカットキーがあります。これに近いイメージでここでは[Ctrl]+[Shift]+[BackSpace]キーに割り当ててました。
他にわかりやすいと感じられるショートカットキーがあれば、そちらに割り当てていたたいて勿論OKです。
▼サンプルファイル(003515.xls 54KByte)ダウンロード
サンプルファイルでは上記の一連のプロシージャが作成してあります。マクロを有効にしてご確認ください。
- Newer:ジャンプリストの表示方法
- Older:拡大鏡の起動と終了&拡大と縮小
Home » エクセルマクロ・Excel VBAの使い方 » イベントプロシージャ » 直前に操作していたシートに戻るショートカットキーは?