Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA
Hector comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clave, descripción y palabras similares). Lo interesante del caso es que los filtros son dinámicos: si un campo de búsqueda está vacío, se ignora ese criterio.
La primera versión usa una función auxiliar LAMBDA dentro de LET que devuelve 1 cuando el campo de búsqueda está vacío (para no filtrar por ese criterio) o evalúa HALLAR cuando hay un valor:
``
=LET(
f, LAMBDA(_value,_rango, SI(_value="", 1, ESNUMERO(HALLAR(_value, _rango)))),
_mFiltrada, FILTRAR(tblProductoServicio,
f(B2, tblProductoServicio[c_ClaveProdServ])
f(B3, tblProductoServicio[Descripcion])
f(B4, tblProductoServicio[Palabras_similares])),
_result, SI.ERROR(
EXCLUIR(_mFiltrada,,-2),
SI.ERROR(LET(
CveProducto, SI(B2="", SECUENCIA(CONTARA(tblProductoServicio[c_ClaveProdServ])),
tblProductoServicio[c_ClaveProdServ]=B2),
Descripcion, ESNUMERO(HALLAR(B3, tblProductoServicio[Descripcion])),
Similar, ESNUMERO(HALLAR(B4, tblProductoServicio[Palabras_similares])),
FILTRAR(tblProductoServicio[[c_ClaveProdServ]:[Material Peligroso]],
CveProductoDescripcionSimilar)),
"No hay registros")),
_result)
`
Tras iterar, Hector refina la fórmula a una versión más legible, añadiendo una validación para el caso en que todos los campos de búsqueda estén vacíos (devuelve la tabla completa):
`
=LET(
f, LAMBDA(_value, _rango, SI(_value = "", 1, ESNUMERO(HALLAR(_value, _rango)))),
todosVacíos, Y(B2 = "", B3 = "", B4 = ""),
_mFiltrada, SI(todosVacíos,
tblProductoServicio,
FILTRAR(tblProductoServicio,
f(B2, tblProductoServicio[c_ClaveProdServ])
f(B3, tblProductoServicio[Descripcion])
f(B4, tblProductoServicio[Palabras_similares]))),
_resultado, SI.ERROR(EXCLUIR(_mFiltrada,,-2), "No hay registros"),
_resultado)
``
Un patrón muy útil para crear buscadores interactivos en Excel sin macros.
El problema: un buscador con filtros opcionales
Hector quería montar en Excel un buscador de productos que filtrara por varios criterios a la vez —clave, descripción y palabras similares— pero con una condición práctica: si dejas un campo de búsqueda en blanco, ese criterio debe ignorarse, no descartar todas las filas. Es el comportamiento natural de cualquier formulario de búsqueda, y conseguirlo con fórmulas tiene una trampa: HALLAR sobre un texto vacío encuentra "" en cualquier celda, así que un criterio en blanco, en vez de no filtrar, lo "aprueba todo" de forma engañosa.
La idea central: una LAMBDA que decide si filtrar
La pieza clave es una función auxiliar f que encapsula la regla "si el campo está vacío, no filtres":
=LET(
f; LAMBDA(_value; _rango; SI(_value=""; 1; ESNUMERO(HALLAR(_value; _rango))));
_mFiltrada; FILTRAR(tblProductoServicio;
f(B2; tblProductoServicio[c_ClaveProdServ]) *
f(B3; tblProductoServicio[Descripcion]) *
f(B4; tblProductoServicio[Palabras_similares]));
EXCLUIR(_mFiltrada;; -2)
)Cuando el campo _value está vacío, f devuelve 1 (verdadero para toda la columna: no filtra). Cuando tiene contenido, evalúa ESNUMERO(HALLAR(...)), que da verdadero solo en las filas donde el texto aparece. Al multiplicar los tres resultados se logra un Y lógico entre los criterios activos: una fila sobrevive solo si cumple todos los que están rellenos. EXCLUIR(...;; -2) recorta las últimas columnas auxiliares del resultado.
Segundo refinamiento: mostrar todo si no hay nada escrito
Hector afinó la fórmula para cubrir el caso extremo —todos los campos vacíos— devolviendo la tabla completa en lugar de un resultado ambiguo:
=LET(
f; LAMBDA(_value; _rango; SI(_value=""; 1; ESNUMERO(HALLAR(_value; _rango))));
todosVacios; Y(B2=""; B3=""; B4="");
_mFiltrada; SI(todosVacios;
tblProductoServicio;
FILTRAR(tblProductoServicio;
f(B2; tblProductoServicio[c_ClaveProdServ]) *
f(B3; tblProductoServicio[Descripcion]) *
f(B4; tblProductoServicio[Palabras_similares])));
SI.ERROR(EXCLUIR(_mFiltrada;; -2); "No hay registros")
)El indicador todosVacios con Y(...) comprueba si los tres campos están en blanco; si es así, se muestra la tabla entera. Y SI.ERROR envuelve el resultado para que, cuando ninguna fila cumpla, aparezca un mensaje claro en vez de un error.
Por qué es un patrón reutilizable
Lo potente de esta solución es que la LAMBDA f es genérica: sirve para cualquier número de criterios opcionales. Añadir un cuarto filtro es tan simple como multiplicar por f(B5; tblProductoServicio[OtroCampo]). Toda la lógica de "ignorar vacíos" vive en un único sitio, y el filtro final se construye multiplicando condiciones, que es la forma canónica de combinar máscaras booleanas en Excel moderno.
Funciones clave
LAMBDA: encapsula la regla "vacío = no filtrar" en una función reutilizable.FILTRAR: aplica la máscara booleana resultante de multiplicar los criterios.ESNUMERO+HALLAR: comprueban si el texto buscado aparece en cada campo.LETySI.ERROR: ordenan la fórmula y controlan el caso "sin resultados".
Conclusión
Un buscador multicriterio con campos opcionales no necesita macros ni tablas dinámicas: basta una LAMBDA que neutralice los criterios vacíos y una multiplicación de condiciones dentro de FILTRAR. Es un patrón que puedes copiar tal cual para cualquier formulario interactivo. Ideas así se cuecen a diario en la comunidad de InflueXcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- Estructurar correctamente LAMBDA con LET y parámetros opcionales CasoNuevo reto de Excel resuelto por la comunidad: un miembro está creando una función LAMBDA personalizada para calcular potencia de bombeo (fó
- Reducir un número a un dígito con LAMBDA recursiva y secuencia intermedia CasoJoan Recasens plantea un reto matemático: reducir un número a un solo dígito sumando sus cifras de forma recursiva, y además guardar toda la
- Distribución equitativa con LAMBDA, REDUCE y ALEATORIO CasoHector plantea la necesidad de repartir un conjunto de líneas (tareas, actividades) entre varios grupos de forma equitativa y aleatoria. Ide
- Convertir numeros a letras con LAMBDA y LET en Excel CasoOscar plantea una necesidad muy comun en entornos contables y administrativos: convertir cantidades numericas a su representacion en texto (
- Filtrar una tabla por una lista de valores: una LAMBDA propia y su inversa TutorialTe pasan una lista de 30 números de albarán y hay que sacar esas filas de una tabla de miles. Con el autofiltro es marcar casillas una a una
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- Filtrar datos por código parcial y crear listas desplegables dependientes CasoRosario pone en práctica las enseñanzas de la comunidad pero se queda atascada: tiene una tabla con códigos jerárquicos (1.01, 1.02, 2.01, 2
- Monta en Excel tu dashboard personal de LinkedIn TutorialLinkedIn te deja exportar tus propios datos, pero lo que te devuelve es un puñado de CSV sin ningún cuadro de mando encima. Este tutorial mo
- Distribuir importes en tramos dinámicos con funciones matriciales TutorialAnte una columna de importes, lo primero que hace falta es entender cómo se distribuyen: cuántos hay en cada franja y cuánto suman. Es el hi