Cómo: Buscar texto en rangos de hojas de cálculo mediante programación
El método Find del objeto Microsoft.Office.Interop.Excel.Range le permite buscar texto dentro del rango.Este texto también puede ser cualquiera de las cadenas de error que aparecen en una celda, por ejemplo #NULL! o #VALUE!.Para obtener más información sobre cadenas de error, vea Valores de error en celdas.
Se aplica a: La información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación para Excel 2013 y Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.
En el siguiente ejemplo se busca un rango denominado Fruits y se modifica la fuente de las celdas que contienen la palabra "apples".Este procedimiento también utiliza el método FindNext, que usa los valores de la búsqueda establecidos previamente para repetirla.Especifique la celda a partir de la que se va a realizar la búsqueda y el método FindNext se ocupará del resto.
[!NOTA]
La búsqueda del método FindNext vuelve al principio del rango de búsqueda una vez que ha llegado al final del rango.El código debe garantizar que la búsqueda no entre en un bucle infinito.El procedimiento del ejemplo muestra una forma de tratar este caso usando la propiedad Address.
Dispone de una demostración en vídeo relacionada en How Do I: Use the Find Method in an Excel Add-in?.
Para buscar texto en un rango de hoja de cálculo
Declare las variables para realizar un seguimiento en todo el rango, el primer rango encontrado y el rango encontrado actual.
Dim currentFind As Excel.Range = Nothing Dim firstFind As Excel.Range = Nothing
Excel.Range currentFind = null; Excel.Range firstFind = null;
Busque la primera coincidencia, especificando todos los parámetros menos la celda a partir de la cual se realiza la búsqueda.
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);
Prosiga con la búsqueda mientras haya coincidencias.
While Not currentFind Is Nothing
while(currentFind != null)
Compare el primer rango encontrado (firstFind) con Nothing.Si firstFind no contiene ningún valor, el código almacena aparte el rango encontrado (currentFind).
If firstFind Is Nothing Then firstFind = currentFind
if (firstFind == null) { firstFind = currentFind; }
Sale del bucle si la dirección del rango encontrado coincide con la dirección del primer rango encontrado.
ElseIf currentFind.Address = firstFind.Address Then Exit While End If
else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1) == firstFind.get_Address(Excel.XlReferenceStyle.xlA1)) { break; }
Establezca el aspecto del rango encontrado.
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;
Realice otra búsqueda.
currentFind = Fruits.FindNext(currentFind)
currentFind = Fruits.FindNext(currentFind);
En el siguiente ejemplo se muestra el método completo.
Ejemplo
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(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);
}
}
Vea también
Tareas
Cómo: Aplicar estilos a rangos de libros mediante programación
Cómo: Hacer referencia a rangos de hojas de cálculo en el código mediante programación