Lección 15: Buscar un valor en una columna Excel (Find).

Escrito por Administrador

11 de septiembre de 2021

En esta lección vas a aprender a buscar una variable, un determinado valor o una palabra en un rango o columna de Microsoft Excel. ¡Es muy fácil, vamos allá!

En realidad, solo necesitamos saber cómo se utiliza la función Find y su sintaxis:

Set variable = Rango.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

  • what: el valor buscado.
  • after: celda después de la cual se iniciará la búsqueda. Si no se especifica se inicia en la esquina superior izquierda del rango.
  • LookIn: Para buscar dentro de fórmulas (xlFormulas), valores (xlValues) o notas (xlNotes).
  • LookAt: El valor xlPart devolverá una aparición del valor buscado cuando forme parte del valor de una celda; el valor xlWhole, en cambio, requerirá una coincidencia total.
  • SearchOrder: Para una búsqueda eficiente puedes indicar si se hace primero por filas (xlByRows) o por columnas (xlBycolumns).
  • SearchDirection: xlNext (anterior)o xlPrevious (siguiente).
  • MatchCase: Si es True la búsqueda distingue entre minúsculas y mayúsculas. El valor por defecto es False.
  • MatchByte: Solo se usa si se seleccionó o instaló la compatibilidad con idiomas de dos bytes.
  • SearchFormat: Para especificar coincidencias en formatos.

 

A continuación, vamos a ver algunos ejemplos:

Set Dato = Range("D:D").Find(codigo, LookIn:=xlValues, LookAt:=xlWhole)

Almacenamos en la variable Dato la dirección de la primera celda de la columna D que contenga todo el contenido (xlWhole) de la variable codigo.

Set Dato = Range("D1:D20").Find("ista", LookIn:=xlValues, LookAt:=xlPart)

Así, lo que hacemos es almacenar en la variable Dato la dirección de la primera celda del rango D1-D20 cuyo contenido contenga (xlPart) la cadena de texto “ista”.

La mejor forma de entender el funcionamiento y las posibilidades que tiene esta función es con una serie de ejemplos prácticos que veremos a continuación, en los que vamos a buscar un valor en un rango o columna de Excel.

En primer lugar, crea un nuevo libro, abre el editor VBA e inserta 4 módulos. Después, copia en ellos las siguientes macros.

 

Macro 1. Buscar cadenas de texto en una columna.

Sub Leccion15_1()

'Macro que busca en la columna C la cadena de texto "Periodista"

Set dato = Range("C:C").Find("Periodista", LookIn:=xlValues, LookAt:=xlWhole)

'Guardamos en la variable fila, el valor de la fila de Dato

fila = dato.Row  

'Guardamos en la variable columna, el valor de la columna de Dato                                                                  

columna = dato.Column      

'Mostramos en una ventana de texto el valor de la fila y columna                                                        

MsgBox "Fila: " & fila & " Columna: " & columna                                       

End Sub

Macro 2. Buscar cadenas de texto hacia abajo en una columna desde una celda determinada.

Sub Leccion15_2()

'Macro que busca en la columna C la cadena de texto "ista" desde la celda C8 hacia abajo

Set dato = Range("C:C").Find("ista", LookIn:=xlValues, LookAt:=xlPart, after:=Cells(8, 3), searchdirection:=xlNext)

'Guardamos en la variable fila, el valor de la fila de Dato

fila = dato.Row         

'Guardamos en la variable columna, el valor de la columna de Dato                                                    

columna = dato.Column 

'Mostramos en una ventana de texto el valor de la fila y columna                                                       

MsgBox "Fila: " & fila & " Columna: " & columna                                       

End Sub

Macro 3. Buscar cadenas de texto hacia arriba en una columna desde una celda determinada.

Sub Leccion15_3()

'Macro que busca en la columna C la cadena de texto "ista" desde la celda C8 hacia arriba

Set dato = Range("C:C").Find("ista", LookIn:=xlValues, LookAt:=xlPart, after:=Cells(8, 3), searchdirection:=xlPrevious)

'Guardamos en la variable fila, el valor de la fila de Dato

fila = dato.Row            

'Guardamos en la variable columna, el valor de la columna de Dato                                                    

columna = dato.Column      

'Mostramos en una ventana de texto el valor de la fila y columna                                                        

MsgBox "Fila: " & fila & " Columna: " & columna                         

End Sub

Macro 4. Buscar el valor de una variable en un rango de celdas.

Sub Leccion15_4()

'Macro que busca en el rango C2-C9 el valor de la variable profesión introducida en la celda C15

'Guardamos la profesion introducida en C15 en la variable profesion

profesion = Cells(15, "C").Value   

'Buscamos la profesion en el rango C2-C9                                                                                    

Set dato = Range("C2:C9").Find(profesion, LookIn:=xlValues, LookAt:=xlWhole)            

'Si dato esta en blanco porque no se ha encontrado en la lista, entonces

If dato Is Nothing Then      

'Mostramos ventana de texto indicando que no se ha encontrado                                                                  

MsgBox "Profesión no contemplada en la lista"      

'En caso de haberse hallado en la lista,                                            

Else                  

'Guardamos en la variable fila, el valor de la fila de Dato                                                                                    

fila = dato.Row     

'Guardamos en la variable columna, el valor de la columna de Dato                                                             

columna = dato.Column      

'Mostramos en una ventana de texto el valor de la fila y columna                                                                  

MsgBox "Fila: " & fila & " Columna: " & columna                                                       

End If

End Sub

A continuación, rellena la hoja de cálculo como aparece en la figura. Para ello, tendrás que insertar cuatro botones y asignarle las macros anteriores.

Además, te dejo dos enlaces donde explico cómo configurar Microsoft Excel para el uso de macros y cómo asignar macros a botones.

total-operaciones-matematicas-macros

Como resultado, en la primera macro, buscamos en la columna C, la dirección de la celda que contiene la palabra “periodista”. Como no hemos indicado nada, lo va a hacer en dirección de arriba hacia abajo y sin distinguir mayúsculas - minúsculas.

Finalmente, se abrirá una ventana emergente que nos dirá la fila y la columna de esa celda.

total-operaciones-matematicas-macros

Igualmente, las macros 2 y 3 buscan la cadena de texto “ista” en la columna C, a partir de la celda C8.

Mientras la segunda macro lo hace en dirección hacia abajo, la tercera lo hace hacia arriba. Esto lo seleccionamos con los parámetros xlPrevious o xlNext de Searchdirection dentro del comando Find.

Como resultado, la segunda macro encontrará el valor “socorrista”, fila 9 columna 3.

total-operaciones-matematicas-macros

Así mismo, la tercera macro encuentra el valor “periodista”, fila 7 columna 3.

total-operaciones-matematicas-macros

Por último, la cuarta macro, busca en el rango C2-C9 el valor introducido por nosotros en la celda C15. Si no lo encuentra, aparecerá un aviso advirtiendo de que no se ha encontrado en el listado.

total-operaciones-matematicas-macros

En este caso hemos introducido la palabra albañil en minúsculas. Como en el comando find no hemos obligado a que coincidan mayúsculas y minúsculas, localiza la palabra en la fila 2 columna 3.

Con esto llegamos al final de la decimoquinta lección, en la que has aprendido a buscar un valor en un rango o columna de Excel usando la función Find.

Finalmente, desear que te esté gustando el curso y pedirte que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario. De hecho, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L14. La función msgbox en VBA.

L16. Función FOR en VBA. »

Por favor, ayúdame y haz clic en el anuncio. Solo te lleva un segundo 😉

 


18 Comentarios

  1. Avatar

    Buenos dias, veo que estan activos y necesito ayuda en una busqueda con la funcion cells.finds, ya que es la unica que encontre dentro de vba para buscar un valor dentro de otro valor aproximado.
    ejemplo: dato1: 30905486, en dato2: AEP-20220907-30905486.pdf.
    mi problema especifico es que dentro de la columna A, tengo 15 celdas como dato1, y en la columna D, tengo 100 celdas como dato2, quiero remarcar las coincidencias. pero no encuentro como hacer para que la funcion cells.find busque sobre un rango y valla bajando en la propia columna.
    aclaro que los valores pueden ser variables. hay dias que pueden ser 30 datos que hay que buscar sobre 200.

    Responder
    • Administrador

      Hola Emiliano,

      Prueba con el siguiente código.

      Saludos.

      Sub Buscar()

      Dim dato As String

      'Iniciamos el bucle que recorre las celdas 1-10 de la columna A

      For i = 1 To 10

      'Iniciamos un bucle anidado que recorre las celdas 1-100 de la columna D

      For k = 1 To 100

      'Coloreamos de rojo las celdas de la columna D que tengan coincidencias con la columna A

      If Cells(k, "D") Like "*" & Cells(i, "A") & "*" Then

      Cells(k, "D").Interior.ColorIndex = 3

      End If

      Next

      Next

      End Sub

      Responder
      • Avatar

        Hola, muchas gracias!!!
        se le podria agregar un else para que borre las que no cumplen la condicion?

        Responder
        • Administrador

          Si se podría, pero ese paso tendrás que realizarlo al final del proceso, ya que si lo realizas al nivel del if del bucle anidado lo más probable es que te borre todas las celdas. Date cuenta de que en la primera iteración puede haber coincidencias, pero en la segunda ya no coincidirá y te la borrará...en definitiva, tendrás una columna D solo con las últimas coincidencias.

          Por eso, lo mejor es colocar un condicional al final de las dos iteraciones, en el que le digamos que borre las celdas que no coinciden con ninguna de las búsquedas.

          No sé si me he explicado bien...

          Responder
  2. Avatar

    Excelente explicación muchas gracias!!! Una duda, como puedo usar find, pero en lugar de buscar en un rango de celdas quisiera buscar dentro de un arreglo (Lista), es esto posible?

    Responder
    • Administrador

      Hola Carlos,

      Se haría de la misma manera. Al final, la lista no deja de ser un rango de celdas. Si quieres pásame un ejemplo y lo vemos.

      Saludos.

      Responder
      • Avatar

        Gracias por responder!! Mira aquí un ejemplo muy simple, Estoy tomando datos de una hoja y los meto en un arreglo llamado: "Tabla", la idea es buscar información en un segundo arreglo a llamado "Tabla2". Es como un buscarv de una tabla a otra, pero quisiera hacerlo todo directamente en memoria para poder procesar grandes cantidades de datos con mayor velocidad. El problema está en la Línea marcada con asteriscos, me lanza un error de compilación de: "Calificador no válido" ¿Como puedo hacer para que la búsqueda se haga directamente en Tabla2 sin tener que ir al rango de celdas? Gracias de antemano.

        Sub Find2()

        Dim Tabla() As Variant
        Dim Tabla2() As Variant
        Dim H As Worksheet
        Set H = Sheets("Hoja1")
        Tabla = H.Range("H6:I15")
        Tabla2 = H.Range("M6:N15")

        ReDim Preserve Tabla(1 To 10, 1 To 3)

        For r = 1 To 10
        '********************
        Set dato = Tabla2.Find(Cells(5 + r, 8), LookIn:=xlValues, LookAt:=xlWhole)
        '********************
        fila = dato.Row
        columna = dato.Column
        Tabla(r, 3) = Cells(fila, columna + 1) + Tabla(r, 2)
        Next r

        H.Range("H6:J15") = Tabla

        End Sub

        Responder
  3. Avatar

    Buen Día, tengo una duda no se si me podes ayudar?, tengo un rango donde debo buscar todos los codigas que comienzan por 04 y extaerlos y ponerlos en una celda que me indica cual es el primero segundo tercero y asi sucesivanemte:

    0201 dato 1 dato2 dato3 dato4
    0401 0401 0420 0 0
    0310
    0420

    quedo atento a tus comentarios

    Responder
    • Administrador

      Buenos días Alejandro,

      Prueba con este código:

      Sub Buscar()

      'Valor de la columna donde empezamos a almacenar los datos que cumplen el criterio. En el ejemplo, columna E

      Z = 5

      'Recorremos los datos desde la fila 3 hasta la 10

      For i = 3 To 10

      'Si el valor de alguna celda empieza por 04, copiamos su valor en la fila de datos y aumentamos el contador

      If Cells(i, "B") Like "04" & "*" Then

      dato = Cells(i, "B")
      Cells(3, Z) = dato
      Z = Z + 1

      End If

      Next

      End Sub

      Buscar cadenas que empiecen por 04

      Responder
  4. Avatar

    Hola, muy interesante. Mi pregunta es como hacerle cuando quiero que ya que encuentre ese valor (fila y columna), se ubique en dicha celda. Es decir, que no solo encuentre donde esta, sino que posicione el cursor en la coincidencia

    Responder
    • Administrador

      Hola Victor,

      Una vez sepas las coordenadas i (fila) y j (columna), solo tienes que escribir:

      cells(i,j).select

      Saludos.

      Responder
  5. Administrador

    Gracias Roberto. Me alegra que te haya servido. Un saludo hasta Cuba.

    Responder
  6. Avatar

    Hermano, ahora si quedo espectacular usted es un genio, estoy muy contento y agradecido por el trabajo soy cubano y si algun dia vienes a Cuba puedes contar conmigo, un abrazo

    Responder
  7. Administrador

    Hola Roberto.

    Prueba este otro código 😉

    Te envío al correo el archivo Excel programado para que lo tengas.

    Saludos.

    Private Sub contar()

    'Inicializamos variables

    cuenta = 0 'Lleva la cuenta del número de veces que aparece un determinado número
    a = 2 'Fila donde se va a escribir la variable cuenta dentro de la matriz de resultados
    b = 4 'Columna donde se va a escribir la variable cuenta dentro de la matriz de resultados

    'Bucle exterior que busca la primera fila donde aparece cada número del 1 al 20

    For Z = 1 To 20

    a = 2

    For i = 2 To 501

    If Cells(i, 1) = Z Then

    For k = 1 To 20

    'Bucle interior que recorre las filas desde donde aparecen por primera vez hasta el final y contabiliza

    For j = i + 1 To 501

    If Cells(j, 1) = k Then

    cuenta = cuenta + 1

    End If

    Next j

    Cells(a, b) = cuenta

    cuenta = 0
    a = a + 1

    Next k

    GoTo final

    End If

    Next i

    final:

    b = b + 1

    Next Z

    End Sub

    Responder
  8. Avatar

    Brother, Muchas gracias por lo que me enviaste y estoy muy agradecido siempre me sirvio para algo pero lo que quiero es que la instruccion empiece a buscar desde la celda A1 hasta la A500 y cuando encuentre el numero 1 (Ejemplo que el numero 1 este en la celda A15) salte una celda (Ejemplo A16) y a partir de ahi (Ej A16) me totalice o agrupe en la celda D1 los numeros q siguen a continuacion o sea Ejemplo del 2 hay 25 del 3 hay 40 del 4 hay 26 y asi sucesivamente y despues cuando llegue a la celda A500 que ya totalizo todos los numeros que le siguen al 1 que vaya a la celda A1 y busque el numero 2, totalice o agrupe los que le siguen y los ponga en la celda E1 y cuando encuentre el 3 igual que los copie en la celda F1 y asi sucesivamente yo quiero tener 20 columnas con los numeros del 1 al 20 y abajo los numeros totalizados que le siguen a cada numero del 1 al 20 Ejemplo:

    A:1 .........C1..........D1..E1..F1..G1..H1..I1..J1..K1..L1..M1................................
    1 2 3 4 5 6 7 8 9 10
    5 1 ---- 20 5 6 15 9 4 21 2 16 8
    10 2 ---- 15 11 23 2 6 5.........................
    4 3 ---- 14 6 2 .............................
    19 .
    1 .
    3 .
    8 .
    14 .
    3 .
    3
    5
    8

    Responder
  9. Administrador

    Hola Roberto, un placer.

    Puedes intentarlo con lo siguiente. Espero que te sirva. Un saludo.

    Private Sub contar()

    'Inicializamos la variable que va a contar el número de veces que aparece cada número entre 1 y 20

    cuenta = 0

    'Bucle que recorre la columna A buscando primero el número 1, después el número 2...hasta el 20

    For Z = 1 To 20

    'Bucle anidado que recorre las primeras 500 filas de la columna A

    For i = 1 To 500

    'Si la fila contiene el número que buscamos, suma una unidad a la variable contadora

    If Cells(i, 1) = Z Then

    cuenta = cuenta + 1

    End If

    Next

    'El número de veces que aparece un número lo escribimos en la fila correspondiente, en la columna 5

    Cells(Z, 5) = cuenta
    cuenta = 0

    Next

    End Sub

    Responder
  10. Avatar

    Buenos dias por aca Roberto gomez desde Cuba, me gustan muchos los ejemplos, estoy empezando a programar (tengo muchas ideas en la cabeza he estudiado bastante pero no he programado nada interesante)............quiero saber como se hace lo siguiente, Ejemplo, tengo en excel desde la columna A:1 hasta la columna A:500 varios numeros aleatorios del 1 al 20 (=aleatorio.entre(1;20) me gustaria saber como buscar el numero 1 y cuando lo encuentre que me agrupe o totalice en otras celdas u hojas de ahi para abajo los demas numeros y despues que vuelva a la celda A:1 y busque el numero 2 y haga lo mismo a partir del numero siguiente. Ejemplo
    A:1
    5
    10
    4
    19
    1
    3
    8
    14
    3
    3
    5
    8

    O sea que busque el 1 u cuando lo encuentre q me ponga en algun lugar que encontro tres 3, dos 8, etc y asi sucesivamente, gracias de antemano esto puede ser en excel o en VBA

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto