Saltar al contenido

lección 7

Fechas y formatos: una fecha es un número disfrazado

Por qué puedes restar dos fechas y sale un número de días, por qué media columna de fechas no se suma nunca, y por qué Excel sigue creyendo que 1900 fue bisiesto cuarenta años después de saber que no lo fue.

40 min

Escribe 15/01/2026 en una celda, y luego cámbiale el formato a Número. No sale un error, ni sale el texto: sale 46037.

Ese número es la fecha. No es una representación de la fecha ni un código interno que no te incumbe: es literalmente lo que hay guardado en la celda. Lo que ves normalmente —el 15/01/2026— es una máscara que la hoja pinta encima. Y entender esto de verdad, no de memoria, resuelve la mayoría de los problemas que dan las fechas en una hoja de cálculo.

### El número de serie

La hoja cuenta los días transcurridos desde una fecha de origen. El 1 es el 1 de enero de 1900, el 2 es el 2 de enero, y así hasta hoy. Las horas son la parte decimal: medio día es 0,5, así que las 12:00 del 15 de enero de 2026 son 46037,5.

1=FECHA(2024;1;1) -> 45292
2=FECHA(2026;8;17) -> 46251
3
4=46251-45292 -> 959 dias entre las dos fechas

La misma información en las dos caras de la moneda

### El formato no cambia el valor

Ésta es la idea que hay que separar mentalmente y casi nadie separa. Una celda tiene un VALOR y tiene un FORMATO, y son dos cosas independientes. El formato decide cómo se dibuja; el valor es lo que entra en los cálculos.

Cambiar el formato de una celda de fecha a `dd/mm/aaaa`, a `aaaa-mm-dd` o a `mmmm de aaaa` no toca el valor: en las tres sigue habiendo un 46037. Y por eso mismo cambiar el formato nunca arregla un dato mal guardado. Si una celda contiene el texto «15/01/2026», ponerle formato de fecha no la convierte en fecha; sigue siendo texto, solo que ahora con un formato de fecha que no se aplica a nada. Es exactamente el mismo mecanismo que el del código postal que pierde el cero de la lección de limpieza: el formato es maquillaje, no cirugía.

1=TEXTO(A2;"dd/mm/aaaa") -> "15/01/2026" texto, ya no se puede restar
2=TEXTO(A2;"aaaa-mm-dd") -> "2026-01-15" útil para ordenar alfabéticamente
3=TEXTO(A2;"aaaa-mm") -> "2026-01" para agrupar por mes, y se ordena solo

TEXTO va en el otro sentido: convierte la fecha en texto de verdad

El formato aaaa-mm-dd tiene una propiedad que lo hace especial y que merece la pena conocer: es el único en el que el orden alfabético coincide con el orden cronológico. Por eso es el estándar internacional (ISO 8601) y por eso los nombres de fichero que empiezan por la fecha en ese formato se ordenan solos. Si alguna vez tienes que guardar fechas como texto —en un nombre de archivo, en un identificador—, usa ése y no el español.

### El problema de verdad: el texto que parece una fecha

Todo lo anterior es teoría agradable. Esto es lo que te va a costar una tarde.

Cuando importas un CSV, cuando pegas de una página web o cuando alguien te manda un fichero exportado de un sistema antiguo, las fechas llegan muy a menudo como TEXTO. En pantalla no se distinguen: dicen 15/01/2026 igual que una fecha de verdad. Pero no se pueden restar, no se ordenan bien, no las coge una tabla dinámica y no entran en un SUMAR.SI por meses. Y lo peor: no dan error. Simplemente no cuentan.

Hay una forma de detectarlo en un segundo y sin escribir nada, y es el truco más rentable de esta lección: mira la alineación. Una hoja de cálculo alinea los números a la derecha y el texto a la izquierda, por defecto. Las fechas son números, así que una columna de fechas de verdad está pegada a la derecha. Si tus fechas están pegadas a la izquierda, son texto. Si unas están a un lado y otras al otro, tienes la columna medio convertida, que es el peor de los tres casos.

Dos columnas que se ven igual y se comportan de forma opuesta

La alineación es la pista rápida, pero si quieres una respuesta que no admita discusión, usa ESNUMERO. Escribe =ESNUMERO(A2) al lado: como una fecha es un número de serie, devuelve VERDADERO sobre una fecha de verdad y FALSO sobre un texto con forma de fecha. Y arrastrado por toda la columna te dice EXACTAMENTE qué filas están mal, que es lo que necesitas cuando son cuatrocientas y solo unas cuantas se convirtieron. Contar los FALSO con =CONTAR.SI(rango;FALSO) te da el tamaño del problema en un número.

Y para arreglarlo, la función es FECHANUMERO: coge un texto con forma de fecha y devuelve el número de serie correspondiente. Se pone en una columna nueva al lado, se arrastra, y esa columna nueva sí son fechas.

1=FECHANUMERO(B2) "15/01/2026" (texto) -> 46037 (fecha)
2
3=FECHANUMERO(B2) "el martes" -> #¡VALOR!

La conversión, y lo que pasa cuando no se puede

La otra cara de la moneda es igual de peligrosa y pasa a diario: que la hoja convierta en fecha algo que NO lo era. Escribe un código de producto como 1-3 y la hoja te pone 1 de marzo. Escribe 3/4 y te pone una fecha en vez de una fracción. Esto ha llegado a ser un problema en genética: los nombres de varios genes humanos se convertían solos en fechas al abrir un CSV, y en 2020 el comité que los nombra acabó RENOMBRANDO los genes porque era más fácil que arreglar la costumbre de la gente. La defensa es la misma que con el código postal: declarar la columna como Texto en el asistente de importación, antes de que la hoja adivine.

### El año 1900, o cuarenta años arrastrando un error a propósito

Ahora la parte que parece una curiosidad y en realidad dice algo importante sobre el software que usas todos los días.

Excel cree que el 29 de febrero de 1900 existió. No existió: 1900 fue divisible por 100 y no por 400, así que no fue bisiesto. Pero si escribes esa fecha en Excel, la acepta sin protestar y le asigna el número de serie 60.

11 de enero de 1900 -> 1
228 de febrero de 1900 -> 59
329 de febrero de 1900 -> 60 <- este dia no existio
41 de marzo de 1900 -> 61

Un día de más en la cuenta, para siempre

Lo interesante es POR QUÉ sigue ahí, y aquí está la crítica de fondo de esta lección. No es un error que a nadie se le haya ocurrido corregir: Microsoft lo sabe, está documentado por escrito y explican que fue deliberado. Lotus 1-2-3, la hoja de cálculo que dominaba el mercado cuando Excel nació —la misma historia que se cuenta en la primera lección de esta sección—, tenía este error. Y para que los ficheros de Lotus se abrieran en Excel dando los mismos números, Excel copió el error.

Eso significa que hay un fallo de cálculo en el producto de software más usado del mundo para trabajar con datos, que se conoce, que está documentado, y que se mantiene a propósito porque romperlo rompería la compatibilidad con ficheros de un competidor que lleva décadas muerto. Es la lección más honesta que da una hoja de cálculo sobre cómo funciona el software de verdad: la compatibilidad hacia atrás gana casi siempre, y las decisiones que tomó alguien en 1983 siguen decidiendo lo que hace tu ordenador hoy.

Hay un segundo sistema de fechas que conviene conocer porque explica un tipo de descuadre desconcertante. El Excel para Mac usaba históricamente 1904 como año de origen en vez de 1900, y ese ajuste todavía existe en las opciones del libro. Si abres un fichero hecho con ese sistema en un Excel configurado con el otro, TODAS las fechas se desplazan cuatro años y un día. Si alguna vez ves una columna de fechas que está entera cuatro años corrida, ya sabes lo que ha pasado y dónde mirar.

Y aquí tienes algo que puedes comprobar tú mismo, porque dice más que el propio bug: la rejilla de esta página NO tiene ese error. Es un motor moderno, no tiene que abrir ficheros de Lotus 1-2-3, así que si le pides el 29 de febrero de 1900 te devuelve el 1 de marzo como haría un calendario correcto: escribe =FECHA(1900;2;29) y verás 61, no 60. Google Sheets hace lo mismo. Es decir: el error solo sobrevive donde sobrevive la compatibilidad, y desaparece en cuanto alguien empieza de cero. Ésa es la regla de fondo, y vale para mucho más que las fechas.

### Las funciones que vas a usar de verdad

  • HOY() — La fecha de hoy, sin hora. Se recalcula sola cada vez que se abre el libro, y eso es a la vez su utilidad y su peligro: un informe con HOY() nunca dice lo mismo dos días seguidos. Para congelar una fecha, escríbela.
  • AHORA() — Fecha y hora. Mismo aviso, multiplicado.
  • FECHA(año;mes;día) — Construye una fecha a partir de tres números. Es la forma segura de escribir una fecha en una fórmula, porque no depende de la configuración regional.
  • AÑO / MES / DIA — Descomponen una fecha. `=MES(A2)` da 1, no «enero».
  • DIAS(final;inicial) — Los días entre dos fechas. Es una resta con nombre, y su ventaja es que deja claro cuál es cuál: el error de signo es el más común con fechas.
  • FECHANUMERO(texto) — Convierte un texto con forma de fecha en fecha de verdad.
  • ESNUMERO(celda) — VERDADERO si hay un número. Como una fecha es un número, es la prueba definitiva de si una celda es fecha o texto.
  • DIASEM(fecha) — El día de la semana, como número. Y aquí hay una trampa que merece su propio párrafo.

La trampa de DIASEM es que por omisión la semana empieza el domingo: devuelve 1 para el domingo y 7 para el sábado. En España la semana empieza el lunes, así que si calculas «fin de semana» con `=SI(DIASEM(A2)>5; ...)` te va a contar el viernes y el sábado en vez del sábado y el domingo. La solución es el segundo argumento: `=DIASEM(A2;2)` numera de lunes a domingo, que es lo que quieres casi siempre. Es un valor por omisión heredado de la convención estadounidense, y es la clase de detalle que hace que un informe esté mal sin que nadie lo note.

### Lo que hace SQL en su lugar

El contraste aquí es más limpio que en ninguna otra lección de la sección. En una base de datos, una fecha tiene TIPO: la columna se declara `DATE` o `TIMESTAMP`, y a partir de ese momento es imposible que una fila guarde un texto ahí. Si intentas insertar «el martes» en una columna DATE, la inserción falla. No entra y luego calla: no entra.

Ahí está la diferencia de fondo con la hoja de cálculo: en la hoja, el tipo es una propiedad de cada celda y la decide quien escribe, así que una columna puede tener 300 fechas y 4 textos y parecer uniforme. En SQL el tipo es una propiedad de la COLUMNA y la decide quien diseña la tabla, una vez, para todas las filas presentes y futuras. Todo el problema del texto que parece una fecha simplemente no puede existir.

Y no hay número de serie que conocer, ni bug de 1900, ni sistema de 1904: se escribe `DATE '2026-01-15'`, se resta con `-` o con `DATE_DIFF` según el motor, y se agrupa por mes con `DATE_TRUNC('month', fecha)`, que es el equivalente limpio del truco de `TEXTO(A2;"aaaa-mm")` que has visto arriba.

### Resumen

  • Una fecha es un número: los días desde el 1 de enero de 1900. Las horas son la parte decimal.
  • Por eso restar dos fechas da días y sumar un número a una fecha da otra fecha, sin funciones especiales.
  • El valor y el formato son independientes. Cambiar el formato no arregla nunca un dato mal guardado.
  • TEXTO va en el otro sentido: crea una cadena nueva que ya no se puede calcular. Sirve para etiquetas y para agrupar por mes.
  • aaaa-mm-dd es el único formato cuyo orden alfabético coincide con el cronológico. Úsalo si tienes que guardar una fecha como texto.
  • El problema real es el texto con forma de fecha. No da error: simplemente no cuenta.
  • La alineación lo delata: las fechas de verdad van a la derecha, el texto a la izquierda. Es el truco más rentable de la lección.
  • FECHANUMERO convierte, y su #¡VALOR! es una virtud: te señala las filas con basura.
  • Cuidado con la conversión al revés: la hoja convierte códigos en fechas sola. Declara la columna como Texto al importar.
  • Excel cree que 1900 fue bisiesto, a propósito, para abrir ficheros de Lotus 1-2-3. La compatibilidad hacia atrás gana casi siempre.
  • DIASEM empieza en domingo por omisión. Usa `=DIASEM(A2;2)` para que la semana empiece el lunes.

Regístrate para guardar tu progreso.

## comentarios

Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.

Inicia sesión para comentar y responder.

cargando comentarios...