この記事を新しいサイトに転記しました
----------------------------------------
Wordの「検索と置換」ダイアログを使っていると、ふと疑問に思うことがあります。
たとえば、文字列を選択した状態で、[Ctrl] + [F] を押すと、選択されている文字列が「検索と置換」ダイアログの検索する文字列の欄に自動で記入される場合とそうでない場合とがあります。
こういうことです。
以下、ニュース記事の引用です。
(引用開始)
2011年1月29日 21時22分
米自動車大手フォード・モーターが28日発表した10年12月期決算は、最終利益が前期比約2.4倍の65億6100万ドル(約5400億円)と、1999年以来の最高益を計上した。黒字は2年連続で、売上高は4.0%増の1209億ドルだった。
(引用終了)
上記の場合に[Ctrl] + [F] を押して「検索と置換」ダイアログを開くと、以下のように、検索する文字列の欄に「フォード」と入力されます。
![みんなのワードマクロ](https://stat.ameba.jp/user_images/20110426/08/gidgeerock/5d/a9/p/t02200076_0726025111188116713.png?caw=800)
しかし、別の事例を試してみましょう。
(引用開始)
2011年1月29日 21時22分
米自動車大手フォード・モーターが28日発表した10年12月期決算は、最終利益が前期比約2.4倍の65億6100万ドル(約5400億円)と、1999年以来の最高益を計上した。黒字は2年連続で、売上高は4.0%増の1209億ドルだった。
(引用終了)
上記のように、フォード・モーターを選択した状態で、[Ctrl] + [F] を押しても、「検索と置換」ダイアログの検索する文字列の欄には、新たに文字が入力されず、前回の検索文字列である「フォード」が残ったままです。
![みんなのワードマクロ](https://stat.ameba.jp/user_images/20110426/08/gidgeerock/5d/a9/p/t02200076_0726025111188116713.png?caw=800)
どうやら何かのルールがあって、それに沿うものと沿わないものとで、自動入力を区別しているんですね。
正直、そのルールが何なのかよくわかりません(笑)。
というわけで、今回は、そういったルールにかかわらず、選択中の文字列(複数段落を選択してもよい!!)を、検索する文字列として検索してくれるマクロを紹介します。
【掲載するマクロでできること】
文字列を選択した状態でマクロを実行すると、その文書中でその文字列を「あいまい検索」の設定にて検索します。
選択範囲以降に、同じ文字があれば、カーソルがその位置までジャンプします。
同じ文字列がない場合には、カーソルは移動しません。
なお、このマクロでは、「検索と置換」ダイアログは表示されません。
次も同じ検索をする場合には、マクロを再度実行するか、[Ctrl] + [PageUp] または[Ctrl] + [PageDown] を用いると便利ですね。
このマクロをキーボードやツールバーのボタンに登録をすれば、便利に使えますね。
(関連記事の、マクロコードの登録方法 や ツールバーのボタン登録 をご覧ください。)
【マクロ】
Sub Search_Text()
Dim myText As String ' 選択されている文字列
If Selection.Start = Selection.End Then
myText = ""
Else
myText = Selection.Text
End If
'あいまい検索を実施
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = myText
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
Selection.Find.Execute
End Sub
【解説】
基本的な構造は、マクロの記録機能で記録した「あいまい検索(日)」を実行したときのコードです。
少し工夫したのが青文字の部分ですね。
Word文書注で選択されている文字列を、「検索する文字列」に設定するための仕掛け(条件分岐)です。
If Selection.Start = Selection.End Then
この文章によって、現在文字が選択されているかどうかを確認しています。
Selection.Start は、選択範囲の先頭の位置を示し、
Selection.End は、選択範囲の末尾の位置を示します。
よって、文字が選択されていない場合には、上記条件の判定は「はい(Yes)」になります(詳細は、「【1行マクロ】文書中で文字列を選択しているかどうか調べる 」をご覧ください)。
この場合には、「検索する文字列」で用いるmyTextは空欄になります。
myText = ""
ですね。
それ以外の場合(文字が選択されている場合)には、選択されている文字をmyTextに代入します。
myText = Selection.Text
ですね。
▼関連記事
【1行マクロ】文書中で文字列を選択しているかどうか調べる
マクロコードの登録方法
ツールバーのボタン登録