Wordで長文を編集していると、「さっきの位置に戻りたい!」と思うことがあります。
今回は、カーソル位置を記録し、前回位置に戻るマクロをWord VBAで簡単に実現する方法を紹介します。
内容:
確認のWordは「Microsoft® Word for Microsoft 365 MSO」 (バージョン 2510)です。
動作イメージ
- 位置を記録する:現在のカーソル位置を記録(最大2つ)する。
- 記録した位置へ戻る:最新位置に移動。既に同じ場所なら一つ前の保存位置に移動する。
- 画面をスクロール:ActiveWindow.ScrollIntoViewで必ず見える位置にする。
VBAサンプル
Option Explicit
'最新位置と前位置を Range 型で保持'
Dim 最新位置 As Range
Dim 前位置 As Range
'現在のカーソル位置を記録(最大2つ)'
Sub 位置を記録する()
'直近の位置を前位置に移す'
If Not 最新位置 Is Nothing Then
Set 前位置 = 最新位置.Duplicate
End If
'新しい位置を最新位置に記録'
Set 最新位置 = Selection.Range.Duplicate
End Sub
'記録したカーソル位置へ戻る(同じ場所なら前位置へ)'
Sub 記録したカーソル位置へ戻る()
'最新位置が未記録なら終了'
If 最新位置 Is Nothing Then Exit Sub
'もし現在カーソルが最新位置と同じなら前位置へ移動'
If Selection.Start = 最新位置.Start And Selection.End = 最新位置.End Then
If Not 前位置 Is Nothing Then
前位置.Select
End If
Else
最新位置.Select
End If
'念のため、画面スクロール(失敗時は無視)'
On Error Resume Next
ActiveWindow.ScrollIntoView Selection.Range, True
On Error GoTo 0
End Sub
VBAのポイント解説
- モジュールレベル変数
Dim 最新位置 As Range と Dim 前位置 As Range をモジュール先頭に宣言することで、前回のマクロ実行時の情報を活用して次のマクロを実行できます。 - Duplicateで独立コピー
Range.Duplicate は、元のRangeを複製して保持します。 - ScrollIntoViewで画面遷移
「Select」でカーソル位置に画面遷移をしている予定ですが、念のため以下を実行し、選択範囲をウィンドウに表示します。
ActiveWindow.ScrollIntoView Selection.Range, True
利用方法
- 上記コードを標準モジュールに貼り付けます。
すべてのWord文書に共通して利用したい場合は、Wordの標準テンプレートファイル(Normal.dotm)に保存します。
参考: - 「位置を記録する」「記録したカーソル位置へ戻る」をショートカットキーに割り当てます。
ショートカットキー登録の手順について、以下の記事で紹介しています。
【Word】値の貼り付け(書式なし)Ctrl+Shift+Vのショートカットキー登録 - shikumika’s diary
注意点と補足説明
前回位置の保存期間について
VBAリセットやWord終了で履歴は消えます。
モジュールレベル変数の有効期間による仕様で、詳細は以下の記事で紹介しています。
【Excel VBA】モジュールレベル変数の有効期間と使い方|カウンター機能で動作確認 - shikumika’s diary
マクロを利用せずに、直前に編集した箇所にカーソルを戻す方法
Wordには、標準機能で直前に編集した場所へカーソルを戻すショートカットキーがあります。
「さっき修正した場所に戻りたい」という場合、マクロを使わなくても以下の方法で対応できます。
Shift+F5で直前の編集位置にジャンプ:
- 操作方法:Shift + F5 を押すと、直前に編集した箇所へカーソルが移動します。
- 繰り返し押すと、さらに前の編集位置へ順に戻れます。
- 注意点:Wordを閉じると履歴は消えます。
詳しくは以下の記事で動作確認しています:
【Word】直前に編集した箇所にカーソルを戻す方法|Shift+F5の動作確認 - shikumika’s diary
以上、Word VBAでカーソル位置を記録して前回位置に戻るマクロの事例でした。