Gewusst wie: Suchen nach Text in Arbeitsblattbereichen
Mit der Find-Methode des Microsoft.Office.Interop.Excel.Range-Objekts können Sie innerhalb des Bereichs nach Text suchen. Dieser Text kann auch aus einer der Fehlerzeichenfolgen bestehen, die in Arbeitsblattzellen wie #NULL! oder #VALUE! enthalten sind. Weitere Informationen über Fehlerzeichenfolgen finden Sie unter Zellenfehlerwerte.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und auf Anwendungsebene für Excel 2007 und Excel 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
Im folgenden Beispiel wird ein Bereich mit dem Namen Fruits durchsucht und die Schriftart der Zellen geändert, die das Wort "apples" enthalten. Diese Prozedur verwendet auch die FindNext-Methode, die bei Wiederholung einer Suche die zuvor festgelegten Sucheinstellungen verwendet. Sie geben die Zelle an, nach der gesucht werden soll, und die FindNext-Methode übernimmt den Rest.
Tipp
Die FindNext-Methode wird am Bereichsanfang erneut gestartet, wenn beim Suchvorgang das Bereichsende erreicht wurde. Der Code muss jedoch verhindern, dass die Suche in einer Endlosschleife ausgeführt wird. Dies können Sie, wie in der folgenden Beispielprozedur gezeigt, mithilfe der Address-Eigenschaft erreichen.
Eine entsprechende Videodemo finden Sie im Thema zur Verwendung der Find-Methode in einem Excel-Add-In (möglicherweise in englischer Sprache).
So suchen Sie nach Text in einem Arbeitsblattbereich
Deklarieren Sie Variablen zum Durchsuchen des gesamten Bereichs, des ersten gefundenen Bereichs und des aktuell gefundenen Bereichs.
Dim currentFind As Excel.Range = Nothing Dim firstFind As Excel.Range = Nothing
Excel.Range currentFind = null; Excel.Range firstFind = null;
Suchen Sie nach der ersten Übereinstimmung, und legen Sie alle Parameter mit Ausnahme der zu suchenden Zellen fest.
currentFind = Fruits.Find("apples", , _ Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _ Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
currentFind = Fruits.Find("apples", missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, missing, missing);
Setzen Sie die Suche fort, solange Übereinstimmungen gefunden werden.
While Not currentFind Is Nothing
while(currentFind != null)
Vergleichen Sie den ersten gefundenen Bereich (firstFind) mit Nothing. Wenn firstFind keinen Wert enthält, wird der gefundene Bereich (currentFind) durch den Code gespeichert.
If firstFind Is Nothing Then firstFind = currentFind
if (firstFind == null) { firstFind = currentFind; }
Beenden Sie die Schleife im Code, wenn die Adresse des gefundenen Bereichs mit der Adresse des zuerst gefundenen Bereichs übereinstimmt.
ElseIf currentFind.Address = firstFind.Address Then Exit While End If
else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing) == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)) { break; }
Legen Sie die Darstellung des gefundenen Bereichs fest.
With currentFind.Font .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red) .Bold = True End With
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); currentFind.Font.Bold = true;
Führen Sie eine weitere Suche aus.
currentFind = Fruits.FindNext(currentFind)
currentFind = Fruits.FindNext(currentFind);
Im folgenden Beispiel wird die vollständige Methode gezeigt.
Beispiel
Private Sub DemoFind()
Dim currentFind As Excel.Range = Nothing
Dim firstFind As Excel.Range = Nothing
Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
' 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", , _
Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
While Not currentFind Is Nothing
' Keep track of the first range you find.
If firstFind Is Nothing Then
firstFind = currentFind
' If you didn't move to a new range, you are done.
ElseIf currentFind.Address = firstFind.Address Then
Exit While
End If
With currentFind.Font
.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
.Bold = True
End With
currentFind = Fruits.FindNext(currentFind)
End While
End Sub
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(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
== firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
{
break;
}
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
currentFind.Font.Bold = true;
currentFind = Fruits.FindNext(currentFind);
}
}
Siehe auch
Aufgaben
Gewusst wie: Anwenden von Formaten für Bereiche in Arbeitsmappen
Gewusst wie: Verweisen auf Arbeitsblattbereiche im Code