Vinay usa una hoja de cálculo de Excel para la entrada de datos. La información se ingresa en la columna A y a Vinay le gustaría tener una forma de agregar automáticamente una hora en la columna B, adyacente al valor ingresado en la columna A, que indica cuándo se ingresó el valor.

Hay varias formas diferentes de realizar esta tarea. La primera es ingresar manualmente una hora seleccionando la celda adyacente en la columna B y presionando Ctrl + Shift +; (ese es el punto y coma). Este atajo ingresa la hora actual en la celda. El problema con este enfoque, por supuesto, es que no es automático y requiere algo de movimiento y pulsaciones de teclas adicionales para implementarlo.

Un mejor enfoque sería utilizar una fórmula para ingresar la hora. La función AHORA devuelve la fecha y hora actuales, y puede usarla en una celda de esta manera:

=NOW()

Por supuesto, esta fórmula simple se actualiza cada vez que se vuelve a calcular la hoja de trabajo. Eso significa que la función devuelve la hora actual cada vez que ingresa un valor en la columna A. Esto no es deseable porque no desea que se actualicen las horas anteriores. Podría intentar usar una fórmula para verificar si hay algo en la columna A, como de esta manera:

=IF(A3="","",IF(B3="",NOW(),B3))

El problema es que una fórmula como esta introduce una referencia circular en la hoja de trabajo, lo que presenta una gran cantidad de desafíos con los que trabajar. Un mejor enfoque es crear una macro que se ejecute automáticamente cada vez que se ingrese algo en la columna A. Haga clic con el botón derecho en la pestaña de la hoja de trabajo utilizada para la entrada de datos y seleccione Ver código en el menú contextual. Verá la ventana Código para la hoja de trabajo en el Editor de Visual Basic y luego ingrese esto en la ventana:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim rCell As Range     Dim rChange As Range          On Error GoTo ErrHandler     Set rChange = Intersect(Target, Range("A:A"))

If Not rChange Is Nothing Then         Application.EnableEvents = False         For Each rCell In rChange             If rCell > "" Then                 With rCell.Offset(0, 1)

.Value = Now                     .NumberFormat = "hh:mm:ss"

End With             Else                 rCell.Offset(0, 1).Clear             End If         Next     End If

ExitHandler:

Set rCell = Nothing     Set rChange = Nothing     Application.EnableEvents = True     Exit Sub ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Con la macro en su lugar, cada vez que ingrese algo en una celda en la columna A, la celda adyacente en la columna B contendrá la fecha y la hora (formateada para mostrar solo la hora). Si elimina algo en la columna A, la celda adyacente en la columna B también se borra.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (12811) se aplica a Microsoft Excel 2007, 2010 y 2013. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Recording_a_Data_Entry_Time [Grabando una hora de entrada de datos].