みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
カーソル移動…それ自体は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。
そんな悩めるユーザーのために、Wordにはたくさんのカーソル移動に関するショートカットキーがあります。
文書の先頭や末尾、ページ単位、段落単位、単語単位…
ただ、もうちょっとその「間」が欲しいなぁと思うことありませんか?
例えば、句読点の単位でサクサク移動したり、見出しから見出しへピョンピョン移動したり。
欲しい機能は、Word VBAで作ってしまえば良いのでは?
ということで、本記事から何度かにわたって、便利なショートカットキーの作り方をお伝えしていきます。
まず、今回はWord VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。
では、行ってみましょう!
Wordのカーソル移動に関するショートカットキー
Wordには便利なカーソル移動に関するショートカットキーがたくさん用意されています。
操作 | ショートカットキー |
---|---|
単語単位で移動 | Ctrl + ← / → |
行の先頭・末尾へ移動 | End / Home |
段落単位で移動 | Ctrl + ↑ / ↓ |
ページ単位で移動 | Ctrl + PageDown / PageUp |
ドキュメントの先頭・末尾へ移動 | Ctrl + End / Home |
どうですか?ちゃんと使いこなせていらっしゃいますか?
これらを使いこなしたとしても、Wordの場合、もうちょっと欲しくなるんですよね。
例えば
- 句読点単位
- 見出し単位
とかですね。単語と行の間、ページとドキュメントの間、それらにちょうどいい感じの移動ショートカットキーがあれば素敵ですよね。
Moveメソッドはカーソル移動の基本
では、それらのショートカットキーの自作を目指すべく、まずその一歩としてWord VBAのカーソル移動の基本中の基本であるMoveメソッドを紹介します。
今回は、カーソル移動なので、Selectionオブジェクトに対するメソッドになります。
書き方は
となります。
Unitは移動の単位を指定しますが、以下WdUnits列挙型のいずれかを指定します。
定数 | 単位 |
---|---|
wdCharacter | 文字 |
wdWord | 単語 |
wdSentence | 文 |
wdParagraph | 段落 |
wdLine | 行 |
wdStory | 文書の先頭または末尾 |
wdSection | セクション |
また、CountはUnitで指定した単位で移動する量を表します。プラスの数で指定したら、文書の末尾方向(順方向)へ、マイナスの数で指定したら文書の先頭方向(逆方向)への移動となります。
文単位で順方向へカーソル移動する
例として、文単位でカーソル移動をするプロシージャを作っていきましょう。
文単位でカーソル移動をする場合、Unitに指定する定数はwdSentence、Countは順方向に1、ということで以下のようなプロシージャを作ればOKです。
Sub moveForward()
Selection.Move wdSentence, 1
End Sub
このプロシージャを数回実行していくと、以下のようなカーソル移動となります。
ちゃんと移動していますね。
逆方向に移動させる場合は、Countの値にマイナスを指定しますので
Sub moveForward()
Selection.Move wdSentence, -1
End Sub
とすればよいですね。
こちらの実行の様子は以下のようになります。
Unitに指定する単位を変更したり、移動量を変更したりすることで、色々なカーソル移動を実現できますよね。
Selectionが範囲になっている場合にMoveメソッドを使うとどうなるか
さて、Moveメソッドでカーソル移動できるのは良いのですが、Selectionが「範囲」だったときはどうなるでしょうか。
例えば、このような場合ですよね。
Selectionの範囲つまりRangeは
- Start:0
- End:10
となっています。
これについて、以下プロシージャを実行してみましょうか。
Sub moveForward()
Selection.Move wdCharacter, 5
End Sub
つまり、文字単位で5つ、文末方向に移動をするのです。範囲がそのまま移動すると思いますか?どうでしょうね?
なんと、実行しますと
こうなります。
つまり、SelectionのRangeは
- Start:14
- End:14
となります。つまり、範囲の選択は解除され、終了位置を起点として移動した位置がカーソル位置となります。
同様に、逆方向の移動でも範囲の選択は解除され、開始位置を起点として移動した位置がカーソル位置となります。
Selectionが範囲であったとしても、Moveメソッドで移動した時点で選択は解除されますので、覚えておいて下さいね。
まとめ
Word VBAでカーソル移動をする基本中の基本であるMoveメソッドについてお伝えしました。
UnitとCountの設定を変えていけば、Moveメソッド一つで多様なカーソル移動が実現できます。
ですが…欲しいのは「句読点単位」なんですよね~。
今回のwdSentence単位の移動は、正直、行単位や段落単位とあんまり変わらないですものね。
ということで、次回は句読点単位のカーソル移動を実現すべく、別の方法を模索していきます。
どうぞお楽しみに!