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:
- La tabla
- El nombre del encabezado donde vamos a buscar
- Un rango de dos elementos:
- El nombre del encabezado de la llave
- 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.
Suscríbete para acceder al curso «Descubriendo el poder de Google Sheets» y empezar tu camino a la maestría de Sheets, Forms y Apps Script
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…
Hola
Simplemente restale a contara las filas hacia arriba
La penultima seria contara-1
la antepenultima contara-2
Y asi
Un gran saludo!
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
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
Hola Carlos!
Muchas gracias por el aporte!
Que bueno que hayas logrado descifrarlo.
Saludos!
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!
Hola Juan
Aquí te dejo un artículo donde lo vemos
https://juansguzman.com/buscarv-con-dos-criterios/
Saludos!
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?????
Hola!
La única forma es con un código que haga la consulta «detrás de cámaras» y después solo traiga el valor
Saludos!
Excelente ayuda, usé la funcion FILTER anidada con INDICE y me funcionó perfecto. Mil gracias
Hola Luis!
Que bueno que te haya servido
Un gran saludo!
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!!!
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!