プログラムによってドキュメント内のテキストを検索および置換する

Find オブジェクトは Selection および Range オブジェクトの両方のメンバーであり、どちらを使用しても Microsoft Office Word ドキュメント内のテキストを検索できます。 Replace コマンドは、Find コマンドの拡張機能です。

Find オブジェクトを使用して Microsoft Office Word ドキュメントをループ処理し、特定のテキスト、書式、またはスタイルを検索し、Replacement プロパティを使用して検出された項目を置き換えます。

適用対象: このトピックの情報は、Word のドキュメント レベルのプロジェクトおよび VSTO アドインのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Selection オブジェクトを使用する

テキストを検索するために Selection オブジェクトを使用する場合、指定する検索条件は現在選択されているテキストにしか適用されません。 Selection が挿入ポイントの場合は、ドキュメントが検索されます。 検索条件に一致する項目が見つかった場合は、それが自動的に選択されます。

Find の条件は累積的、つまり、条件は前の検索条件に追加されることに注意することが重要です。 検索の前に、ClearFormatting メソッドを使用して前の検索から書式をクリアします。

Selection オブジェクトを使用してテキストを検索するには

  1. 検索文字列を変数に代入します。

    object findText = "find me";
    
  2. 前の検索の書式をクリアします。

    Application.Selection.Find.ClearFormatting();
    
  3. 検索を実行し、結果を含むメッセージ ボックスを表示します。

    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 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 オブジェクトを使用してテキストを検索するには

  1. ドキュメントの 2 番目の段落で構成される Range オブジェクトを定義します。

    次のコード例はドキュメント レベルのカスタマイズで使用できます。

    Word.Range rng = this.Paragraphs[2].Range;
    

    次のコード例は VSTO アドインで使用できます。 この例ではアクティブ ドキュメントを使用します。

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Range オブジェクトの Find プロパティを使用して、まず、既存の書式オプションをクリアし、次に文字列 find me を検索します。

    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)) 
    {
    
  3. メッセージ ボックスに検索結果を表示し、Range を選択してそれが見えるようにします。

        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 
    
    rng.Select();
    

    検索が失敗すると 2 番目の段落が選択されます。検索が成功すれば、検索結果が表示されます。

    次の例は、ドキュメント レベルのカスタマイズのコード全体を示しています。 この例を使用するには、プロジェクトの ThisDocument クラスからコードを実行します。

    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(); 
    }
    

次の例は、VSTO アドインのコード全体を示しています。 この例を使用するには、プロジェクトの ThisAddIn クラスからコードを実行します。

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 に置き換えます。

ドキュメント内のテキストを検索し、置換するには

  1. プロジェクトの ThisDocument または ThisAddIn クラスに次のコード例を追加します。

    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 オブジェクトでのみこのメソッドを使用すると、置換テキストで予想外の結果になる可能性があります。

  2. 検出された各項目を置換するには、Find オブジェクトの Execute メソッドを使用します。 置換する項目を指定するには、Replace パラメーターを使用します。 このパラメーターには、次の WdReplace 値のいずれかを指定できます。

    • wdReplaceAll は検出されたすべての項目を置換します。

    • wdReplaceNone 検出されたどの項目も置換しません。

    • wdReplaceOne は検出された最初の項目を置換します。