Compartir a través de


Buscar texto en intervalos de hojas de cálculo mediante programación

El Find método del Range objeto permite buscar texto dentro del intervalo. Este texto también puede ser cualquiera de las cadenas de error que pueden aparecer en una celda de hoja de cálculo, como #NULL! o #VALUE!. Para obtener más información sobre las cadenas de error, vea Valores de error de celda.

Se aplica a: La información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO para Excel. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

En el ejemplo siguiente se busca un rango denominado Fruits y se modifica la fuente de las celdas que contienen la palabra "apples". Este procedimiento también usa el FindNext método , que usa la configuración de búsqueda establecida anteriormente para repetir la búsqueda. Especifique la celda después de la cual buscar y el FindNext método controla el resto.

Nota:

La FindNext búsqueda del método se ajusta al principio del intervalo de búsqueda después de que haya alcanzado el final del intervalo. El código debe asegurarse de que la búsqueda no se ajusta en un bucle infinito. El procedimiento de ejemplo muestra una manera de controlarlo mediante la Address[] propiedad .

Para buscar texto en un intervalo de hojas de cálculo

  1. Declare variables para realizar el seguimiento de todo el intervalo, el primer rango encontrado y el rango encontrado actual.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. Busque la primera coincidencia, especificando todos los parámetros excepto la celda que se va a buscar después.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. Continúe buscando siempre que haya coincidencias.

    while(currentFind != null)
    
  4. Compare el primer intervalo encontrado (firstFind) con Nothing. Si firstFind no contiene ningún valor, el código almacena el intervalo encontrado (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Salga del bucle si la dirección del intervalo encontrado coincide con la dirección del primer intervalo encontrado.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Establezca la apariencia del intervalo encontrado.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. Realice otra búsqueda.

    currentFind = Fruits.FindNext(currentFind);
    

    En el siguiente ejemplo se muestra el método completo.

Ejemplo

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