Grabar fecha y hora cuando se ingresa un dato en Excel

Por

Cuando se trabaja por ejemplo en el control de horarios y turnos de un empleado, puede resultar útil hacer que Excel grabe automáticamente la fecha y hora en que se ingresa un dato o valor.

Por ejemplo, si se ingresa un dato en la columna A, podemos hacer que la fecha o la hora se graben automáticamente en otra columna, lo cual agiliza el proceso pues evita tener que digitar la  fecha o la hora, que por su formato no es un proceso tan rápido.

Para ello podemos hacer uso de un pequeño código en la hoja donde se introducirán los datos respectivos.

Vamos a hacer que cuando se ingrese un dato en la columna A, en la columna B se grabe la fecha y en la columna C se grabe la hora de forma automática.

Para ello damos clic con el botón derecho del mouse sobre la pestaña de la hora respectiva y seleccionamos la opción “Ver código”.

Se abre  una ventana de Visual Basic donde copiamos el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then

Range("B" & Target.Row) = Date

Range("C" & Target.Row) = Format(Now, "hh:mm")

End If

End Sub

Guardamos y listo.

Con esto, cada vez que se introduzca un dato en cualquier fila de la columna A, la fecha y hora se insertarán de forma automática en las columnas B y C y permanecerán constantes, esto es que cuando se habrá Excel nuevamente tales valores no se actualizarán.

Contenido relacionado:
Gerencie.com en su correo.

Suscríbase y nosotros colocaremos en su bandeja de entrada la mejor información que generamos diariamente.


Déjenos su opinión

32 Opiniones
  1. ALAN Dice:

    Buenas tardes!

    Tengo que estar poniendo el código en mi libro cada vez que abro y cierro el archivo de EXCEL??

    Alguien sabe como solucionar este problema ya que quisiera que el código fuera permanente y por ende la función??

    Saludos!

    Responder
    • Néstor Dice:

      Guardar Como y en tipo eliges la opción Libro de Excel habilitado para Macros y listo.

      Saludos

      Responder
      • Víctor Puebla Dice:

        Hola, muy buen dato, pero como la otra persona me desaparece la funcion, lo guardo como “libro de excel habiltado para macros” pero abrir la funcion esta en blanco

        Responder
  2. walter Dice:

    Hola, necesito que me den una mano, tengo esta formula que me funciona de 10,

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range(“A:A”)) Is Nothing Then
    Range(“B” & Target.Row) = Date
    Range(“C” & Target.Row) = Format(Now, “hh:mm”)
    End If
    End Sub

    Necesito copiar esta formula y manejar 2 columnas, 1 Abierta y la otra Cerrada.
    En la columna G (Abierto) poner “J” Fecha y la “K” poner fecha.
    En la Columna H (cerrado) poner “L” Fecha y la “M” poner fecha.

    Intento compiar la formula, pero me tira error. por favor me dan una mano.. Muchísimas gracias!!!!

    Responder
  3. EMERSON Dice:

    ESTIMADO TENIA UNA DATA YA TRABAJADA CON FORMULAS Y LISTAS PERO AL QUERER AUTOMATIZARLA MAS USE ESTA OPCIÓN PERO AHORA UNA LISTA DESPLEGABLE QUE TENGO COMO (=INDIRECTO(C7) ) NO FUNCIONA, CREES QUE ME PUEDAS INDICAR COMO REVERTIR ESA OPCIÓN Y COMO DEJAR MI DATA COMO ESTABA, ESPERO TU RESPUESTA

    GRACIAS.

    Responder
  4. Fco Javier Garcia Dice:

    Funcionó perfectamente. (lo único que me costó localizar fue lo de “…la pestaña de la hora respectiva…” que no tenía nada claro que era.
    Muchas gracias por tu artículo.
    Saludos

    Responder
    • Fco Javier Garcia Dice:

      Reitero mi agradecimiento, Y quería hacer un inciso, Hay que guardar después el documento como “archivo de excel CON MACROS”, si no se hace así se perderá esta magnifica herramienta cuando cierres y quieras volver ha abrirlo.

      Responder
  5. Andy Dice:

    Hola, tengo una consulta.
    Con la formula inicial coloco los datos en la columna A y me tira la fecha en la columna B automáticamente, pero como podría hacer para que al eliminar el dato de la celda en la columna A también se elimine la fecha de la columna B? Alguien lo sabe?

    Responder
  6. Sol Dice:

    Buena tarde; He leído el artículo y me parece interesante, ya he puesto la fecha de esta forma en excel, pero ahora tengo una tabla automática y después de poner el código no me aparece nada, las columnas quedan en blanco.
    Espero que puedan apoyarme.
    Sólo quiero poner fecha y hora en las celdas de una columna al modificar las celdas correspondientes de otra fila.
    Gracias

    Responder
  7. Alex Dice:

    Buenas tardes.
    necesito ayuda, en un excel quisiera que me ponga la fecha del dato ingresado:

    A b
    codigo fecha
    001’100 que ponga la fecha y hora automatica

    023’322 que ponga la fecha y hora automatica

    hasta hay estoy bien pero lo que me falta es que si tiene dato repetido no ponga fecha

    002’100 fecha y hora automatica
    002’100 que no ponga nada
    003’122 fecha automatica
    004’123 fecha automatica
    002’100 que no ponga nada

    asi quisiera que funcione

    Responder
  8. antares Dice:

    Buenas,

    He modificado el código para intentar que al cambiar una celda de un rango de celdas establecido, imprima la fecha en una celda, y la hora en otra. El problema es que me da error al depurar en la 4 línea (error en el método ‘_Default’ de objeto ‘Range’), y la hoja se queda “colgada”. Si me podéis ayudar os lo agradecería. Mi código es el siguiente:

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range(“A1:AX41”)) Is Nothing Then

    Range(“E3”) = Date

    Range(“H3”) = Format(Now, “hh:mm”)

    End If

    End Sub

    Responder
    • antares Dice:

      He de añadir a mi anterior comentario que el código se aplica en varias hojas del mismo libro, variando el rango de celdas. No se si esto influye o no, pero por si acaso lo comento.

      Un saludo.

      Responder
  9. antares Dice:

    He de añadir al anterior comentario que el código lo que ejecutado en varias hojas del mismo libro cambiando los rangos de celdas. No se si esto influirá o no, pero por si acaso…

    Saludos

    Responder
  10. 7avo Dice:

    Cómo hago para que al ingresar otro dato en otra celda diferente me imprima ahora la hora de nuevo, es decir con tu código hice esto:

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range(“B:B”)) Is Nothing Then

    Range(“A” & Target.Row) = Date

    Range(“E” & Target.Row) = Format(Now, “hh:mm”)

    End If

    End Sub

    Pero despues quiero hacer esto:

    If Not Application.Intersect(Target, Range(“H:H”)) Is Nothing Then

    Range(“F” & Target.Row) = Format(Now, “hh:mm”)

    Solo que no he podido agregarlo, me marca un error si me pudieras ayudar con eso, gracias….

    Responder
  11. ADRIAN Dice:

    como hacer para que el siguiente macro no altere los datos en toda la columna.

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range(“A:A”)) Is Nothing Then

    Range(“B” & Target.Row) = Date

    Range(“C” & Target.Row) = Format(Now, “hh:mm”)

    End If

    End Sub

    realizo esta macro pero no puedo evitar que inserte la hora el las celdas que realizo otras especificaciones.

    Responder
    • cyber100 Dice:

      borra esto: Range(“C” & Target.Row) = Format(Now, “hh:mm”)
      a mi funciono…

      Responder
  12. Daniel Dice:

    Excelente guia, muchas gracias por compartir la informacion.

    Responder
  13. luis Dice:

    Muy rifado, muchas gracias a todos

    Responder
  14. cyber100 Dice:

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range(“A:A”)) Is Nothing Then

    Range(“B” & Target.Row) = Date

    Range(“C” & Target.Row) = Format(Now, “hh:mm”)

    End If

    End Sub

    me funciono perfecto,la estoy usando en una hoja de pagos, me funciono en la celda pagos(fecha de pago), ahora quiero lo mismo pero en las celda abono1(celda fecha de abono1) y celda abono2(celda fecha de abono2), espero se explicita mi pregunta…gracias

    Responder
  15. Fernando Dice:

    Muy bueno. Mil gracias!

    Responder
  16. Fernando Dice:

    MUY BUENO, MUCHAS GRACIAS.
    SALUDOS DESDE MÉXICO.

    Responder
  17. Adri Dice:

    Lo veo perfecto, solo tengo un pequeño problema. No sé cómo hacer que eso mismo se pueda hacer con otras columnas.

    Ejemplo:

    Introduzco dato en A y sale hora en B.
    Introduzco dato en C y sale hora en D.

    Gracias!!

    Responder
  18. KhrooZ Dice:

    Se puede realizar esto pero en una misma columna?

    por ejemplo: Si agrego un dato en B2, que salga la fecha en B5?

    ayuda porfavor D:

    Responder
  19. Geostronger Dice:

    Tengo una duda ayuda por favor!!!
    Todo esta muy bien pero ahora lo que quiero es que a la hora de borrar la celda no se actualice la fecha y hora, como le hago?????

    Responder
  20. Carla Dice:

    Hola!
    Una consulta, alguien sabe como escribir esa misma funcion para google sheets?
    Mil gracias!!!!

    Responder
  21. Amadeo Dice:

    Hola,

    Me gustaría saber si se puede modificar el código para que, en lugar de que indique fecha y hora cada vez que se introduce/modifica un valor, solamente lo haga la primera vez que se introduce un valor.
    Es decir, me gustaría que quede registrado, el día en el que se introdujo un valor. Y que cambie esa fecha/hora cada vez que se modifica el valor de la celda.

    Muchas gracias!

    Responder
  22. JosueC Dice:

    Como puedo hacer que me funcione en una hoja especifica del libro ya que cuento con varias hojas en el mismo. Gracias

    Responder
  23. Stewart Dice:

    Hola,
    Me gustaría saber como puedo modificar este código a un libro de 34 hojas que manejan el mismo formato, pero que solo se aplique a 31 hojas, ya que los registros se van ingresando en la hoja que corresponde al día y también coloque la fecha en una columna y la hora en otra y que después de haber ingresado la información no permita realizar cambios.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 6 And Target.Row > 1 Then
    If Len(Trim(Sheets(“registro”).Cells(Target.Row – 1, 4))) > 0 Then
    Sheets(“registro”).Cells(Target.Row, 1) = Now
    End If
    End If

    Muchas gracias.

    Responder
  24. Mau Dice:

    Buen día, la formula me funcionó muy bien pero como le hago para que en vez de una columna sea un fila

    Responder
  25. José García Dice:

    Todo funciona excelentemente bien

    Responder
En Gerencie.com está permitido opinar, criticar, discutir, controvertir, disentir, etc., pero debe hacerlo con respeto, sin insultar y sin ofender a otros.

Información legal aplicable para Colombia.

¿Preocupado por su pensión? Manténgase Informado.