Share via


プログラムによってワークシートの範囲のテキストを検索する

Range オブジェクトの Find メソッドを使用すると、範囲内のテキストを検索できます。 ワークシートのセルに表示されるエラー文字列 (#NULL!#VALUE! など) を検索することもできます。 エラー文字列について詳しくは、「セルのエラー値」をご覧ください。

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

次の例では、Fruits という名前の範囲を検索し、"apples" という単語を含んだセルのフォントを変更します。 この手順では、以前に設定された検索設定を使って検索を繰り返す、FindNext メソッドも使用します。 検索するセルを指定すれば、残りの操作は FindNext メソッドによって処理されます。

Note

FindNext メソッドの検索操作は、範囲の末尾に到達すると、検索範囲の先頭に戻ります。 コードについては、検索が無限ループで繰り返されないことを確認する必要があります。 このサンプル プロシージャは、Address[] プロパティを使ってこれを処理するための 1 つの方法を示したものです。

ワークシートの範囲内のテキストを検索するには

  1. 範囲全体、最初の検索範囲、および現在の検索範囲を追跡するための変数を宣言します。

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. 最初の一致を検索します。検索対象のセルを除いて、すべてのパラメーターを指定します。

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. 一致するものがなくなるまで、検索を続行します。

    while(currentFind != null)
    
  4. 最初の検索範囲 (firstFind) と Nothing を比較します。 firstFind に値が含まれていない場合は、コードによっって検索範囲 (currentFind) が格納されます。

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. 検索範囲のアドレスが最初の検索範囲のアドレスと一致する場合は、ループを終了します。

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. 検索範囲の外観を設定します。

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. 別の検索を実行します。

    currentFind = Fruits.FindNext(currentFind);
    

    このメソッドを使ったサンプル コード全体を次に示します。

    private void DemoFind() 
    {
        Excel.Range currentFind = null; 
        Excel.Range firstFind = null; 

        Excel.Range Fruits = Application.get_Range("A1", "B3");
        // You should specify all these parameters every time you call this method,
        // since they can be overridden in the user interface. 
        currentFind = Fruits.Find("apples", missing,
            Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
            Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
            missing, missing); 

        while(currentFind != null) 
        { 
            // Keep track of the first range you find. 
            if (firstFind == null)
            {
                firstFind = currentFind; 
            }

            // If you didn't move to a new range, you are done.
            else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
                  == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
            {
                break;
            }

            currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
            currentFind.Font.Bold = true; 

            currentFind = Fruits.FindNext(currentFind); 
        }
    }