Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法


move-until

photo credit: flyingkiwigirl Gypsy Day in NZ via photopin (license)

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

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

前回はコチラ。

Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
カーソル移動は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。まず今回は、Word VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。

カーソル移動の基本、Moveメソッドについてお伝えしました。

さて、今回目指したいのは、句読点単位のカーソル移動です。

つまり、ちょうどデフォルトのショートカットキーでいう、単語単位と段落単位の間くらいの距離感の移動をしたいのです。

その目的を果たすために、特定の文字が登場するまでカーソル移動をするMoveUntilメソッドという便利なものがあるんですね。

ということで、今回はWord VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法です。

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

スポンサーリンク

特定の文字が登場するまでカーソル移動をするMoveUntilメソッド

では、さっそくMoveUntilメソッドの使い方についてお伝えしましょう。

SelectionオブジェクトのMoveUntilメソッドは、特定の文字が登場するまで指定した方向にカーソルを移動します。

書き方はこうです。

Selection.MoveUntil Cset, Count

Csetは文字列を指定しますが、MoveUntilメソッドはCsetに含まれたいずれかの文字が登場するまで移動をします。

今回の場合は、句読点つまり「。」と「、」単位で移動したいので、

Selection.MoveUntil "。、", Count

と指定したいと思います。ちなみに、Csetは大文字・小文字の区別がありますよ。

また、Countは移動する方向と、何文字先まで特定の文字を探すかを表す整数を指定します。プラスの値であれば文書の末尾の方向(順方向)へ、マイナスの値であれば文書の先頭の方向(逆方向)へ移動します。

例えば数値10を指定した場合は、現在のカーソルから文末に向かって10文字先までの間に指定した文字があれば、そこに移動します。もし、指定した文字がその範囲になければ、移動はしません。

一般的には、範囲を絞る必要性はあまりありませんので、以下のどちらかの値を指定することが多いでしょう。なお、既定値はwdForwardとなります。

定数
wdForward 1073741823
wdBackward -1073741823

ちなみに、Moveメソッドと同様、Selectionが範囲だったときには選択範囲は解除され、指定した文字を見つけた位置がカーソル位置となります。

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

では、MoveUntilメソッドを実際に試して、句読点単位で順方向にカーソル移動をさせてみましょう。

例えば、以下のような文書があるとします。

カーソル移動のためのWord文書

カーソルが文書の先頭にある状態で、以下のプロシージャを連続して実行してみます。

Sub moveForward()

Const STR_CSET As String = "。、"
Selection.MoveUntil STR_CSET, wdForward

End Sub

Csetは「。」と「、」つまり句読点。wdForwardですから、順方向にそれらの文字までカーソル移動をする処理になりますよね。

1回目の実行では、次の読点「、」の位置にカーソル移動しますが、2回目以降はそこから動かず…となります。

Word VBAでカーソル移動したが2回目以降動かない

MoveUntilメソッドで順方向に移動をした場合は、目的の文字(今回でいうと「、」)の「手前」にカーソルが移動するんですね。ですから、その「、」を越えさせてあげないと、次の「、」を探しにいくことはできません。

1文字分だけ順方向にカーソルを移動する

ということで、1文字だけ順方向に移動して、対象の文字を乗り越えさせてあげればOKですよね。

そんなときは、前回記事で解説をしました、Moveメソッドが使えます。

Selection.Move Unit, Count

Unitに文字単位を表すwdCharacter、Countは順方向に1文字ですからプラスの1を指定すればよいですよね。

つまり、このようなプロシージャを作ればよいとなります。

Sub moveForward()

Const STR_CSET As String = "。、"

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

End Sub

このプロシージャを先ほどの文書に連続して実行をすると

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

このように、次から次へと句読点の位置にカーソル移動しますね!

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

では、今度は句読点単位で逆方向にカーソル移動をするプロシージャを作ってみましょう。

方向がwdBackWardに、1文字の乗り越えさせMoveメソッドも逆方向ですから-1を指定します。

Sub moveBackward()

Const STR_CSET As String = "。、"

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

End Sub

これを連続して実行してみます。

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

逆方向に句読点単位の移動ができていますね。

まとめ

Word VBAで句読点単位でカーソル移動をするプロシージャの作り方についてお伝えしました。

MoveUntilメソッドで指定した文字までぴゅーっと移動することができます。Csetの文字列に好みの文字を追加していけば、好みに合わせてカスタマイズできますね。

さて、今回のプロシージャですが、文書の先頭または末尾でちょっといまいちな挙動をしますので、次回その点を解決していきます。

MoveUntilメソッドの戻り値を活用します。

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

どうぞお楽しみに!

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

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

タイトルとURLをコピーしました