shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Word VBA】カーソル位置を記録して前回位置に戻るマクロの事例

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

利用方法

  1. 上記コードを標準モジュールに貼り付けます。
    すべてのWord文書に共通して利用したい場合は、Wordの標準テンプレートファイル(Normal.dotm)に保存します。
    参考:

    【Word VBA】マクロはどこに保存する(初心者向け解説) - shikumika’s diary

  2. 「位置を記録する」「記録したカーソル位置へ戻る」をショートカットキーに割り当てます。
    ショートカットキー登録の手順について、以下の記事で紹介しています。

    【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でカーソル位置を記録して前回位置に戻るマクロの事例でした。