Freigeben über


Programmgesteuerte Suche nach Text in Arbeitsblattbereichen

Mit Find der Methode des Range Objekts können Sie innerhalb des Bereichs nach Text suchen. Dieser Text kann auch eine der Fehlerzeichenfolgen sein, die in einer Arbeitsblattzelle angezeigt werden können, #NULL! z. B. oder #VALUE!. Weitere Informationen zu Fehlerzeichenfolgen finden Sie unter Zellfehlerwerte.

Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene und VSTO-Add-In-Projekte für Excel. Weitere Informationen finden Sie unter features available by Office-App lication and project type.

Im folgenden Beispiel wird ein Bereich mit dem Namen Fruits durchsucht und die Schriftart für Zellen geändert, die das Wort "Äpfel" enthalten. Dieses Verfahren verwendet auch die FindNext Methode, die die zuvor festgelegten Sucheinstellungen verwendet, um die Suche zu wiederholen. Sie geben die Zelle an, nach der gesucht werden soll, und die FindNext Methode behandelt den Rest.

Hinweis

Die Suche der FindNext Methode wird wieder an den Anfang des Suchbereichs umbrochen, nachdem sie das Ende des Bereichs erreicht hat. Ihr Code muss sicherstellen, dass die Suche nicht in einer Endlosschleife umbrochen wird. Die Beispielprozedur zeigt eine Möglichkeit, dies mithilfe der Address[] Eigenschaft zu behandeln.

So suchen Sie nach Text in einem Arbeitsblattbereich

  1. Deklarieren Sie Variablen zum Nachverfolgen des gesamten Bereichs, des ersten gefundenen Bereichs und des aktuellen gefundenen Bereichs.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. Suchen Sie nach der ersten Übereinstimmung, und geben Sie alle Parameter mit Ausnahme der Zelle an, nach der gesucht werden soll.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. Fahren Sie mit der Suche fort, solange Übereinstimmungen vorhanden sind.

    while(currentFind != null)
    
  4. Vergleichen Sie den ersten gefundenen Bereich (firstFind) mit Nothing. Wenn firstFind kein Wert enthalten ist, speichert der Code den gefundenen Bereich (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Beenden Sie die Schleife, wenn die Adresse des gefundenen Bereichs mit der Adresse des ersten gefundenen Bereichs übereinstimmt.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Legen Sie die Darstellung des gefundenen Bereichs fest.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. Führen Sie eine andere Suche aus.

    currentFind = Fruits.FindNext(currentFind);
    

    Das folgende Beispiel zeigt die vollständige -Methode.

Beispiel

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