Aplicar una macro de forma condicionada

Hola a todos,
Llevo unos días peleándome con Excel, necesito hacer algo para que en una hoja excel, al introducir yo un dato numérico en una celda, en la celda de la izquierda (por ejemplo) me aparezca de forma automática la hora (HH:MM:SS) en la que he rellenado la celda con el dato numérico y que esa hora no se cambie al rellenar la siguiente celda.
Realmente lo ideal sería que en lugar de la hora, me apareciese el dato de un cronómetro que yo pusiera en marcha al iniciar la sesión de toma de datos. He visto como crear un cronómetro con una macro, pero de ahí no he podido pasar.
Si a alguien se le ocurre como solucionar esto me ahorraría mucho trabajo. Gracias.
{"lat":40.4803814290817,"lng":-3.3837890625}

1 Respuesta

Respuesta
1
La siguiente es una solución en segundos.
Esto lo pones en la sección de código de la hoja en que vas a trabajar
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Address = "$C$1" Then
        Target.Value = Now
    End If
End Sub

Cuando hagas doble click en la celda C1, este código cargará automáticamente la fecha y hora en esa celda, la que indicará la hora en la que partió la sesión.
También agrega este código a continuación del anterior
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        Cells(Target.Row, Target.Column - 1) = DateDiff("s", Range("C1").Value, Now)
    End If
End Sub

Esto hará que, cada vez que cambies un valor en la columba B (o columna 2), en la columna A (o columna 1) se cargará la cantidad de segundos transcurridos desde iniciada la sesión.
Lo puedes acomodar a tus requerimientos, pero ya tienes la idea.
Mil gracias, esto está genial, que bueno es saber...
He probado tu solución y funciona bien siempre que meta los datos en la columna de forma manual. En mi caso, tengo otra macro que pega los datos desde otra hoja del mismo libro a esta de una forma ordenada (uno debajo del otro), y cuando pasa esto, la solución que me has dado no me devuelve ningún valor en la celda contigua. ¿Habría qué cambiar algo en el código?
Gracias de nuevo por tu ayuda.
Para enfrentear tu problema haremos unos cambios. En lugar de esto
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        Cells(Target.Row, Target.Column - 1) = DateDiff("s", Range("C1").Value, Now)
    End If
End Sub

En un módulo crea el siguiente procedimiento
Public Function valCrono(hoja as WorkSheet)   
       valCrono = DateDiff("s", hoja.Range("C1").Value, Now)   
End Sub

El parámetro hoja: Es la hoja en la que estás trabajando.
En la macro en que estás asignando el valor a la celda, también haces una llamada a la función valCrono y le indicas la celda en que quieres que se almacene su valor.
tuCelda = valCrono (hojaDeTrabajo)
Cualquier duda, me consultas y si es posible, me posteas el código en el que estás asignando el valor a las celdas.
Hola granpeke, muchas gracias por tu ayuda, el problema estaba en la macro que usaba para ordenar los datos, pero al darle vueltas a tu segunda respuesta he localizado el error y lo he corregido, ahora funciona a la perfección con la primera solución que me diste. Muchas gracias, me has ayudado muchísimo, no sabes la de tiempo que me has ayudado a ahorrar. Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas