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.

Más contenido de Excel en InflueXcel