Word VBAで句読点単位のカーソル移動をショートカットキー化する方法

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

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

前回の記事はこちらです。

Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法をお伝えしています。今回はWord VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法です。

MoveUntilメソッドを使って、句読点単位で移動をするプロシージャを作りました。

ただ、このプロシージャ、ちょっと挙動がおかしいところがあるんですよね。

今回は、その欠点を直しつつ、句読点単位のカーソル移動をショートカットキー化していきます。

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

スポンサーリンク

前回のおさらいと課題

まずは前回のおさらいなのですが、以下プロシージャは句読点単位で文書の末尾方向(順方向)にカーソル移動をするものです。

Sub moveForward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdForward
    .Move wdCharacter, 1
End With

End Sub

「。」か「、」が見つかる位置までカーソルを移動するという処理ですね。

しかし、実はちょっと欠点がありまして…、連続して実行して、文書の末尾に近くなると…

Word VBAマクロで順方向に句読点単位でカーソル移動

最後のほうの挙動、微妙ですよね。

MoveUntilで「。」と「、」がもう見つからない状態になるとMoveUntilは実行されないのですが、1文字移動するMoveメソッドだけ実行されちゃうんですね。

んー、ちょっとカッコ悪い。

逆方向に句読点単位でカーソル移動するプロシージャ

Sub moveBackward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdBackward
    .Move wdCharacter, -1
End With

End Sub

こちらも同様で、文書の先頭のほうになると…

Word VBAマクロで逆方向に句読点単位でカーソル移動

1文字ずつの移動になっちゃいますね。

やっぱりカッコ悪い…

MoveUntilメソッドで移動できたかどうかを判定する

これをカッコよくするためには、MoveUntilメソッドで移動があったときとなかったときで処理をわけていけばよいです。

文書の末尾または先頭に近づいて、もう目的の文字が存在していないときには、実行時に末尾または先頭にカーソル移動をするようにしちゃいましょう。

つまり、以下のような処理を入れるのです。

  • もしMoveUntilメソッドで目的の文字が見つかってカーソル移動できたら
    • 1文字だけその方向にカーソル移動する
  • さもなくば
    • 文書の末尾(または先頭)にカーソル移動する

MoveUntilメソッドの移動文字数を取得する

さて、その判断のための心強い味方なのですが、MoveUntilメソッドは実行後にその移動数を戻り値として返します。

変数 = Selection.MoveUntil(Cset, Count)

この変数の値が0でなければ、MoveUntilメソッドでカーソル移動があったということですよね。

If~Then文で条件分岐を作る

条件によって処理を分岐するときには、If~Then文を使いますよね。今回は、条件が満たされなかったときの処理も必要なので、Else文も使います。

If 条件式 Then
 ’処理1
Else
 ’処理2
End If

条件式が満たされている(条件式がTrue)のであれば処理1が実行され、そうでなければ(条件式がFalse)であれば処理2が実行されます。

Word VBAでは条件分岐はあまり使わないかも知れませんが、重要な構文なのでしっかり使えるようにしておきたいですね。

カーソル位置を文書の末尾または先頭に移動する

さて、MoveUntilメソッドの移動数がゼロだった場合は、カーソル位置を文書の末尾(または先頭)に移動したいのです。

その方法はどうしましょうか?

これは、これまでちょこちょこお世話になっている、Moveメソッドを活用できます。

Selection.Move Unit, Count

UnitにwdStoryを設定して、Countは順方向であればプラスの値(例えば1またはwdForward)、逆方向であればマイナスの値(例えば-1またはwdBackward)を指定すればOKです。

句読点単位でカーソル移動をするプロシージャ

以上を踏まえて、MoveUntilで移動があったかどうかを条件として、処理を分岐するようにしてみましょう。

順方向への句読点単位カーソル移動をショートカットキーに登録する

句読点単位で順方向へカーソル移動するプロシージャはこちらです。

Sub moveForward()

Const STR_CSET As String = "。、"

Dim lenMove As Long
With Selection
    lenMove = .MoveUntil(STR_CSET, wdForward)
    If lenMove <> 0 Then
        .Move wdCharacter, 1
    Else
        .Move wdStory, wdForward
    End If
End With

実行をしてみましょう。

Word VBAで順方向に句読点単位でカーソル移動する

末尾に近づき句読点がもうないときには、文書の末尾にカーソルが移動しましたね。

このプロシージャはショートカットキー Alt + . に設定をしました。なんとなくそれっぽいでしょ?

Wordマクロのショートカットキーの登録方法はこちらの記事をご覧ください。

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

逆方向への句読点単位カーソル移動をショートカットキーに登録する

今度は、句読点単位で逆方向にカーソル移動するプロシージャです。

Sub moveBackward()

Const STR_CSET As String = "。、"

Dim lenMove As Long
With Selection
    lenMove = .MoveUntil(STR_CSET, wdBackward)
    If lenMove <> 0 Then
        .Move wdCharacter, -1
    Else
        .Move wdStory, wdBackward
    End If
End With

End Sub

これを連続実行します。

Word VBAで逆方向に句読点単位でカーソル移動する

先頭に近くなり、句読点が見つからないならカーソルは先頭に移動しますね。

こちらのプロシージャは、ショートカットキー Alt + , に設定しました。

まとめ

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

これで、Word文書の同じページ内などは縦横無尽にカーソル移動できますね。

さて、次回ですが、別のショートカットキー「見出し単位で移動」を作っていきたいと思います。

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

どうぞお楽しみに!

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

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