Word VBAで見出し単位のカーソル移動をショートカットキー化する方法

goto

photo credit: Arthur Pontes _MG_0325 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAで便利なカーソル移動のショートカットキーを作成する方法をお伝えしています。

前回の記事はコチラ。

Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法をお伝えしています。Word VBAで見出し単位のカーソル移動をする方法をGoToメソッド、GoToNextメソッド、GoToPreviousメソッドを使って実現します。

見出し単位でカーソル移動をするプロシージャを作成しました。

こちら、文書の先頭または末尾に移動しきったときの挙動を追加しつつ、見出し単位のカーソル移動をショートカットキー化していきます。

では、行ってみましょう!

スポンサーリンク

前回のおさらいとお題

前回作成したプロシージャですが、おさらいをしましょう。

まず、文書の末尾方向(順方向)に次の見出しに移動するプロシージャがこちら。

Sub gotoForward()

Selection.GoToNext wdGoToHeading

End Sub

このプロシージャを何度か実行をすると、文書の最後の見出しである以下「見出し2」のところで止まって動かなくなります。

Word VBAで先頭の見出しからカーソル移動しない

一方で、文書の先頭方向(逆方向)に前の見出しに移動するプロシージャがこちらです。

Sub gotoBackward()

Selection.GoToPrevious wdGoToHeading

End Sub

こちらも何度か実行すると、文書の先頭の見出しから先はカーソル移動をしません。

Word VBAで末尾の見出しからカーソル移動しない

まあ、これはこれでよいのですが、普通に長い文書ですと、本当に最後(または最初)の見出しに到達したから動かないのかがちょっとわかりづらいです。

なので、この状態のときには、文書の末尾(または先頭)にカーソル移動をしてあげるほうが親切であることも多いかなと思いまして、その処理を追加していきたいと思います。

見出し単位のカーソル移動で文末の末尾・先頭での処理を追加する

アルゴリズムとしては以下のようになるかと思います。

  • GoToNextメソッド(またはGoToPrevious)を実行
  • 実行前と実行後でEnd(またはStart)の位置に変更がなければ
    • 文書の末尾(または先頭)にカーソルを移動

MoveUntilメソッドのときは、戻り値でカーソルの移動数が得られたので、それをもとに条件分岐できました。

Word VBAで句読点単位のカーソル移動をショートカットキー化する方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法です。今回は、If~Then文やMoveUntilメソッドを駆使しつつ、句読点単位のカーソル移動をショートカットキー化していきます。

GoToNextメソッド、GoToPreviousメソッドの戻り値

ですが、GoToNextメソッド、GoToPreviousメソッドの場合は、ちょっぴり違います。

戻り値として移動先のカーソル位置をRangeオブジェクトで返します。

Set 変数 = Selection.GotoNext(What)
Set 変数 = Selection.GotoPrevious(What)

ですから、移動前のRangeオブジェクトを保管しておいて、移動後に上記のように取得したRangeオブジェクトのEnd(またはStart)と比較すればよいですね。

それを踏まえて、以下のようなプロシージャを作りました。

Sub gotoForward()

Dim rng As Range, rngNext As Range

With Selection
    Set rng = .Range
    Set rngNext = .GoToNext(wdGoToHeading)
    If rngNext.End = rng.End Then .Move wdStory, 1
End With

移動後のカーソル位置の別の取得方法

これでOKはOKなのですが、移動後のカーソル位置…わざわざ戻り値を使わなくても

Selection.Range

とすれば取得できますね。

こちらのほうが変数少ない分、若干シンプルですね。

見出し単位のカーソル移動のショートカットキーを作る

次の見出しにカーソル移動するショートカットキー

以上を踏まえて、一つ次の見出しにカーソル移動するプロシージャは以下のようになりますね。

Sub gotoForward()

Dim rng As Range

With Selection
  Set rng = .Range
  .GoToNext wdGoToHeading
  If .Range.End = rng.End Then .Move wdStory, 1
End With

End Sub

GoToNextの前後で範囲のEndに変更がなければ、Moveメソッドを実行して文書の末尾にカーソル移動をしちゃいます。

一応、動作確認しておきましょうか。

上記のプロシージャを実行してみると、以下のように文書の最後の見出しの位置から先は、文書の末尾にカーソル移動しますね。

Word VBAで次の見出しにカーソル移動をする

あとはこのプロシージャをショートカットキー登録すればOKですね。

以下記事を参考に Alt + ] に指定してみました。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

前の見出しにカーソル移動するショートカットキー

同様に、一つ前の見出しにカーソル移動するプロシージャはこちらです。

Sub gotoBackward()

Dim rng As Range

With Selection
    Set rng = .Range
    .GoToPrevious wdGoToHeading
    If .Range.Start = rng.Start Then .Move wdStory, -1
End With

End Sub

実行結果はこちらです。

Word VBAで前の見出しにカーソル移動をする

こちらはショートカットキー Alt + [ に設定しました。

まとめ

Word VBAで見出し単位のカーソル移動をショートカットキー化する方法をお伝えしました。

これで見出し単位でビュンビュン移動できるようになりました。

本シリーズのテクニックをちょっと使えば、好みのカーソル移動のショートカットキーが作れると思いますので、ぜひトライしてみてください。

次回、また別のWord VBAのテクニックをお伝えしますね。以下記事から始まる文書一括処理に関するシリーズがおすすめです。

Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
Wordドキュメントについて一括で処理をするWordマクロを作る場合に必須となるテクニックとして、Word VBAでドキュメントを開くOpenメソッドの使い方、閉じるCloseメソッドの使い方についてお伝えします。

どうぞお楽しみに!

連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
  3. Word VBAで句読点単位のカーソル移動のショートカットキー化する方法
  4. Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法
  5. Word VBAで見出し単位のカーソル移動をショートカットキー化する方法
タイトルとURLをコピーしました