Insertar fecha y hora automática en Google Sheets

Timestamp en Google Sheets

Una pregunta que se hacen frecuentemente los usuarios de Sheets es como registrar en una celda la fecha en la que se modifica o se crea una nueva fila.

Esto se conoce en ingles como timestamp, y yo lo bautizaré como “registro de fecha automática”.

En este artículo vemos dos métodos para insertar una fecha automática en Google Sheets.

Video

Que es un timestamp o registro automático de fecha

Un timestamp es básicamente una fecha que ponemos para registrar un ingreso de un documento o un dato.

Lo importante de esta fecha es que quede fija y que no sea fácil cambiarla.

Esto lo podríamos hacer de varias maneras: De manera manual, con una macro, o con fórmulas.

Método 1: Manual

Si bien el título de este artículo es registro automático de fechas, no sobra saber un par de métodos para hacerlo manualmente antes de involucrarnos con macros o fórmulas complejas

Hay tres formas manuales de hacerlo:

Función HOY() en Google Sheets

La primera es con la función HOY().

Esta función, precisamente nos trae la fecha y hora de hoy. Pero como no queremos que se modifique, y la función HOY() nos da un valor hoy y otro diferente mañana, entonces deberíamos después de aplicarla, pegarla como valores para que quede fija

De nuevo, no es la mejor forma ni la más automática, pero es bueno saber que se puede hacer así.

Atajo de teclado: Ctrl + ´

La segunda es con el atajo de teclado: Ctrl + ´

Esta es una manera muy sencilla de poner la fecha de hoy sin que quede con una función como en el anterior método.

@hoy

Esta es una nueva serie de atajos o “chips” que Google ha empezado a implementar desde 2021.

Simplemente escribiendo @hoy o @fecha de hoy, rápidamente nos trae esta fecha.

Este método tiene la ventaja adicional que tambien puede traer la fecha de mañana, de ayer o llevar a un calendario gráfico para fácilmente escoger una fecha específica.

Método 2: Macro

La segunda forma es a través de una sencilla macro que vamos a grabar, y asignar a un botón ya un atajo de teclado.

Para esto vamos a seguir los siguientes pasos

  1. En nuestro archivo de Google sheets vamos a ir a Extensiones > macros >Grabar macro
  2. En el nuevo cuadro que nos aparece vamos a escoger la opción Usar referencias relativas
  3. Sin movernos de la celda actual, vamos a usar algunos de los métodos que vimos en la sección anterior para registrar una nueva fecha )que no sea el método con la fórmula hoy())
  4. Damos clic en el botón de Guardar
  5. Le asignamos un nombre a la macro
  6. También asignamos un número del 1 al 9 para el atajo de teclado junto con las teclas CONTROL + ALT + SHIFT

Ahora, para ejecutar la macro tenemos dos opciones: la primera es yéndonos al mismo menú donde la grabamos (Extensiones > Macros > Ejecutar macro).

Nota: la primera vez que la ejecutemos nos va a pedir una autorización

También la vamos a poder ejecutar con el atajo de teclado que escogimos con un número del 1 al 9

Este método es interesante si somos principiantes y adicionalmente después lo podremos usar como base para el siguiente método que es mucho más flexible.

Método 3: Google Apps Script

El tercer método es similar al anterior pero un poco más flexible porque vamos a usar el lenguaje de programación de Google llamado Google Apps Script para crear nuestro registro de fecha desde cero. Adicionalmente podemos programar un activador para que se ejecute automáticamente

Nuestro código va a evaluar cuando un usuario ponga un valor en una celda específica, y una vez se haga, traerá la fecha y hora del día de hoy.

Ventaja principal

Siempre va a ejecutarse y no depende de accionar manual del usuario

Además, es muy flexible

Desventajas principales

  • Por más de que la fecha no va a cambiar por si sola, podríamos borrar o modificar por error la formula, al menos que la protejamos.
  • Como la macro edita nuestra hoja, obligatoriamente debemos dar permiso de edición a todos los colaboradores que participen, aumentando el riesgo de que cambien la celda.
  • Esta “Edición” se refiere obligatoriamente a manualmente cambiar el valor de una celda, no aplica para cambios hechos por fórmulas o códigos

Armando la base

Primero estructuremos nuestra base de ejemplo de la siguiente manera:

Vamos a crear una base de control de documentos. En esta, necesitaremos los siguientes registros

  • Una columna para escribir el nombre del documento
  • Una columna para seleccionar un supervisor o responsable. Podríamos incluso construir un desplegable sencillo.
  • Una columna de fecha. Aquí es donde nuestro código imprimirá la fecha actual

Construyendo el código

Vamos a nuestro código.

Para acceder al mismo vamos a “Extensiones” > “Apps Script”.

Es una buena práctica, darle un nombre al proyecto simplemente dando clic donde dice “Proyecto sin título”

Vamos a borrar lo que encontramos aquí y escribir una nueva función que se llame timestamp.

function timestamp() {
//Aqui va el código
}

Vamos a conectarnos con nuestro libro usando el método .getActiveSpreadsheet(), así:

//"Conectarse" con el archivo
let libro =SpreadsheetApp.getActiveSpreadsheet();

En nuestro ejemplo, asumimos que la pestaña se llama “Datos”. Aquí pueden reemplazarlo por el nombre de su pestaña.

Luego, buscamos la celda en la que el usuario está situado, su valor, su fila y su columna.

Para esto, accedemos a la celda activa con .getActiveCell(), y guardamos nuestra celda en una variable “celdaActiva”. Luego, desde esa celdaActiva podemos buscar el valor, la fila y la columna, con getValue(), getRow() y .getColumn() respectivamente.

  //Traer la celda activa
  let activa = libro.getActiveCell();

  //Traer el valor de la celda activa
  let valor = activa.getValue();

  //Traer la fila de la celda activa
  let filaActiva = activa.getRow();

  //Traer la columna de la celda activa
  let colActiva = activa.getColumn();

  //Traer la hoja donde se encuentra la celda activa y su nombre
  let hojaActiva = activa.getSheet();
  let nombreHojaActiva = hojaActiva.getName();

Construimos un condicional para asegurarnos que el código solo se ejecute cuando la fila sea superior al encabezado, este en la columna adecuada (la del responsable, en nuestro caso la 2) y que solo se ejecute en la pestaña de datos.

/*Asegurarnos que solo se ejecute despues del encabezado, en la colummna especificada y en la hoja especificada */
if(filaActiva>=2 && colActiva==2 && nombreHojaActiva=="Datos"){
//Aquí va el código del timestamp
}

Por último, si se cumple la condición, vamos a imprimir la fecha en la celda que especifiquemos. En nuestro ejemplo será la celda a la derecha de la columna del responsable.

Para esto vamos a usar el método offset que nos “mueve” nuestra celda las filas o columnas que le digamos.

En nuestro ejemplo .offset(0,1) le dice a Sheets: “mueva la celda una a la derecha y cero abajo”.

//Pondremos la fecha una celda a la derecha de la celda modificada
activa.offset(0,1).setValue(new Date());

Una alternativa a esto, cuando no queremos que la columna del registro de fecha sea relativa a alguna otra podemos reemplazar la línea anterior por esta

hojaActiva.getRange(filaActiva,3).setValue(new Date()), donde el número 3 lo van a cambiar por la columna donde quieran imprimir el timestamp.

Esta última linea es mucho mas flexible y es lo que yo recomiendo en la mayoría de los casos. Y la podemos separar, guardando la celda donde registremos en una variable “celdaRegistro” para que nos permita más flexibilidad a futuro. Así quedaría:

//Pondremos la fecha en la columna 3 y la fila Activa
let celdaRegistro=hojaActiva.getRange(filaActiva,3)
celdaRegistro.setValue(new Date()); 

Una última cosa que podremos hacer es solo imprimir la fecha si no hay valor anterior. Es decir impedir que al modificar el responsable cambie la fecha original.

Esto lo hacemos con otro condicional

if(celdaRegistro.getValue()){  
     //No hacer nada
    }else{
     celdaRegistro.setValue(new Date()); 
    }

Si tuviéramos más aprobaciones en distintas columnas, como en este ejemplo:

Solo tendríamos que añadir en la condición del código la nueva columna, así

 if(filaActiva>=2 && (colActiva==2 || colActiva==4) && nombreHojaActiva=="Datos"){
//Ejecutar
}

Donde 2 y 4 serian las columnas de los responsables, y a la derecha de cada uno estaría la fecha.

Así mismo podrían poner todas las condiciones que quieran con el mismo operador ||.

Ejecutar el código

Nos falta una última parte y es como hacer para que el código se ejecute de manera automática cuando alguien escriba algo en la base

Hay varias maneras de ejecutar el código para que de verdad sea automático

Lo último que nos falta es crear una función onEdit() y dentro de esta correr nuestra función:

function onEdit(){
  timestamp();
}

onEdit es un ejemplo de lo que se conoce como activadores simples. Un activador simple no es más que una función que se ejecuta al momento que pasa algo.

En el caso de onEdit, se ejecuta cada vez que alguien edita una celda, es decir cada vez que alguien cambia el valor de una celda.

Código

Este contenido está solo disponible para miembros

Método 2: Formula con referencia circular

Nota: Este método es muy interesante, pero es altamente inestable. Como experimento y para conocer los límites de Sheets es recomendable que lo prueben, pero para sus bases de “producción” y de uso diario, les recomiendo altamente que usen el método anterior.

Esta va a ser una fórmula extraña si no están acostumbrados a trabajar con iteraciones (Como el 99% de usuarios. Yo la descubrí cuando investigaba este tema, pero no tenía ni idea que existía).

Ventaja Principal

Al ser una fórmula, podemos proteger la hoja, y no va a tener problema para los colaboradores, y no van a poder cambiar o borrar las fechas

Desventajas

  • Al ser una fórmula, si llegamos a eliminar el dato del responsable, la fórmula se va a resetear y quedar en blanco
  • Desafortunadamente esta fórmula no funciona bien con ArrayFormula, entonces nos va a tocar arrastrarla hasta nuestra última fila, y cada vez que agreguemos nuevas filas, asegurarnos que esté con fórmula.
  • Es inestable. A veces, por alguna actualización de Sheets, se puede “dañar”, y todas las fórmulas pueden quedar en 0.

Construyendo la función

Básicamente vamos a usar la fórmula HOY(), pero solo la vamos a correr la primera vez que se modifique el responsable, es decir cuando la celda donde está la fecha esté vacía.

La fórmula evaluaría las siguientes 3 condiciones

  1. Si no hay un responsable, pues no hay fecha
  2. Si ya hay una fecha, mantengamos esa fecha
  3. Si no hay fecha, pongamos la fecha de hoy con la función HOY()

Esta es nuestra base de ejemplo

Teniendo en cuenta que la fecha iría en la C, la fórmula sería la siguiente:

=IFS(O(A2="";B2="");"";C2<>"";C2;VERDADERO;AHORA())

Pero si pones esa fórmula así como está. te va a dar un error. Nos falta un paso.

Como estamos hablando de referencias circulares (Estamos invocando a la celda C2 desde la misma celda C2), entonces debemos manejar las iteraciones para referencias circulares.

Para esto, seguimos los siguientes pasos:

  • Vamos a “Archivo” > “Configuración de la hoja de cálculo”
  • Vamos a la pestaña de “Cálculo”
  • Vamos a la sección “Calculo iterativo”
  • Escogemos la opción “Activar”
  • En número máximo de iteraciones ingresamos 1

Ya con esto, como por arte de magia nuestra fórmula va a funcionar.

Pero ojo, de nuevo hago la aclaración que esta fórmula es inestable y a veces se “resetea” por razones que no tengo 100% claras. Por eso les recomiendo usar el método anterior para que no tengan problemas.

Hay otro método que involucra las funciones MAP y LAMBDA. EL primero que lo pida en los comentarios, lo agrego

Conclusión

El registro de fechas automático en Google Sheets o timestamp es una herramienta muy útil para poder llevar registros de control de documentación o de entrada y salida, y también puede ser muy útil en muchos otros casos, de gestión de tareas y demás.

Vimos dos métodos para hacer el timestamp, cada uno con sus ventajas y desventajas y que pueden llegar a ser utiles en distintos casos.

Cuéntame si te es útil y que nos quedó faltando.

98 comentarios en “Insertar fecha y hora automática en Google Sheets”

  1. Hola Juan, quiero entrar a la academia y especialisarme más, pero al intentar entrar, me aparece un msj de error, que al parecer por mi localización no puedo acceder. Estoy en Venezuela, tengo alguna opción de poder hacer los cursos, aparte de un vpn?

  2. Hola Juan, quiero entrar a la academia y especialisarme más, pero al intentar entrar, me aparece un msj de error, que al parecer por mi localización no puedo acceder. Estoy en Venezuela, tengo alguna opción de poder hacer los cursos, aparte de un con?

  3. Buenos días,

    Muchas gracias por tu contenido, es de muchísima ayuda, pero tengo una duda. Tengo un excel en el que en una pestaña quiero poner la fecha en función de si se cambian las celdas de una columna, pero no por que la cambie yo de manera manual, estas celdas cambian por una fórmula de sumatorio y la macro no me funciona, hay solución?

    1. El tema es que el activador de edición solo funciona cuando se cambia de manera manual la celda y no a través de una fórmula
      Saludos!
      Una opción es activarla con tiempo y estar revisando la fórmula
      Saludos!

  4. buenas a todos
    tengo que hacer una lista la cual debe tener checkbox
    lo que debe de hacer el checkbox es, que cada vez que sea verdadero me sume un numero en otra celda y me imprima en otra hoja la fecha y hora cuando ocurrió el evento true

  5. Hola buenos dias juan,

    Primero que todo muchas gracias por compartir todos los conocimientos me han sido de mucha utilidad y he aprendido bastante para aplicarlo en mi trabajo, haciendo el TimeStamp quisiera poder dar solucion al hacer un timestamp que verifique que la celda de los datos esten llenas pero que la del tiempo este vacia, y si es asi genere el timestamp, ya que he intentado de varias maneras pero no logro que se rellene la casilla de timestamp solo se ejecuta cuando me paro sobre la celda y escribo algo.

    De antemano muchas gracias.

  6. Hola buenos dias juan,

    Primero que todo muchas gracias por compartir todos los conocimientos me han sido de mucha utilidad y he aprendido bastante para aplicarlo en mi trabajo, haciendo el TimeStamp quisiera poder dar solucion al hacer un timestamp que verifique que la celda de los datos esten llenas pero que la del tiempo este vacia, y si es asi genere el timestamp, ya que he intentado de varias maneras pero no logro que se rellene la casilla de timestamp solo se ejecuta cuando me paro sobre la celda y escribo algo.

    De antemano muchas gracias.

  7. Muchas gracias! Muy util! COmo puedo hacer para que si pego varias celdas a la vez se agreguen automaticamente a todas ellas la fecha. Porque aparece solo la primera de todas. Muchas gracias nuevamente. Saludos atte.

  8. excelente aporte, una pregunta como puedo hacer que me marque la fecha al yo colocar un texto especifico dentro del timestamp

    gracias por compartir

    1. Hola John

      Mil gracias por tus palabras!

      Lo incluirias en esta linea

      if(filaActiva>=2 && (colActiva==2 || colActiva==4) && archivo.getActiveSheet().getName()==”Datos” && valor==”lo que tu quieras”)

      Un gran saludo!

  9. Hola, como hago para que funcione cuando los demás usuarios del documento hagan modificación funcione; solo funciona cuando yo modifico la celda 🙁 gracias

    1. HOla!

      Lo que pasa es que los usuarios tiene que haber dado permiso para usarlo

      Para eso debemos agregar un boton o explicarle al usuario que de play en la función desde el editor de secuencias por lo menos una vez+

      Saludos!

  10. Estimado, mil gracias por compartir desinteresadamente tus conocimientos.

    He hecho literalmente el ejemplo que utilizaste en una planilla nueva de google sheets pero no funciona, me aparece un cuadro con fondo negro y nada más.
    Necesito hacer eso mismo de hace mucho tiempo y lo he estado haciendo a mano con el consabido peligro de poder equivocarme.
    ¿Podré compartirte esa planilla para que la veas?
    Es más… estoy dispuesto a pagar para que me lo soluciones jeje…
    Mil gracias.
    Alfredo

  11. Hola Juan, un gusto, encontré tu video en youtube y me pareció muy interesante.

    Debo pedirte ayuda, yo tengo una hoja de calculo que a través de un activador de appscript me trae el precio por importJson del Bitcoin, el tema es que quiero llevar registro de esa celda que va cambiando.

    Por lo tanto necesito que los valores que me trae cada 1 minuto en esa celda queden registrados en dos columnas apartes, como una base de datos o tabla (una con el precio y otra con fecha y hora) y que los vaya apilando.

    Se que por este camino del timestamp voy medio encaminado, pero e pierdo y no logro llegar a lo que quiero hacer.

    Desde ya muchas gracias.

    Saludos.

  12. Estoy intentando crear un timestamp que haga lo siguiente:
    Desde slack envio un dato y al recibirlo en google sheets me indique la fecha y hora de ese ingreso, y cuando se actualice en otra columna me digite la fecha de actualización.

    ¿Podrias guiarme con eso?

  13. Excelente aporte felicitaciones!!!!, tengo una consulta, en mi caso tengo un formulario en google sheets, donde deseo que las columnas 4,5 y 6 cuando sean modificados, primero capture en la columna 7 el primer timestamp del primer registro de cualquiera de las columnas 4,5 y 6, luego en columna 8 la fecha de modificación de cualquiera de las columnas 4,5 y6 cómo se podría realizar?

  14. Ya vi el error

    function timestamp() {
    var archivo =SpreadsheetApp.getActiveSpreadsheet();
    var ss = archivo.getSheetByName(«Urgencies»)
    var activa = ss.getActiveCell();
    var valor =activa.getValue();
    var filaActiva = activa.getRow();
    var colActiva =activa.getColumn();
    Logger.log(valor);

    if(filaActiva>=2 && colActiva==2 && archivo.getActiveSheet().getName()==»Urgencies»){
    if(activa.offset(0,-1).getValue()){

    }else{
    activa.offset(0,-1).setValue(new Date());
    }

    }

    }

    function onEdit(){
    timestamp();

    }

    se estaba cerrando mal el onEdit con dos }

    1. Te agradezco muchisisisisimo!!!!!!!!!!!!!! Tenía todo el día con esto y gracias a tu comentario lo logre en 5 minutos!!!!!!!!!!!!!!!!!!!!!!!! 🥰🥰🥰🥰🥰
      Eres un crack!!!
      Saludos desde Monterrey, México!

        1. Hola . Soy principiante y me cuesta mucho las macro. Quisiera hacerlo más simple. Podría ejecutar una función de nombre xxx que al ejecutarse devuelva en la celda los comandos CTRL+ ‘ para que así plasme la fecha y hora de ese momento?

  15. Buenas Guzman!
    Muy bueno tu trabajo, me viene ayudando pila.
    Igualmente, si me pudieras dar una mano con lo siguiente te agradezco.
    Quiero generar un timestamp cada vez que se cargue un dato a un sheets, pero no cargandolo yo manualmente, desde una aplicacion se envian formularios que se cargan automaticamente generando una nueva fila, por lo que deberia agregarse la timestamp cada vez que se agrega una nueva fila con datos en una columna X, y luego cargar un dato en una columna Y de la misma fila, que genere otra marca en la misma fila.

    El formulario que envio no genera timestamp automatico como google ni tiene la opcion de activarlo.

    De momento, lo pude solucionar usando una query a otra sheet y utilizando el IFS, pero vuelve la hoja bastante pesada.

    No puedo usar el IFS sin el query ya que al agregarse filas nuevas la formula se va hacia abajo.

    Espero que se haya entendido y me puedas dar una mano.
    Abrazo!

  16. Buenas Guzman!
    Muy bueno tu trabajo, me viene ayudando pila.
    Igualmente, si me pudieras dar una mano con lo siguiente te agradezco.
    Quiero generar un timestamp cada vez que se cargue un dato a un sheets, pero no cargandolo yo manualmente, desde una aplicacion se envian formularios que se cargan automaticamente generando una nueva fila, por lo que deberia agregarse la timestamp cada vez que se agrega una nueva fila con datos en una columna X, y luego cargar un dato en una columna Y de la misma fila, que genere otra marca en la misma fila.

    De momento, lo pude solucionar usando una query a otra sheet y utilizando el IFS, pero vuelve la hoja bastante pesada.

    No puedo usar el IFS sin el query ya que al agregarse filas nuevas la formula se va hacia abajo.

    Espero que se haya entendido y me puedas dar una mano.
    Abrazo!

    1. Hola Nicolas

      Mil gracias por tus palabras!

      Que tan exacto tiene que ser el timestamp

      Te lo pregunto porque podrias hacer un timestamp que corra cada 5 minutos y que verifique que la celda de los datos esten llenas pero que la del tiempo este vacia, y si es asi genere el timestamp

      Como la ves? Factible?

      Saludos!

      Un gran saludo!

      1. hola Juan, muy buenos dias,

        Estoy tratando de hacer lo que dice en este comentario de hacer un timestamp que corra cada 5 minutos y que verifique que la celda de los datos esten llenas pero que la del tiempo este vacia, y si es asi genere el timestamp pero no lo he logrado llevo mucho tiempo pensando y no doy con la logica, seria tan amable de instruirme en como hacerlo intente con la formula sin macro pero como estoy usando la funcion de getLastRow me envia la informacion al ultimo renglon debajo de la formula.

        De antemano muchas Gracias.

  17. Hola,
    Pese a que tengo puesto function onEdit(), no me lo ejecuta automáticamente.

    function timestamp() {
    var archivo =SpreadsheetApp.getActiveSpreadsheet();
    var ss = archivo.getSheetByName(“Urgencies”)
    var activa = ss.getActiveCell();
    var valor =activa.getValue();
    var filaActiva = activa.getRow();
    var colActiva =activa.getColumn();
    Logger.log(valor);

    if(filaActiva>=2 && colActiva==2 && archivo.getActiveSheet().getName()==”Urgencies”){
    if(activa.offset(0,-1).getValue()){

    }else{
    activa.offset(0,-1).setValue(new Date());
    }

    }

    function onEdit(){
    timestamp();
    }

    }

  18. Hola!, he podido crear las marcas, sin embargo tengo una duda,

    Quiero poder filtrar en la columna donde se me van generando y poder filtrar por el día de hoy, para tener una casilla que me lo vaya diciendo cada día.

    He probado con:
    =CONTAR.SI(A2:A;”=”&HOY())

    en la columna desde la A2 en adelante se van generando, y lo que quiero es poder ver cuantas llevo hoy. Algo se me escapa porque hay 0 cuando contando veo bastantes.

    Puede ser porque la marca incluye la hora? una manilla por favor?
    Mil gracias!

    1. Hola

      Si, vas por el lado correcto, el problema es que el timestamp es una fecha con hora, básicamente un numero con decimal,

      por ejemplo el 5 de abril de 2019 es un numero, exactamente el 43560.5

      Una opción es redondear para abajo la fecha y ahí si la puedes comparar con HOY()

      Saludos!

  19. Buenas tardes, deseo se encuentre muy bien. Como puedo hacer para tener varios timestamp simultaneos en diferentes columnas y cual es el limite por hoja

    1. Hola Jhon

      En teoría no debería haber limite

      Simplemente en el condicional pon todas las columnas con una condicion “o”

      Así:

      if(filaActiva>=2 && (colActiva==2 || colActiva==4 || colActiva==6) && archivo.getActiveSheet().getName()==”Datos”){
      }

      Me cuentas

      Saludos!

  20. Buenas!!

    Estoy aplicando la fórmula del hilo que va increíblemente bien, pero me surge una pequeña duda.

    Tengo esta fórmula, que la he adaptado según las casillas:

    =IFS(O(L2=””);””;R2″”;R2;VERDADERO;AHORA())

    para que en R2 se incluya la hora cuando L2 no esté vacío, el problema lo tengo en que en L2 lo que he puesto es un check y no se va a incluir dato alguno salvo la marca al hacer click

    He probado con L2=true, L2=verdadero, L2=”verdadero” pero no lo aplica correctamente.

    Seguro que es fácil pero no encuentro la forma, por si alguien la sabe.

    Gracias de antemano!
    Un saludo

    1. Hola!

      Vete a la celda donde esta la casilla de verificación

      Dale clic derecho > Validación de Datos

      En opciones, puedes poner los valores cuando se seleccione o no se seleccione, ahi puedes poner cualquier texto, por ejemplo chequeado

      Después pones en tu IFS =”chequeado”

      Saludos!

  21. Hola. Gracias José por tu aporte, me fue de mucha utilidad para una planilla de producción que hice en mi trabajo Funciona la perfección.

  22. Buenos días, como puedo hacer para que al ingresar el dato supervisor tome la hora pero que ya después no permita modificar la hora, es decir si alguien quisiera borrar el dato que aparece con la fecha y hora registrada anteriormente ,esta no se cambiar.
    Gracias por tus aportes

  23. Perfecto muchas gracias guzman, por cierto una última duda a ver si tú que sabes mucho de google sheets puedes ayudarme.
    Sabes porque las scripts y hipervinculos no se ejecutan en IOS?
    Llevo una página de fútbol donde somos 48 personas, utilicé a la perfección tu tutorial de enviar datos de una pestaña a otra para usar desde móvil y en andriod nos funciona bien y en ios no va el código y la verdad que me tiene amargado lo del ios jaja
    saludos!!

  24. function timestamp() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Hoja 1”);
    ss.getRange(“A1”).setValue(new Date());
    }

    Buenass, estaba intentando usar la primera fórmula que hiciste y no me funciona.. no se cúal es el error
    Yo lo que quiero es que en la celda “A1” de la “Hoja 1” cada vez que haya una modificación en la “Hoja 1” se me cambie automáticamente la fecha en “A1”!!
    Es como la función NOW pero que si cambias algo en otra Hoja no se me modifique la fecha en “Hoja 1”

      1. Buenass, no, esta fué la única fórmula que puse que la ví en tu video

        function timestamp() {
        var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Hoja 1»);
        ss.getRange(«A1»).setValue(new Date());
        }

        que me puede faltar en la fórmula?

        1. Vale añadiendo la función onEdit si funciona el único error que tengo es que solo quiero que la fecha me cambie en la “Hoja 1” y por desgracia con esta fórmula en cualquier hoja que hago un cambio se cambia tambien en la “Hoja 1”

          function timestamp() {
          var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Hoja 1”);
          ss.getRange(“A1”).setValue(new Date());
          }

          function onEdit() {
          timestamp();
          }

  25. Hola amigo, siempre muy buenas tus guias, me tienes saliendo de apuros siempre y automatizando mi excel facilitandome siempr el trabajo. Quisiera pedirte ayuda con una formula en especifica.

    Tengo un formulario de google que llenan constantemente, pero quisiera saber como puedo hacer que en una celda de cada una de las respuestas nuevas que lleguen, yo pueda insertar una celda donde yo coloque la fecha que se gestiono esa respuesta(por razones tecnicas prefiero colocar la fecha yo manualmente por que hay variables) PERO que esa celda cambie de color, es decir ME ALERTE, al ya haber transcurrido 3 dias o si es posible, especificamente 72 horas. Esto es porque se supone que una vez yo coloque la fecha manualmente, quisiera saber cuales tienen mas de 3 dias. Alguna idea de como ingresar ese formato condicional?

    Ejemplo para ser menos confuso: la fecha yo coloco “20/2/2021” y al ser el dia 23/2/2021 esa culumna este automatizada para cambiarle el color a esa celda a ROJO. De antemano muchas gracias y sigue asi

  26. hola, solo una gran pequeña consulta, si necesito colocar la fecha automatica en la columna A (a la izquierda) y su condicion sera la columna (B) como deberia hacer la parte activa.offset(0,1).setValue(new Date());

    gracias

  27. Hola Juan! ¿Como estas?
    Excelente forma de explicarlo y muy util.
    Utilice la formula para un archivo de monitoreo de tiempos, sin embargo al día siguiente la fecha se movio, y se replico en todas las celdas del mismo día, realmente no sé a que pueda deberse. Me podrias ayudar por favor con algun consejo para saber a que se debe esto, utilice esta formula:
    =IFS(O(A2=””;B2=””);””;C2″”;C2;VERDADERO;AHORA())
    y modifique la parte de la referencia circular, sin embargo esta pasando esta situación.
    Agradeceria pudieras ayudarme por favor.

    Muchas gracias y excelente trabajo el que realizas, muy util.

    Saludos!

  28. Buenas, cuando comparto la hoja de calculo no le funciona el proyecto timeshap, en mi equipo funciona correctamente, le estoy dando vueltas y no encuentro la solución, sabrías decirme porque?

    1. Hola Pedro

      La razón es que la primera vez que va a correr necesita que el usuario de su permiso.

      Una forma es teniendo un botón o un menú para que le pida permisos la primera vez

      La mejor forma es convirtiendo el script en un complemento

      Espero pronto hacer un video de esto

      Un gran saludo!

  29. Hola! Necesito que si cambia la información de la celda, también cambie la fecha de registro.
    Intenté sacar el condicional que le pusiste a la macro (lo último) pero no me funciona, cómo puedo hacerlo?
    Gracias!!!!

  30. Hola, como puedo hacer que la fecha ingresada se borre automáticamente cuando borro la celda que muestra el nombre del supervisor, es decir, esta es null.

    1. Hola cambia esta parte del código

      if(filaActiva>=2 && (colActiva==2 || colActiva==4) && archivo.getActiveSheet().getName()==”Datos”){

      if(activa.offset(0,1).getValue()){
      if(activa==”){
      activa.offset(0.1).clearContent();
      }

      }else{
      activa.offset(0,1).setValue(new Date());
      }
      }
      }

      Básicamente estamos agregando un nuevo condicional que si hay un valor actual de fecha y aparte no hay valor en la celda de supervisor en tu caso, borre la fecha

      Me cuentas si te funciona

      Saludos!

  31. Hola
    Fantástica explicación.
    He intentado hacer la misma macro pero en dos pestañas diferentes y me anula una de ellas, la primera. ¿Cómo podría hacerlo?
    Gracias

    1. Hola Gloria!

      Gracias por escribir!

      1cambia esto

      if(filaActiva>=2 && colActiva==2 && archivo.getActiveSheet().getName()==”Datos”)

      por esto

      if(filaActiva>=2 && colActiva==2 && (archivo.getActiveSheet().getName()==”Datos” || archivo.getActiveSheet().getName()==”Datos 2″)

      Si las columnas son diferentes ahi tendriamos que hacer otro cambio

      ME cuentas si te funciona

      Saludos!

      1. Hola juan

        Como sería también en columnas diferentes?. Hice el código original para tres hojas distintas y no me funciona en ninguna, pero si lo hago para una sola hoja anda todo ok. Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Pin It on Pinterest

Share This