みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで便利なカーソル移動のショートカットキーを作る方法をシリーズでお伝えしています。
前回はコチラ。
カーソル移動の基本、Moveメソッドについてお伝えしました。
さて、今回目指したいのは、句読点単位のカーソル移動です。
つまり、ちょうどデフォルトのショートカットキーでいう、単語単位と段落単位の間くらいの距離感の移動をしたいのです。
その目的を果たすために、特定の文字が登場するまでカーソル移動をするMoveUntilメソッドという便利なものがあるんですね。
ということで、今回はWord VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法です。
では、行ってみましょう!
特定の文字が登場するまでカーソル移動をするMoveUntilメソッド
では、さっそくMoveUntilメソッドの使い方についてお伝えしましょう。
SelectionオブジェクトのMoveUntilメソッドは、特定の文字が登場するまで指定した方向にカーソルを移動します。
書き方はこうです。
Csetは文字列を指定しますが、MoveUntilメソッドはCsetに含まれたいずれかの文字が登場するまで移動をします。
今回の場合は、句読点つまり「。」と「、」単位で移動したいので、
Selection.MoveUntil "。、", Count
と指定したいと思います。ちなみに、Csetは大文字・小文字の区別がありますよ。
また、Countは移動する方向と、何文字先まで特定の文字を探すかを表す整数を指定します。プラスの値であれば文書の末尾の方向(順方向)へ、マイナスの値であれば文書の先頭の方向(逆方向)へ移動します。
例えば数値10を指定した場合は、現在のカーソルから文末に向かって10文字先までの間に指定した文字があれば、そこに移動します。もし、指定した文字がその範囲になければ、移動はしません。
一般的には、範囲を絞る必要性はあまりありませんので、以下のどちらかの値を指定することが多いでしょう。なお、既定値はwdForwardとなります。
定数 | 値 |
---|---|
wdForward | 1073741823 |
wdBackward | -1073741823 |
ちなみに、Moveメソッドと同様、Selectionが範囲だったときには選択範囲は解除され、指定した文字を見つけた位置がカーソル位置となります。
句読点単位で順方向にカーソル移動をする
では、MoveUntilメソッドを実際に試して、句読点単位で順方向にカーソル移動をさせてみましょう。
例えば、以下のような文書があるとします。
カーソルが文書の先頭にある状態で、以下のプロシージャを連続して実行してみます。
Sub moveForward()
Const STR_CSET As String = "。、"
Selection.MoveUntil STR_CSET, wdForward
End Sub
Csetは「。」と「、」つまり句読点。wdForwardですから、順方向にそれらの文字までカーソル移動をする処理になりますよね。
1回目の実行では、次の読点「、」の位置にカーソル移動しますが、2回目以降はそこから動かず…となります。
MoveUntilメソッドで順方向に移動をした場合は、目的の文字(今回でいうと「、」)の「手前」にカーソルが移動するんですね。ですから、その「、」を越えさせてあげないと、次の「、」を探しにいくことはできません。
1文字分だけ順方向にカーソルを移動する
ということで、1文字だけ順方向に移動して、対象の文字を乗り越えさせてあげればOKですよね。
そんなときは、前回記事で解説をしました、Moveメソッドが使えます。
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
このプロシージャを先ほどの文書に連続して実行をすると
このように、次から次へと句読点の位置にカーソル移動しますね!
句読点単位で逆方向にカーソル移動をする
では、今度は句読点単位で逆方向にカーソル移動をするプロシージャを作ってみましょう。
方向が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で句読点単位でカーソル移動をするプロシージャの作り方についてお伝えしました。
MoveUntilメソッドで指定した文字までぴゅーっと移動することができます。Csetの文字列に好みの文字を追加していけば、好みに合わせてカスタマイズできますね。
さて、今回のプロシージャですが、文書の先頭または末尾でちょっといまいちな挙動をしますので、次回その点を解決していきます。
MoveUntilメソッドの戻り値を活用します。
どうぞお楽しみに!