Búsqueda multicriterio de productos con LAMBDA para manejar campos vacíos

Héctor Mendoza comparte una fórmula compleja para buscar productos en una tabla (tblProductoServicio) usando hasta 3 criterios opcionales: código de producto, descripción y palabras similares. El problema es que cuando algún criterio está vacío, HALLAR sobre cadena vacía devuelve siempre un número (encuentra "" en cualquier texto), distorsionando los resultados del filtro.

Ned (+51 921 729 887) propone una solución elegante con una LAMBDA auxiliar que maneja los vacíos:

``
=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])
);
ELEGIRCOLS(_mFiltrada; 1; 3)
)
`

La LAMBDA f actúa como un filtro inteligente: si el criterio está vacío, devuelve 1 (verdadero para todo, es decir, no filtra); si tiene valor, usa HALLAR + ESNUMERO para comprobar si el texto aparece en el campo. Al multiplicar los tres resultados (), se consigue un AND lógico entre los criterios activos.

La fórmula evolucionó durante la conversación. Una versión posterior añade el caso de "mostrar todo cuando todos los campos están vacíos":

`
=LET(
f; LAMBDA(_v; _r; SI(_v=""; 1; ESNUMERO(HALLAR(_v; _r))));
todosVacios; Y(B2=""; B3=""; B4="");
_result; SI.ERROR(
FILTRAR(tblProductoServicio;
f(B2; tblProductoServicio[c_ClaveProdServ])
f(B3; tblProductoServicio[Descripcion])
* f(B4; tblProductoServicio[Palabras_similares])
);
"No data"
);
SI(todosVacios; EXCLUIR(tblProductoServicio;; -2); _result)
)
``

Un patrón reutilizable para cualquier formulario de búsqueda con criterios opcionales en Excel.

Más contenido de Excel en InflueXcel