🔝To translate this blog post to your language, select it in the top left Google box.
La vida es un viaje de aprendizaje continuo.
¡El mejor momento de actuar es ahora!
Antonio Machado (1912)
Para conservar el efímero ahora solemos hacer fotos o vídeos con la cámara, intentando capturar el presente, pero es una labor imposible, ya que son fotos o vídeos del pasado al cabo de unos segundos después de tomarlas. Lo mismo pasa con nuestro propio cuerpo, que no se conserva nunca como ahora, ni siquiera a nivel celular, pues las células se regeneran continuamente...
Pregunta lanzada a Microsoft Copilot:
Esa es una pregunta profunda, Pedro. Si te refieres a conservarnos tal como somos ahora —ya sea física, emocional o espiritualmente—, hay algo poético en querer atrapar un momento en el tiempo, ¿no?
A nivel personal, podríamos hablar de hábitos saludables: cuidar el cuerpo con ejercicio y buena alimentación, cultivar la mente con aprendizaje constante, y mantener relaciones significativas. Pero también está la parte intangible: la actitud, la curiosidad, la manera de ver la vida. Eso es lo que realmente nos mantiene “como ahora”, aunque el tiempo siga pasando.
¿Lo estás pensando desde un deseo de inmortalizar algo bonito que estás viviendo? Porque también podría ser eso: aprender a conservar el recuerdo, el espíritu del momento, sin necesidad de que todo se quede congelado. A veces, lo mejor que podemos hacer es atesorarlo y permitir que nos transforme suavemente.
¿Quieres que lo exploremos desde el punto de vista emocional, filosófico o más práctico?
¡¡¡ Más práctico !!!
Cada vez que hacemos referencia al presente, se transforma en el ahora, perdiendo el valor del pasado.
Hasta ahora no se podía guardar la función AHORA() en Excel, pues es una función volátil.
Pero va a haber un antes y un después, pues desde ahora se pueden guardar marcas de tiempo no volátiles con la función AHORA(), sin tener que pegar el tiempo devuelto por la función, sin necesidad de usar macros VBA e incluso sin usar el viejo truco de conservar el ahora con la opción de cálculo iterativo.
Explicación de las funciones volátiles como AHORA():
- Excel TODAY Function: Complete Guide to Current Date Formulas and Real-Time Applications - CodeLucky
Estos son ejemplos de capturas del tiempo devuelto por la función AHORA() dentro de una fórmula no volátil:
He creado 3 tablas, dos de ellas con marcas de tiempo:
- En la hoja 'AHORA' hay una tabla de actividades, con un desplegable de actividades. Al seleccionar una actividad queda guardada la marca de tiempo, con lo que puedo conseguir los timestamps de todas las actividades que registre.
- En la hoja 'MARCAS DE TIEMPO' hay una tabla con mi lista de deseos y una columna de casillas. Al marcar una casilla queda guardada la marca de tiempo, con lo que puedo saber cuándo he conseguido satisfacer cada uno de mis deseos.
- La hoja 'Actividades' contiene una tabla personalizable de actividades.
Hasta ahora hay varias maneras de congelar la función AHORA(), que puedes leer aquí:
En este vídeo se explica cómo crear marcas de tiempo usando el cálculo iterativo:
Era la forma habitual de crear marcas de tiempo, sin usar macros VBA, que yo usaba antes de conocer el siguiente truco hecho sólo con fórmulas.
La siguiente fórmula es volátil, por lo que Excel la recalcula cuando recalcula la hoja o si se pulsa la tecla F9, cambiando su valor al momento del recálculo:
=AHORA()
TRUCO: La siguiente fórmula hace que la función AHORA() se recalcule una sola vez, aunque no lo ponga en la documentación de la función, dejando de ser volátil y devolviendo un valor estático fijo, que no cambia con el tiempo, por lo que sirve como marca de tiempo (timestamp en inglés):
=(@AHORA)()
Esta es la función usada en la celda B2 de la tabla de la hoja 'AHORA' del archivo de ejemplo que puedes descargar más adelante.
La siguiente función está escrita en la celda C2 de la tabla de la hoja 'MARCAS DE TIEMPO':
=SI($B2;(@AHORA)();"")
Cuando se marca una casilla de la columna B, se calcula la marca de tiempo de la columna C.
TRUCO: Lo que no se puede hacer es usar esta fórmula:
=SI([@Marca];(@AHORA)();"")
Pues añadiendo la referencia estructurada a la columna de la tabla se recalcula siempre el ahora...
Como no he encontrado ninguna documentación en el Soporte de Microsoft que explique cómo es que las fórmulas anteriores no recalculan la función AHORA(), le he preguntado a Microsoft Copilot:
Contestación de Microsoft Copilot:
La función AHORA() es volátil por definición; es decir, Excel la recalcula en cada ciclo de recálculo de la hoja para actualizar la fecha y hora actuales. Sin embargo, al escribir la fórmula de esta forma:
=(@AHORA)()
estamos usando dos “trucos” de la nueva sintaxis de Excel:
1. El operador de intersección implícita @: Esto indica a Excel que, aunque la función podría devolver un array, se debe tratar únicamente como un valor escalar. Si bien esto, por sí solo, no cambia la volatilidad, ayuda a que Excel interprete la fórmula dentro de un contexto de función que espera un único valor.
2. La invocación mediante paréntesis adicionales (()) al final: Al agregar estos paréntesis, Excel no trata simplemente a AHORA() como una llamada directa a una función volátil, sino que la evalúa como si fuera una función que está “envuelta” en una especie de función lambda implícita. Este cambio en la forma de invocación provoca que Excel capture el resultado en el momento de la llamada y no marque la celda como dependiente de una función volátil. En esencia, se “rompe” la conexión directa que existiría con el recálculo constante, y el motor de Excel entiende que el resultado ya no requiere actualizarse automáticamente en cada cambio de la hoja.
Esta optimización se alinea con algunas de las nuevas capacidades y mecanismos de evaluación introducidos en Excel recientemente (por ejemplo, con las funciones lambda y la gestión de arrays dinámicos). Aunque en teoría la función original es volátil, esta “envoltura” sintáctica hace que su resultado se trate de forma estática—al menos hasta que se fuerce un recálculo o cambie una dependencia. Es una estrategia interesante para reducir recálculos innecesarios en hojas muy complejas.
¿Te interesa profundizar en cómo Excel está incorporando estas nuevas estructuras tipo lambda o quizás en otras funciones optimizadas para mejorar el rendimiento?
La clave aquí es que AHORA no es la función nativa de Excel, sino un Nombre definido que internamente guarda un LAMBDA, como explica la IA de Microsoft en este enlace:
Por tanto, =(@AHORA)() significa literalmente:
- Toma el objeto función AHORA con intersección implícita
- Ejecuta esa función sin argumentos
- Devuelve la hora actual
Descarga un par de ejemplos de cómo conservar el AHORA, probados en Excel para Microsoft 365, desde este enlace:
- Google Drive: Conservar el AHORA - PW1.xlsx
Abre el archivo y presiona el botón: Habilitar edición cuando aparezca el aviso de VISTA PROTEGIDA.
Las hojas no están protegidas para que sea fácil analizar las fórmulas.
ATENCIÓN: Se puede modificar este libro de Excel respetando esta licencia:
Creative Commons — Atribución-NoComercial-CompartirIgual-No portada — CC BY-NC-SA 4.0
Este artículo se me ocurrió cuando ví este vídeo corto de Albert Cid, MVP en la categoría de M365 Apps & Services, que lo grabó cuando un amigo suyo le recomendó un artículo con una nueva idea para que la función AHORA() sea estática.
De momento me resisto a dejar de ser como ahora, dedicado a mis aficiones en Excel, pero tengo mucha presión para que cambie, y para que ayude en casa. Sobre todo desde que me autojubilé.
Si me animas a seguir como hasta ahora, me ayudarás a resistir a las presiones familiares, que no comprenden mi vocación y no entienden mi estilo de vida.
Y si me lo pides, hasta grabaré a partir de ahora un vídeo explicando cómo he hecho el archivo para conservar el AHORA.
Te agradezco que seas uno de los quinientos mil visitanes de mi blog, y me hará ilusión saber que aquí has aprendido algo nuevo de Excel.
Si compartes AHORA este blog con tus contactos, igual no hace falta esperar otros 15 años para llegar al millón de visitantes.