電子書籍の厳選無料作品が豊富!

以下の検索と置換のプログラムを実行したとき動作に不明点があります。
動きのイメージを教えていただけますでしょうか。

以下のプログラムはカーソル位置から"word"があれば、"ワード"に変換すると考えて作成しております。


1.テストデータ
  1 word
  2 
  3 word

2.プログラム
 1)Selection.Renge.Textの場合

With Selection.Find
.Text = "word"

Do While .Execute
Selection.Range.Text = "ワード"
Loop

End With


 2)Selection.Textの場合

With Selection.Find
.Text = "word"

Do While .Execute
Selection.Text = "ワード"
Loop

End With



3.プログラムの動き
  ■上記の1)について
  1行目の頭にカーソルをセットした場合、実行結果は次の様になります。
    1 ワード
    2 
    3 ワード

  "word"は全て、"ワード"に変換されます。

  (なお、2行目にカーソルをセットした場合は、3行目の"word"のみ"ワード"に変換されます)


  ■上記の2)について
  1行目の頭にカーソルをセットした場合、実行結果は次の様になります。
    1 ワード
    2 
    3 word

  1行目の"word"のみ"ワード"に変換されます。

4.ご相談
 検索を実行するExecuteはctrl+fと同じ動作であると思います。

 1)Selection.Renge.Textでは、1行目で検索と置換が完了したら次の検索する値に移ります。

 ですが、
 2)Selection.Textは1行目で検索と置換が完了するとループを抜けてしまいます。

 次に移らず、ループが抜けるのはなぜでしょうか。
 動作のイメージを教えていただければと思います。

質問者からの補足コメント

  • うれしい

    Selection.TextとSelection.Range.Textの違いがわかりました。

    ・Selection.Textは置換後の文字列も検索の範囲に入る。

    ・Selection.Range.Textは次の文字列から検索する。

    知りたかった情報が上記になります。
    ありがとうございました。

      補足日時:2018/07/17 23:58

A 回答 (1件)

Loopを使うときには、検索結果のSelection.Textを解除させる


Selection.Collapse メソッド が必要です。
https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/ar …

Loopの前にSelection.Collapse wdCollapseEndを入れることで
次の検索を実行します。

Selection.Renge.Textでも、検索内容でのトラブル防止のため
Range.Collapse メソッドを入れたほうが良い場合があります。
https://msdn.microsoft.com/ja-jp/VBA/word-vba/ar …
    • good
    • 0
この回答へのお礼

ありがとう

ご回答ありがとうございます。
Selection.Collapse メソッドについては知りませんでした。調べて見ます。

お礼日時:2018/07/16 20:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!