Eliminar filas en blanco de una tabla con FILTRAR y BYROW
Óscar plantea una duda práctica: tiene una tabla en Excel con filas que contienen información y otras vacías, y necesita extraer solo las filas con datos válidos, eliminando las que están en blanco.
Hugo apunta rápidamente la dirección correcta: FILTRAR. A partir de ahí, Ned desarrolla la solución completa combinando FILTRAR con BYROW para evaluar cada fila de la tabla:
``
=FILTRAR(Tabla1,BYROW(Tabla1<>"",LAMBDA(r,O(r))))
`
La lógica es sencilla: Tabla1<>"" genera una matriz de verdaderos/falsos para cada celda, BYROW recorre fila por fila aplicando la función O() (que devuelve VERDADERO si al menos una celda de la fila tiene contenido), y FILTRAR se queda solo con las filas que pasan el filtro.
Ned comparte además una versión más compacta usando la eta-lambda, que simplifica la sintaxis eliminando la necesidad de declarar el parámetro explícitamente:
`
=FILTRAR(Tabla1,BYROW(Tabla1<>"",O))
`
Esta segunda forma aprovecha que O ya es una función que acepta un array, por lo que se puede pasar directamente como argumento de BYROW sin envolverla en LAMBDA`.
Una tabla con filas vacías intercaladas es un clásico de los ficheros que vienen de otro sistema: exportas, y entre bloque y bloque aparecen filas completamente en blanco. Si luego quieres alimentar un gráfico, una tabla dinámica o una fórmula de agregación, esas filas molestan. Óscar planteó exactamente ese problema en la comunidad, y la solución salió en dos pasos entre varios miembros.
La dirección correcta: FILTRAR
Hugo apuntó lo primero que hay que tener claro: esto no es un trabajo de borrar filas a mano ni de ordenar la tabla para juntar los huecos. Es un trabajo de FILTRAR. La tabla original se queda como está, y en otra zona de la hoja obtienes una copia limpia que se actualiza sola cada vez que llegan datos nuevos.
El único reto es construir el criterio: ¿cómo le digo a FILTRAR que una fila entera tiene algo escrito?
La fórmula completa
Ned desarrolló la solución combinando FILTRAR con BYROW:
=FILTRAR(Tabla1; BYROW(NO(Tabla1 = ""); LAMBDA(r; O(r))))Vamos por partes, porque cada trozo hace algo muy concreto:
Tabla1 = ""compara cada celda de la tabla con el texto vacío y devuelve una matriz de VERDADERO y FALSO del mismo tamaño que la tabla.NO(...)invierte esa matriz: ahora hay un VERDADERO en cada celda que sí tiene contenido.BYROW(...; LAMBDA(r; O(r)))recorre esa matriz fila por fila.Odevuelve VERDADERO si al menos una celda de la fila tiene algo. El resultado es un vector con un valor por fila.FILTRARrecibe ese vector y se queda solo con las filas marcadas como VERDADERO.
El corazón de todo es el paso 3: una fila está en blanco cuando ninguna de sus celdas tiene contenido, así que basta con preguntar si hay alguna. Por eso se usa O y no Y.
La versión compacta con eta-lambda
Ned compartió además una forma más corta de escribir lo mismo:
=FILTRAR(Tabla1; BYROW(NO(Tabla1 = ""); O))Aquí O se pasa directamente como función, sin envolverla en LAMBDA. Esto se conoce como eta-lambda o eta-reducción, y funciona siempre que la función que quieres aplicar ya acepte los argumentos tal y como se los va a entregar BYROW. Como O admite un array y devuelve un único valor lógico, encaja sin adaptador.
Es un patrón que conviene tener en la cabeza porque se repite mucho: cuando veas LAMBDA(r; FUNCION(r)), casi siempre puedes escribir FUNCION a secas.
Variantes útiles
- Filas completas, no solo una columna: si el criterio afecta a una sola columna,
BYROWsobra; la comparación ya devuelve un vector válido paraFILTRAR. - Quedarte con las filas totalmente rellenas: cambia
OporYy solo pasarán las filas sin ningún hueco. - Ignorar espacios sueltos: si las celdas "vacías" contienen espacios, envuelve la tabla en
ESPACIOSantes de comparar, o el criterio las dará por rellenas. - Evitar el error de resultado vacío:
FILTRARadmite un tercer argumento con el valor a devolver cuando ninguna fila cumple el criterio; muy recomendable si la tabla puede llegar vacía.
Funciones clave
FILTRAR: devuelve las filas que cumplen un criterio; el criterio debe ser un vector de una sola columna con tantas filas como el rango.BYROW: colapsa cada fila de una matriz a un único valor aplicando la función que le indiques.OyY: agregadores lógicos, "al menos una" y "todas" respectivamente.NO: invierte una matriz de valores lógicos, la forma más limpia de expresar "distinto de vacío".
Conclusión
Con una sola fórmula obtienes una copia siempre limpia de la tabla, sin macros y sin tocar los datos originales. Y de paso se aprende el patrón general: comparar toda la matriz, colapsar por filas con BYROW y dejar que FILTRAR haga el resto. Ese esquema sirve para muchísimo más que eliminar filas en blanco.
Como casi todo lo que se publica aquí, salió de una duda concreta planteada en la comunidad de InflueXcel y de las respuestas de varios miembros afinando la misma idea.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Filtrar con múltiples condiciones usando matrices booleanas y BYROW CasoInteresante problema planteado por un miembro sobre cómo filtrar datos que cumplan varias condiciones simultáneas usando operaciones matrici
- Buscar múltiples palabras simultáneamente con FILTRAR y BYROW CasoJuan consigue filtrar una tabla buscando una palabra con HALLAR, pero cuando intenta buscar dos palabras a la vez pasando un rango (K16:L16)
- Filtrar filas con todos los valores a cero: 4 enfoques con FILTRAR y BYROW CasoJuan tiene una tabla grande donde muchas filas contienen solo ceros y necesita filtrarlas para quedarse solo con las que tienen datos reales
- Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA CasoHéctor comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clav
- Cuando BYROW sobra: FILTRAR por una sola columna CasoNuevo reto de Excel resuelto por la comunidad con un apunte que muchos usuarios agradecen. Óscar comparte que ha conseguido filtrar una tabl
- 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 window en Excel: el total del grupo en cada fila con LAMBDA y BYROW TutorialEn SQL se llaman funciones window: columnas que, para cada fila, traen un agregado calculado sobre un grupo mayor. El total de ese cliente a
- Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX CasoInteresante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 text
- Colorear la fila entera según el técnico asignado: la referencia mixta que casi nadie aplica bien CasoEsta semana surgió una duda que parece de principiante y en realidad esconde el concepto peor entendido del formato condicional. Johann Frar
- Multiplicar por coeficientes de escenario con INDICE, COINCIDIRX y SI.CONJUNTO CasoUn miembro de la comunidad tiene una tabla de conceptos con cantidades, precios y un campo "Escenario" (1, 2 o 3). Aparte, tiene una tabla d