【Word VBA】選択範囲の手前や後ろの文字を特定するWordマクロ

2011年4月13日

先の記事「選択範囲の先頭・末尾の文字や単語を特定する 」で紹介したものに関連したプロパティです。

Previous プロパティNext プロパティを使って選択範囲外の文字を特定してみます。

重要なのは、このプロパティでは単語は特定できないということです。

追記:16-09-09
単語も特定できます。本記事の末尾に説明を追記しました。

できること(文字を特定)

たとえば、以下のような場合があります。

文字列選択

Selection.Characters.First.Previous とした場合には、選択範囲での先頭の文字の手前である a が選ばれます。

同じように

Selection.Characters.Last.Next とした場合には、選択範囲での末尾の文字の後ろである o が選ばれます。

できること(単語を特定)

この場合、一見、不規則な感じの値の取得になります。

文字列選択

Selection.Words.First.Previous とした場合には、選択範囲での先頭の単語の手前である 半角スペース が選ばれます。

以下の場合には注意が必要です。

Selection.Words.Last.Next とした場合には、選択範囲での末尾の単語の後ろである o が選ばれます。

上記のように"o" が選ばれる理由は何だと思いますか?

選択範囲内の最後の単語を特定した場合には、単語直後の半角スペースも含まれるのです。

よって、Lastの単語として"consists "が選ばれた次の1文字として、"of" の"o" が選ばれるのです。

解説追記(16-09-09)

上記のようになる理由は、PreviousプロパティNextプロパティのデフォルト設定に関連しています。

これらのプロパティには、引数としてUnitCountというパラメーターがあります。

デフォルトでは、Unitが文字単位を示す、wdCharacterに設定されており、Countは1文字になっています。

つまり、

Unit:=wdCharacter, Count:=1

なのです。

以下のSample1とSample2は同じ動きをします。

(実行前)

文字列選択

(実行後)

文字列選択


Sub Sample1()

 Selection.Words.First.Previous.Select

End Sub

Sub Sample2()

 Selection.Words.First.Previous(Unit:=wdCharacter, Count:=1).Select

End Sub

さらに、Sample3のように単語単位で指定すれば、1つ前の単語を選択できるのです。

(実行前)

文字列選択

(実行後)

文字列選択


Sub Sample3()

 Selection.Words.First.Previous(Unit:=wdWord, Count:=1).Select

End Sub

コメント

  • 2. Re:無題

    >signapiさん

    こんにちは。お久しぶりです。

    >コードがすっきりします。
    >同じことを周りくどいやり方でやってました。

    そうなんですよね。

    私もこれを知る前は、signapiさんのように、カーソル
    位置を変更して文字列を取得していました。

    1文字の取得であれば、このプロパティは
    すっきり書けて便利ですね。

  • 1.
    これすごくいいですね。
    コードがすっきりします。
    同じことを周りくどいやり方でやってました。

    選択範囲を解除した後、
    Activedocument.range(selection.start-1, selection.end).text
    みたいに。
    signapi

-コード
-