【Word】[検索する文字列]欄に自動入力する場合としない場合の差

2011年4月27日

前回の記事「【コード】選択されている文字列を文書内で検索する」のテーマでは、以下の現象について取り上げました。

選択されている文字が、「検索と置換」ダイアログの「検索する文字列」欄に自動で入力される場合とされない場合とがある。

「検索する文字列」欄とは、以下の画像の赤で囲った部分ですね。

[検索と置換]ダイアログボックス

上記の現象は、検索をする場合([Ctrl] + [F])も、置換をする場合([Ctrl] + [H])も同じですね。

みなさんも、日頃Wordを使われていて、不思議に思ったことありませんでしたか?

なんとなく、自動入力されることを期待してダイアログを立ち上げたのに入力されずに、前回の検索結果が表示されていたいう経験ありませんか?

昨日の記事を執筆時には、あまり検証をしませんでした(実は、私の場合、かならず選択文字列が検索する文字列欄に入力されるように別のマクロを組んであるので、興味の対象外でした。失礼しました。。。)。

読者の方からヒントをいただきまして、少し検証したのでその報告をいたします。

結論としては、おそらく以下の通りです。

選択されている文字列が1つの単語の場合(Wordが認識する単語の場合)、その文字列は「検索と置換」ダイアログの「検索する文字列」欄に自動で入力される。

「単語」というものがくせ者です。

わかりやすく「単語」としましたが、厳密には単語ではありません。

英語の場合は比較的わかりやすいですね。

This is a pen.

この英文の場合、単語として認識されるのは、「this」 「is」 「a」 「pen」 「.」の5つです。

具体例

【例1】

選択範囲の末尾にスペースを含む場合であっても、スペースを削除して前半の単語だけ「検索する文字列」欄に入力します。

例1

この場合、「This」が入力されます。

【例2】

逆に、選択範囲の先頭にスペースがある場合には、何も自動入力されません。注意が必要です。

例2

この場合には、何も入力されません。

【例3】

上記で記したとおり、ピリオドも1つの単語として見なしているようなので、pen. が選択されていると自動入力されません。

例3

この場合も、何も入力されません。

【例4】

2語以上含む場合には、ルール適用外です。

例4

この場合、自動入力されません。

【例5】

ただし、単語ではなくても、単語内の文字は自動入力されますし、末尾にスペースがある場合には、削除されます。

例5

この場合、「his」が入力されます。

確認方法

では、ワードがどのように単語を見分けているのか?ですが、簡単な試し方があります。

以前、「カーソル移動の極意 」の記事で紹介したとおり、[Ctrl] + [→] としたときに、文書注でカーソルが移動する範囲が単語の範囲です。

日本語の場合についても同様ですね。

ちょうど、上記のカーソル移動の極意 に、日本語でカーソルが移動する様子が書かれていますので、Wordが単語として認識するルールをご確認ください。

コメント

  • 5. Re:Re:面白い記事ですね!(^^)

    >kinuasaさん

    毎度、深いヒントをありがとうございます。

    Wordsコレクションの表示のさせかた、はじめて知りました。

    このイミディエイトウィンドの使い方、今後のデバッグで使わせていただきます。

    Wordは勝手にいろんなことを判断してくれるので、ときどき混乱しますよね。

  • 4. Re:無題

    >signapiさん

    どうも、こちらこそ、いつもsignapiさんのブログで勉強させていただいております。

    今回の記事のヒントというか、答えは読者さんからいただきました。

    これ、ずっと疑問に思っていたので、私もすっきりしました(笑)。

  • 3. Re:面白い記事ですね!(^^)
    ↑の私のコメント中のコードが一部正常に反映されなかったようです(^^;
    「 」部分をスペースに置き換えてください。
    失礼しました。
    kinuasa返信する
  • 2. 面白い記事ですね!(^^)

    ここまで細かく見たことはありませんでしたので参考になりました。

    > Wordが単語として認識…

    オブジェクトとしてはWordsコレクションでしょうか。

    Public Sub Sample()
      Dim r As Word.Range
      
      For Each r In ActiveDocument.Words
        Debug.Print r.Text
      Next
    End Sub

    単語レベルで抜き出したいときには使えそうですね!

    kinuasa返信する
  • 1.
    面白い!!
    僕も、新田さんと同じように検索置換をマクロで処理しているので、あまり追求したことなかったですが、確かに不思議に思ったことがあります。そういう決まりがあったんですね。勉強になりました。
    signapi

-Word
-