Filtrado multi-checkbox con comparación perpendicular

Joan Recasens plantea un problema muy práctico en plena Navidad: tiene una lista de registros y varios checkboxes, y necesita filtrar mostrando todos los registros que coincidan con al menos uno de los checkboxes marcados. El reto es que puede haber hasta 50 checkboxes dinámicos, así que montar un FILTRAR con cada condición a mano no es viable.

El fichero adjunto muestra la estructura: checkboxes en B5:B8 (TRUE/FALSE) vinculados a letras en C5:C8, y una tabla de datos en F:G con ID y Letra. Al marcar "b" y "c", deben aparecer solo los registros cuya letra sea "b" o "c".

Iván (AprendizDeExcel) sugiere inmediatamente la técnica de comparación perpendicular con ELEGIRFILAS, y Leo desarrolla la fórmula completa:

``
=FILTRAR(
F5:G14;
BYROW(
G5:G14 = ENFILA(SI(B5:B8; C5:C8; z); 3);
O
)
)
`

La magia está en varios niveles:

1. SI(B5:B8; C5:C8; z) — devuelve la letra si el checkbox está marcado, y si no, una variable indefinida z que genera un error #NOMBRE?. Esto es deliberado.

2. ENFILA(...; 3) — convierte el resultado en una fila horizontal, y el parámetro 3 descarta los errores. Solo quedan las letras de los checkboxes marcados.

3. G5:G14 = ENFILA(...) — aquí ocurre la comparación perpendicular: Excel compara cada celda de la columna (vector vertical) contra cada valor de la fila (vector horizontal), generando una matriz 2D de booleanos con todas las combinaciones.

4. BYROW(...; O) — colapsa cada fila de la matriz con la función O (OR en español), devolviendo TRUE si hay al menos una coincidencia.

El fichero también incluye una variante con ELEGIRFILAS que usa el mismo principio perpendicular pero construye los índices de fila con SECUENCIA y los colapsa con ENCOL:

`
=LET(
_Filtro; ENFILA(FILTRAR(C5:C8; B5:B8));
ELEGIRFILAS(
F4:G14;
ENCOL(
SI(G4:G14 = _Filtro; SECUENCIA(FILAS(F4:F14)); z);
3
)
)
)
``

Iván confirma que la solución de Leo es "infinitamente más rápida" con muchos datos comparada con un filtro convencional, gracias a que la comparación perpendicular resuelve todas las combinaciones en una sola operación matricial en lugar de encadenar condiciones.

Técnica muy potente para cualquier escenario de filtrado dinámico con múltiples criterios variables.

El problema: 50 checkboxes y un solo FILTRAR

Joan Recasens planteó el caso en plena Navidad, y es de los que se entienden al instante porque todo el mundo ha querido montar algo así alguna vez.

Tiene una lista de registros y una columna de checkboxes. Quiere que la tabla muestre todos los registros que coincidan con al menos uno de los checkboxes marcados. Marcas "b" y "c", aparecen los registros de "b" y los de "c". Desmarcas "b", desaparecen los suyos.

Con tres o cuatro opciones lo resolverías escribiendo las condiciones a mano dentro de FILTRAR, sumando los criterios con el operador de suma. El problema es que pueden ser hasta 50 checkboxes, y además dinámicos: hoy hay doce, mañana veinte. Escribir cincuenta condiciones no es una solución, es una condena a mantenimiento perpetuo.

La estructura del fichero es sencilla: los checkboxes están en una columna devolviendo verdadero o falso, con su letra asociada al lado, y la tabla de datos tiene un identificador y una letra por fila.

La solución de Leo: comparación perpendicular

Iván (AprendizDeExcel) apuntó la técnica en cuanto leyó el problema, y Leo la desarrolló entera:

`` =FILTRAR( F5:G14; BYROW( G5:G14 = ENFILA(SI(B5:B8; C5:C8; z); 3); O ) ) ``

Cuatro líneas para cincuenta criterios. Vamos por partes, porque cada nivel tiene su gracia.

1. Generar errores a propósito

SI(B5:B8; C5:C8; z) recorre los checkboxes: si está marcado devuelve su letra, y si no... devuelve z. Que no es una variable ni un texto, es un nombre que no existe. Excel intenta resolverlo, no lo encuentra y genera un error de nombre.

Provocar un error a propósito parece raro hasta que ves el paso siguiente.

2. ENFILA con el parámetro 3 barre los errores

ENFILA(...; 3) hace dos cosas. Convierte el resultado en una fila horizontal y, con ese tercer argumento, descarta los errores al aplanar.

Ahí está el truco completo: los checkboxes desmarcados generaron errores, y ENFILA los tira. Lo que queda es una fila limpia con solo las letras de los checkboxes marcados, del tamaño exacto que haga falta. Sin huecos, sin ceros, sin cadenas vacías que luego habría que filtrar.

Es un filtrado sin FILTRAR, usando el sistema de errores como mecanismo de descarte.

3. La comparación perpendicular

Aquí ocurre lo importante: G5:G14 = ENFILA(...).

A la izquierda hay un vector vertical (la columna de letras de la tabla). A la derecha, un vector horizontal (las letras marcadas). Cuando Excel compara una columna con una fila, no las empareja uno a uno: genera una matriz bidimensional con todas las combinaciones posibles.

Si tienes 10 registros y 3 checkboxes marcados, sale una matriz de 10 por 3 llena de verdaderos y falsos, donde cada celda responde a "¿la letra de este registro es igual a esta opción marcada?".

Todas las comparaciones, en una sola operación.

4. BYROW con O colapsa la matriz

BYROW(...; O) recorre esa matriz fila a fila y aplica la función O a cada una. Devuelve verdadero si alguna de las comparaciones de esa fila acertó.

El resultado es una columna de valores lógicos, uno por registro, que es exactamente lo que FILTRAR necesita como segundo argumento.

Y lo mejor: si mañana hay 50 checkboxes, la fórmula no cambia. Solo cambia el ancho de la matriz intermedia.

La variante con ELEGIRFILAS

El fichero incluye una segunda versión que aplica el mismo principio perpendicular pero trabajando con índices de fila en lugar de con una máscara lógica:

`` =LET( _Filtro; ENFILA(FILTRAR(C5:C8; B5:B8)); ELEGIRFILAS( F4:G14; ENCOL( SI(G4:G14 = _Filtro; SECUENCIA(FILAS(F4:F14)); z); 3 ) ) ) ``

Aquí _Filtro obtiene las letras marcadas con un FILTRAR normal. Luego, en vez de colapsar la matriz de comparación a valores lógicos, se sustituye cada coincidencia por el número de fila correspondiente (generado con SECUENCIA) y cada no coincidencia por el error del nombre inexistente.

ENCOL con el parámetro 3 aplana y descarta los errores otra vez, dejando una lista limpia de índices de fila. ELEGIRFILAS los usa para extraer los registros.

Mismo resultado, camino distinto. Útil cuando lo que necesitas son las posiciones y no solo las filas.

El apunte de rendimiento

Iván confirmó algo que merece la pena subrayar: esta solución es "infinitamente más rápida" que un filtro convencional cuando hay muchos datos.

El motivo es que la comparación perpendicular resuelve todas las combinaciones en una única operación matricial, mientras que encadenar condiciones obliga a Excel a evaluar cada criterio por separado sobre toda la columna y luego combinarlos. Con 50 criterios y miles de filas, la diferencia se nota.

Funciones clave

  • Comparación perpendicular — cruzar un vector vertical con uno horizontal genera una matriz con todas las combinaciones; la base de todo filtrado multicriterio moderno.
  • BYROW con O — colapsa esa matriz a una columna de valores lógicos, uno por registro.
  • ENFILA y ENCOL con el parámetro de omisión — aplanan una matriz descartando errores; el mecanismo que elimina las opciones no marcadas.
  • Errores provocados — devolver un nombre inexistente marca los elementos a descartar para que el aplanado los tire.
  • FILTRAR — recibe la máscara ya calculada y se limita a aplicarla.
  • ELEGIRFILAS con SECUENCIA — la alternativa que trabaja con índices en lugar de máscaras.

Conclusión

Este caso es la mejor introducción posible a la comparación perpendicular, porque el problema es cotidiano y la solución no tiene sustituto razonable: cincuenta condiciones escritas a mano no son mantenibles, y ninguna función de Excel hace esto de forma nativa.

El patrón se generaliza a cualquier filtrado con criterios variables: filtrar pedidos por varios clientes seleccionados, productos por varias categorías, empleados por varios departamentos. Siempre es lo mismo, cambia lo que hay a cada lado del signo igual.

En la comunidad de InflueXcel estas técnicas circulan justo así: alguien plantea un problema práctico, otro nombra la técnica y un tercero escribe la fórmula. En un par de horas hay dos versiones funcionando y una nota sobre cuál rinde mejor.

Más casos con estas funciones

Más contenido de Excel en InflueXcel