Evitar 1/1/1900 al apilar tablas con fechas vacías usando APILARV
Fernando tiene varias tablas auxiliares que combina con APILARV en una tabla resumen. El problema: cuando un campo de fecha está vacío, aparece una fecha de enero de 1900, la que todo el mundo llama «el 1/1/1900». Excel guarda las fechas como números, un vacío llega a APILARV como 0, y el 0 con formato de fecha se ve como 00/01/1900: el día anterior al 1 de enero de 1900.
Solución rápida con SI (Leo): envuelve el resultado de APILARV en SI para sustituir los ceros por vacío:
``
=LET(
apil; APILARV(tabla1; tabla2; tabla3);
SI(apil = 0; ""; apil)
)
`
La comparación con cero va escrita a propósito: así los textos (conceptos, nombres) pasan intactos. Y ojo, que también vacía los importes que valen cero de verdad; si los hay, aplica el SI solo a la columna de fecha.
Pero Fernando tiene un segundo problema: ¿qué pasa cuando una tabla auxiliar está completamente vacía (sin datos ese mes)? APILARV falla si intentas apilar un rango sin filas.
Solución dinámica con REDUCE + INDIRECTO (Perú): recorre los nombres de las tablas con REDUCE, comprueba si cada una tiene datos, y solo apila las que contengan filas:
`
=LET(
nombres; {"tabla1"; "tabla2"; "tabla3"};
EXCLUIR(
REDUCE(0; nombres; LAMBDA(a; n;
SI(CONTARA(INDIRECTO(n)) > 0;
APILARV(a; TOMAR(INDIRECTO(n); -CONTARA(INDIRECTO(n&"[campo]"))));
a
)
)); 1
)
)
`
Joan Recasens aporta un truco de formato como alternativa cosmética: el formato personalizado dd/mm/aaaa;;; oculta visualmente los ceros sin cambiar la fórmula.
Nota (corregido el 26/9/2026): en el hilo la fórmula salió como SI(apil; apil; ""). Funciona mientras todas las columnas sean números o fechas, pero en cuanto hay una de texto la llena de #¡VALOR!, porque SI no sabe si un texto es verdadero o falso. Comparar con cero, SI(apil = 0; ""; apil)`, lo evita. Comprobado en Excel.
Apilas varias tablas auxiliares con APILARV para montar un resumen y, donde debería haber una fecha vacía, aparece una de enero de 1900: la que todo el mundo llama el 1/1/1900. Fernando llevó el caso a la comunidad y la conversación acabó resolviendo dos problemas distintos: el cosmético y el estructural.
Por qué aparece 1/1/1900
Excel almacena las fechas como números: el día 1 es el 1 de enero de 1900. Cuando APILARV toma una celda vacía de un campo de fecha, la interpreta como cero, y ese cero formateado como fecha se muestra como 00/01/1900: un «día cero» de enero, el anterior al 1, que casi todo el mundo lee como el 1 de enero.
No es un fallo de APILARV: es la consecuencia natural de que un hueco valga cero y de que el formato de la columna sea de fecha.
Solución rápida: convertir los ceros en vacío
Leo ataca el síntoma con un SI que envuelve el resultado completo:
=LET(
apil; APILARV(tabla1; tabla2; tabla3);
SI(apil = 0; ""; apil)
)La comparación con cero va escrita a propósito. En el hilo salió la versión corta, SI(apil; apil; ""), que aprovecha que un número vale falso cuando es cero. Pero en cuanto una de las tablas tiene una columna de texto (un concepto, un nombre), esa columna se llena de #¡VALOR!, porque SI no sabe si un texto es verdadero o falso. Comparar con cero no tiene ese problema: los textos pasan intactos.
Ojo con una consecuencia: esto también convierte en vacío cualquier importe que valga cero legítimamente. Si tu tabla mezcla fechas y números donde el cero es un valor válido, aplica el SI solo a las columnas de fecha en lugar de a la matriz entera.
El segundo problema: tablas completamente vacías
Fernando descubre entonces un obstáculo mayor. Si una de las tablas auxiliares no tiene ninguna fila (ese mes no hubo movimientos), APILARV falla directamente. No hay nada que apilar y la fórmula entera se cae.
Esto ya no es cosmético: rompe el resumen.
Solución dinámica: REDUCE con INDIRECTO
Perú propone recorrer los nombres de las tablas y apilar solo las que tengan datos:
=LET(
nombres; {"tabla1"; "tabla2"; "tabla3"};
EXCLUIR(
REDUCE(0; nombres; LAMBDA(a; n;
SI(CONTARA(INDIRECTO(n)) > 0;
APILARV(a; TOMAR(INDIRECTO(n); -CONTARA(INDIRECTO(n & "[campo]"))));
a
)
)); 1
)
)Cómo funciona:
- La constante matricial
nombresguarda los nombres de las tablas como texto REDUCElos recorre arrastrando un acumuladoraque arranca en 0INDIRECTO(n)convierte cada nombre de texto en una referencia real a esa tablaCONTARA(INDIRECTO(n)) > 0comprueba si la tabla tiene contenido- Si lo tiene,
APILARVla añade al acumulado; si no, devuelve el acumulado sin tocar y sigue TOMAR(...; -CONTARA(...))recorta la tabla a sus últimas filas realmente rellenasEXCLUIR(...; 1)elimina la primera fila, que es el 0 inicial del acumulador
La gracia del enfoque es que la lista de tablas está en la propia fórmula como texto. Añadir una tabla nueva al resumen es añadir su nombre a la constante matricial, sin tocar la lógica.
INDIRECTO tiene fama de lenta y de romperse al mover cosas, y es merecida. Pero en este escenario concreto (una lista de nombres que hay que resolver en tiempo de cálculo) es la herramienta que hace posible la iteración.
La alternativa cosmética: formato personalizado
Joan Recasens aporta la solución más barata de todas para el problema original, sin tocar una sola fórmula. Aplica a las celdas este formato personalizado:
dd/mm/aaaa;;;Los tres puntos y coma finales dividen el formato en cuatro secciones: positivos, negativos, ceros y texto. Al dejar vacías las tres últimas, los ceros no se muestran.
Es puramente visual: el valor sigue siendo cero y seguirá contando en cualquier fórmula que lo referencie. Para un informe destinado a imprimirse o presentarse, cumple perfectamente. Para datos que van a alimentar otros cálculos, mejor arreglarlo en la fórmula.
Funciones clave
APILARV— apila tablas verticalmente; falla si una está vacíaLET— nombra el resultado apilado para no repetirloREDUCE— recorre la lista de tablas decidiendo cuáles apilarINDIRECTO— convierte un nombre de tabla en texto en una referencia usableCONTARA— detecta si una tabla tiene contenidoTOMAR— recorta a las últimas filas con datosEXCLUIR— quita el valor inicial del acumulador
Conclusión
El caso enseña a separar dos preguntas que se confunden a menudo: qué valor tiene una celda y cómo se muestra. Un formato personalizado arregla lo segundo en diez segundos; solo la fórmula arregla lo primero.
En la comunidad de InflueXcel este tipo de matices salen solos, porque cada uno aporta la solución desde su forma de trabajar.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Cálculos iterativos con REDUCE y APILARV en Excel CasoLa comunidad aborda un caso sobre cómo trabajar con bucles iterativos en Excel usando funciones modernas. Un miembro necesita realizar cálcu
- Distribución equitativa con LAMBDA, REDUCE y ALEATORIO CasoHéctor plantea la necesidad de repartir un conjunto de líneas (tareas, actividades) entre varios grupos de forma equitativa y aleatoria. Ide
- Descomposición de Cholesky con matrices dinámicas: de VBA a LAMBDA+REDUCE CasoJuan Pablo lanza un reto al grupo: tiene una descomposición de Cholesky resuelta con VBA y quiere saber si se puede hacer con matrices dinám
- Combinaciones de N elementos tomados de K en K: fórmulas con REDUCE y LAMBDA CasoSebas comparte un archivo con un listado de 11 elementos y necesita generar todas las combinaciones posibles tomados de 2 en 2 (sin repetici
- 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á
- 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
- Cálculo iterativo masivo: REDUCE + APILARV vs BISECCIÓN recursiva vs cálculo directo CasoNuevo caso que combina logística portuaria con fórmulas avanzadas de Excel. Un miembro necesita calcular la distribución de días de almacena
- REDUCE de CERO a PRO TutorialCon REDUCE podrás transformar listas simples en análisis completos y automatizar cálculos que antes parecían imposibles. Si trabajas con dat
- SUMAR.SI.CONJUNTO en Excel: las 5 dudas más buscadas, resueltas (y por qué no acepta ELEGIRCOLS) TutorialLe pregunté a Copilot cuáles son las 5 dudas que más se buscan sobre la función SUMAR.SI.CONJUNTO y las resuelvo una a una en Excel, cada un
- Calendario mensual dinámico con una sola fórmula CasoUn miembro de la comunidad preguntó cómo generar un calendario mensual completo en Excel usando únicamente fórmulas, sin VBA ni macros. El c