【Word VBA】カーソルを移動するWordマクロ(その3)

2017年9月10日

前回の記事(【コード】カーソルを移動するWordマクロ(その2) )の改良版です。

前回紹介したマクロでは、カーソルが以下のように句読点の直後に移動しました。

これは要望があって作ったものなので想像で動きを決めたのですが、自分で使ってみて違和感がないように少し改良してみました。

このマクロでできること

下図のようにカーソルが句読点の直後に移動します。移動した箇所が段落の末尾やタブ、スペースの直前だった場合には文章の先頭(つまり、文字列の直前)にカーソルが位置します。前回のマクロとの違いは、下図における赤色の箇所です。

前回のマクロ同様、英文でも同じように動作します。

マクロの解説

前回のマクロの「カーソル_進む」処理において、カーソル位置を修正しました。

28行目で、句読点の直後の文字の判定をします。

myRange.Characters.Last.Next(wdCharacter, 2) にて、現在の選択範囲から末尾に向けて2つ目の文字列を取得します。

この取得した文字列が、スキップする文字列(21行目にて定義された Chr(9) & Chr(11) & Chr(13) & Chr(32) & Chr(-32448) )であるかどうかをLike 演算子で比較します。

Chr(9) タブ記号
Chr(11) 段落内改行の改行記号(ソフトリターン)
Chr(13) 段落記号(ハードリターン)
Chr(32) 半角スペース
Chr(-32448) 全角スペース

29行目~34行目の処理で、取得した文字がこれら文字列の場合にはカーソルを文書末尾方向に進めて実際の文頭を探します。MoveEndWhile メソッドを利用します。結果、カーソル位置を文頭に移動します。

マクロ


Private Const myCset As String = "。、?!:;.,?!:;"

Sub カーソル_戻る()

  Dim myRange As Range
  
  Set myRange = Selection.Range
  
  myRange.Start = myRange.Start - 1
  myRange.MoveStartUntil cset:=myCset, Count:=wdBackward
  
  Selection.SetRange Start:=myRange.Start, End:=myRange.Start

End Sub

Sub カーソル_進む2()

  Dim myRange As Range
  Dim myCset2 As String
  
  myCset2 = Chr(9) & Chr(11) & Chr(13) & Chr(32) & Chr(-32448)
  
  Set myRange = Selection.Range
 
  myRange.End = myRange.End + 1
  myRange.MoveEndUntil cset:=myCset, Count:=wdForward
  
  If myRange.Characters.Last.Next(wdCharacter, 2) Like "[" & myCset2 & "]" Then
   With myRange
    .End = .End + 2
    .MoveEndWhile cset:=myCset2, Count:=wdForward
    Selection.SetRange Start:=myRange.End, End:=myRange.End
   End With
  Else
   Selection.SetRange Start:=myRange.End + 1, End:=myRange.End + 1
  End If

End Sub

-コード
-,