Más allá del BUSCARV

Más allá del buscarv en Google Sheets

En este artículo vamos a ver como podemos empezar a expandir las capacidades de BUSCARV usando diferentes funciones.

Limitaciones del BUSCARV

hay Personas que dicen que el buscarv es una función sobrevalorada, y que hay mejores y más eficientes maneras de hacer lo mismo que hace buscarv .

La verdad es que buscarv es una gran funcion, muy facil de usar, y a demas muy polpular y usada

Sin embargo tiene ciertas limitaciones. Aquí las principales:

  • La base de búsqueda tiene que estar organizada de tal manera que la primera columna sea donde está la “llave de búsqueda”
  • Por lo anterior, la búsqueda no permite valores a la izquierda de nuestra llave
  • Que la columna donde busque sea un valor numérico la hace muy rígida
  • Solo encuentra el primer valor encontrado (hablando de búsquedas exactas, el 95% de las búsquedas)

En este artículo vamos a ver todas esas limitaciones, y vamos a aprender a usar otras funciones en el camino

Limitación 1. La primera columna siempre debe ser la “llave”. No se permiten valores a la izquierda

Esto se puede solucionar reorganizando nuestra base maestra, pero no siempre lo vamos a poder hacer, y la verdad implica más trabajo.

Hay dos funciones (o grupo de funciones) que nos pueden ayudar a solucionar esto. Vamos a ver la primera.

INDICE + COINCIDIR

Indice + Coincidir es otra forma de construir un BUSCARV. Hace exactamente lo mismo, con una gran ventaja y es que no necesitamos que nuestra llave esté en la primera columna.

A INDICE solo le damos un rango, una fila y una columna.

Si a eso le sumamos COINCIDIR, la cual me busca un valor en una fila o columna y me devuelve el numero de columna o fila donde lo encuentra, tenemos oro.

Primero vamos a reemplazar el siguiente BUSCARV:

con el siguiente INDICE

Hasta ahi muy bien, pero que pasa si agregamos una columna a la izquierda

Veamos nuestro BUSCARV, incluyendo la nueva columna, y con un valor de -1

Simplemente no funciona. En cambio la función INDICE, ampliamos el rango, y cambiamos la columna 3 por la 1 y nos da lo siguiente:

Limitación 2. La columna es numérica

Aunque esto lo podemos resolver desde el mismo BUSCARV, con la ayuda de COINCIDIR, en este artículo estamos buscando reemplazos a BUSCARV.

INDICE + COINCIDIR + COINCIDIR

Podemos ir un paso más allá del ejemplo anterior, y reemplazar la columna por otro COINCIDIR, para que no necesitemos un numero de columna, así:

Con esto ya no importa en que columna esté, con tal de que el título sea “Departamento”

BDEXTRAER (DGET)

Otra opción muy similar a INDICE + COINCIDIR, es la función BDEXTRAER o DGET en inglés. La gran diferencia es que solo permite una coincidencia. Mientras que BUSCARV trae la primera coincidencia, BDEXTRAER trae un error cuando hay más de una ocurrencia. Esto puede ser util en los casos, que nos interesa saber si hay más de una coincidencia.

BDEXTRAER es una función de busqueda en tablas. Esto quiere decir que no recibe números de columnas, como lo hacen BUSCARV e INDICE, sino que necesariamente debe recibir el nombre de los encabezados, tal como hicimos en el último ejemplo de INDICE con 2 COINCIDIR.

BDEXTRAER recibe 3 argumentos:

  1. La tabla
  2. El nombre del encabezado donde vamos a buscar
  3. Un rango de dos elementos:
    1. El nombre del encabezado de la llave
    2. La llave que vamos a buscar

Es un poco raro, si nunca lo hemos usado antes.

En nuestro ejemplo anterior, quedaría así:

Limitación 3. BUSCARV permite varias coincidencias del mismo valor, pero solo trae el primero que encuentre.

Esta limitación tiene dos partes. La primera es que BUSCARV permite más de una coincidencia. Sí queremos una función que nos avise si hay más de una coincidencia, podemos usar BDEXTRAER como en el ejemplo anterior o CONTAR.SI

BDEXTRAER

Otra de las ventajas de BDEXTRAER tal como la usamos anteriormente es que arroja un error #NUM! cuando hay más de un valor. Esto nos puede servir para identificar cuando un valor se repite.

CONTAR.SI

Pero si esto es lo que queremos nos va mejor con CONTAR.SI

FILTER

Podemos traer todas las coincidencias de un valor con la ayuda de FILTER

En este ejemplo, traemos todas las coincidencias del valor “Medellin”

INDICE + FILTER

Si queremos traer la primera, segunda o tercera coincidencia, simplemente combinamos este FILTER con un INDICE y el numero que queremos

Entonces, sabiendo que BUSCARV siempre trae la primera ocurrencia, podemos reemplazar un BUSCARV clásico con la fórmula

Pero así mismo, simplemente cambiando el valor de la fila a 2 o a 3, podemos traer la segunda o la tercera coincidencia

INDICE + FILTER + CONTARA

Si ya no queremos la primera, sino la ultima o penultima coincidencia, añadiremos a la anterior formula, la función CONTARA, así:

CONCLUSIÓN

Como ven, BUSCARV es una gran función, pero hay muchas otras que hacen lo mismo y llevan más allá el potencial de BUSCARV.

Alguna que me haya faltado? Se me ocurre que de cierta manera una tabla dinámica, o un QUERY tambien nos podrían en algunos casos reemplazar nuestros BUSCARV.

13 comentarios en “Más allá del BUSCARV”

  1. Hola Juan,
    en INDICE + FILTER + CONTARA dices que se puede buscar la penúltima o ultima fila, sin embargo solo muestras como obtener la ultima.
    Entonces, mi pregunta es, como puedo obtener la penúltima o la antepenúltima fila?

    Esta es la formula la captura de pantalla que muestras, y que sin embargo solo toma la ultima fila.

    =INDICE(FILTER(C2:C8;B2:B8=B11);CONTARA(FILTER(C2:C8;B2:B8=B11)))

    Como la modificarías para que obtenga la penúltima fila o antepenúltima fila?

    Por ejemplo, en el caso de FILTER + INDICE puedes especificar el numero de fila, pero en este caso, se supone que la función CONTARA está haciendo la función del número… entonces ya me he vuelto loca y no se como indicarle la fila que quiero empezando desde abajo…

    1. Hola

      Simplemente restale a contara las filas hacia arriba

      La penultima seria contara-1
      la antepenultima contara-2

      Y asi

      Un gran saludo!

  2. Muy buenas tardes. Espero que me pueda ayudar. No soy capaz de encontrar una fórmula para el siguiente resultado:

    En un Libro tengo varias Hojas. En una de ellas (Control) está, entre otros datos, el registro de las facturas recibidas (Fecha de factura-Col. Q, Proveedor-Col. S (Con Validación de Datos), Importe-Col. W y el vencimiento de la misma-Col. X). En la hoja Mensual quiero poner en cada proveedor (también con Validación de Datos) el importe pendiente de pago por mes (Columnas con el nombre de cada mes), una vez pagada, al borrar el vencimiento que desaparezca de la suma.

    El ejemplo sería:
    En la Hoja Control

    Col. Q Col. S Col. W Col. X
    Fecha Proveedor Importe Vtº
    10/4/21 Proveedor X 321,09
    15/4/21 Proveedor X 123,45 25/4/21
    20/4/21 Proveedor X 456,78 30/4/21

    En la Hoja Mensual:

    Col. BG Col. BH…. Col. BK Col. BL….
    Proveedor Enero…. Abril Mayo….
    Proveedor X 580,23

    Espero haberme explicado bien.

    En espera de sus noticias, reciba un cordial saludo,

    Carlos

    1. Buenos días. Ya he averiguado la fórmula que necesitaba.

      Por si os puede interesar, esta es:

      =SUMAR.SI.CONJUNTO(Control!$W$3:$W$2000;Control!$X$3:$X$2000;”>=”&BH2;Control!$X$3:$X$2000;”<="&FIN.MES(BH2;0);Control!$S$3:$S$2000;$BG$11)

      Un saludo,

      Carlos

  3. Hola! Tengo una consulta, No encontré en ningún lugar como resolver un problema. Tengo Las columnas A, B y C conteniendo códigos numéricos. Y en la columna D contengo precios. Preciso una fórmula que me busque un el contenido de una celda en las columnas A, B y C y devuelva el resultado de la columna D correspondiente. Combinando las formular SI.ERROR Y BUSCARV logré hacerlo solo buscando en las columnas A y B, pero no en A, B y C. Gracias!

  4. Hola, hay alguna forma de que luego de la consulta se vuelvan valores y no formulas los resultados, para después poder editar los campos y que se remplace con el nuevo contenido?????

  5. Me super interesa y necesito la ultima de las formulas, porque quiero buscar el ultimo resultado en una tabla con la funcions buscarv y lo que ustedes plantearon funciona perfecto parece INDICE + FILTER + CONTARA
    Pero yo necesito que si el valor a buscar esta en blanco, la celda quede en blanco tambien…
    En su ejemplo es si pones medellin en la celda, la formula busca el ultimo resultado y lo muestra. Eso es perfecto.
    Lo que yo necesito es que si en donde va el nombre de la ciudad esta en blanco, en la celda donde mostraria el ultimo resultado permanezca en blanco. Ahora me pone #¡Ref!
    He probado con si.error(luego toda su formula);””)y me sigue dando el mismo error de #¡Ref! diciendome que la funcion si.error solo admite 2 criterios y yo estoy poniendo 3. Por favor, una ayuda con esto! Gracias!!!

    1. Hola Emiliano

      Mil gracias por escribir

      No se si te entendí bien.

      El SI.ERROR no te va a funcionar porque técnicamente el blanco no es un error.

      Prueba con esta

      =SI(B11=””;””; INDICE(FILTER(C2:C8;B2:B8=B11);CONTARA(FILTER(C2:C8;B2:B8=B11))))

      Me cuentas si te funciona.

      Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

Pin It on Pinterest

Share This