Compartir a través de


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.

vínculo a vídeo 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

  1. 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; 
    
  2. 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); 
    
  3. Prosiga con la búsqueda mientras haya coincidencias.

    While Not currentFind Is Nothing
    
    while(currentFind != null) 
    
  4. 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; 
    }
    
  5. 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;
    }
    
  6. 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; 
    
  7. 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

Conceptos

Trabajar con rangos

Parámetros opcionales en las soluciones de Office