方法: プログラムによって文書内のテキストを検索および置換する
Find オブジェクトは、Selection オブジェクトと Range オブジェクトの両方のメンバーであり、このいずれかを使用して Microsoft Office Word 文書内のテキストを検索できます。Replace コマンドは、Find コマンドの拡張機能です。
Microsoft Office Word ドキュメント内をループして特定のテキスト、書式設定、またはスタイルを検索するには、Find オブジェクトを使用し、見つかった項目のうち任意の項目を置換するには、Replacement プロパティを使用します。
対象: このトピックの情報は、Word 2013 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
Selection オブジェクトの使用
Selection オブジェクトを使用してテキストを検索する場合、指定した検索条件は、現在選択されているテキストにしか適用されません。Selection がカーソル位置である場合は、文書が検索対象になります。検索条件に一致する項目が見つかると、見つかった項目が自動的に選択されます。
Find の条件は累積されることに注意してください。つまり、条件は前の検索条件に追加されます。検索の前に、ClearFormatting メソッドを使用して前の検索の書式設定をクリアします。
Selection オブジェクトを使用してテキストを検索するには
検索文字列を変数に代入します。
Dim findText As String = "find me"
object findText = "find me";
前の検索の書式設定をクリアします。
Application.Selection.Find.ClearFormatting()
Application.Selection.Find.ClearFormatting();
検索を実行し、結果を示すメッセージ ボックスを表示します。
If Application.Selection.Find.Execute(findText) = True Then MessageBox.Show("Text found.") Else MessageBox.Show("The text could not be located.") End If
if (Application.Selection.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)) { MessageBox.Show("Text found."); } else { MessageBox.Show("The text could not be located."); }
このメソッドの完全なコードは次のようになります。
Private Sub SelectionFind()
Dim findText As String = "find me"
Application.Selection.Find.ClearFormatting()
If Application.Selection.Find.Execute(findText) = True Then
MessageBox.Show("Text found.")
Else
MessageBox.Show("The text could not be located.")
End If
End Sub
private void SelectionFind()
{
object findText = "find me";
Application.Selection.Find.ClearFormatting();
if (Application.Selection.Find.Execute(ref findText,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("The text could not be located.");
}
}
Range オブジェクトの使用
Range オブジェクトを使用すると、ユーザー インターフェイスに何も表示せずに検索を実行できます。Find オブジェクトは、検索条件に一致するテキストが見つかった場合は True を返し、見つからなかった場合は False を返します。また、テキストが見つかった場合は、検索条件に合わせて Range オブジェクトを再定義します。
Range オブジェクトを使用してテキストを検索するには
ドキュメントの 2 番目の段落を含む Range オブジェクトを定義します。
次のコード例はドキュメント レベルのカスタマイズで使用できます。
Dim rng As Word.Range = Me.Paragraphs(2).Range
Word.Range rng = this.Paragraphs[2].Range;
次のコード例はアプリケーション レベルのアドインで使用できます。この例ではアクティブ ドキュメントを使用します。
Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range
Word.Document document = this.Application.ActiveDocument; Word.Range rng = document.Paragraphs[2].Range;
Range オブジェクトの Find プロパティを使用して、既存の書式オプションを消去した後、find me という文字列を検索します。
rng.Find.ClearFormatting() If rng.Find.Execute(findText) Then
rng.Find.ClearFormatting(); if (rng.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)) {
検索結果をメッセージ ボックスに表示し、Range を選択して表示します。
MessageBox.Show("Text found.") Else MessageBox.Show("Text not found.") End If rng.Select()
MessageBox.Show("Text found."); } else { MessageBox.Show("Text not found."); } rng.Select();
検索が失敗した場合は 2 番目の段落が選択され、成功した場合は検索条件が表示されます。
次の例は、ドキュメント レベルのカスタマイズの完全なコードを示しています。この例を使用するには、プロジェクトの ThisDocument クラスからコードを実行します。
Private Sub RangeFind()
Dim findText As String = "find me"
Dim rng As Word.Range = Me.Paragraphs(2).Range
rng.Find.ClearFormatting()
If rng.Find.Execute(findText) Then
MessageBox.Show("Text found.")
Else
MessageBox.Show("Text not found.")
End If
rng.Select()
End Sub
private void RangeFind()
{
object findText = "find me";
Word.Range rng = this.Paragraphs[2].Range;
rng.Find.ClearFormatting();
if (rng.Find.Execute(ref findText,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("Text not found.");
}
rng.Select();
}
次の例は、アプリケーション レベルのアドインの完全なコードを示しています。この例を使用するには、プロジェクトの ThisAddIn クラスからコードを実行します。
Private Sub RangeFind()
Dim findText As Object = "find me"
Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range
rng.Find.ClearFormatting()
If rng.Find.Execute(findText) Then
MessageBox.Show("Text found.")
Else
MessageBox.Show("Text not found.")
End If
rng.Select()
End Sub
private void RangeFind()
{
object findText = "find me";
Word.Document document = this.Application.ActiveDocument;
Word.Range rng = document.Paragraphs[2].Range;
rng.Find.ClearFormatting();
if (rng.Find.Execute(ref findText,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing))
{
MessageBox.Show("Text found.");
}
else
{
MessageBox.Show("Text not found.");
}
rng.Select();
}
を検索し、文書のテキストの置換
次のコードは、現在の選択範囲で「find me」という文字列をすべて検索し、見つかった文字列を「Found」という文字列に置換します。
を検索し、文書のテキストを置換するには
プロジェクトの ThisDocument または ThisAddIn のクラスに次のコードを追加します。
Private Sub SearchReplace() Dim FindObject As Word.Find = Application.Selection.Find With FindObject .ClearFormatting() .Text = "find me" .Replacement.ClearFormatting() .Replacement.Text = "Found" .Execute(Replace:=Word.WdReplace.wdReplaceAll) End With End Sub
private void SearchReplace() { Word.Find findObject = Application.Selection.Find; findObject.ClearFormatting(); findObject.Text = "find me"; findObject.Replacement.ClearFormatting(); findObject.Replacement.Text = "Found"; object replaceAll = Word.WdReplace.wdReplaceAll; findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref replaceAll, ref missing, ref missing, ref missing, ref missing); }
Find クラスに ClearFormatting メソッドがあり、Replacement クラスにも独自の ClearFormatting メソッドがあります。検索置換操作の実行時には、両方のオブジェクトの ClearFormatting メソッドを使用する必要があります。このメソッドを Find オブジェクトでのみ使用すると、置換テキストが予測できない結果になることがあります。
Find オブジェクトの Execute メソッドを使用して、見つかった項目ごとに置換します。置換する項目を指定するには、Replace パラメーターを使用します。このパラメーターは、次のいずれかの WdReplace 値になります。
wdReplaceAll は、見つかった項目をすべて置換します。
wdReplaceNone は、見つかった項目を置換しません。
wdReplaceOne は、最初に見つかった項目を置換します。
参照
処理手順
方法: プログラムによって Word の検索オプションを設定する
方法: プログラムによって文書に複数の範囲を定義して選択する