Vinay utilizza un foglio di lavoro Excel per l’immissione dei dati. Le informazioni sono inserite nella colonna A e Vinay vorrebbe avere un modo per aggiungere automaticamente un tempo nella colonna B, adiacente al valore inserito nella colonna A, che indica quando il valore è stato inserito.

Esistono diversi modi per eseguire questa operazione. Il primo è inserire manualmente un’ora selezionando la cella adiacente nella colonna B e premendo Ctrl + Maiusc +; (questo è il punto e virgola). Questa scorciatoia immette l’ora corrente nella cella. Il problema con questo approccio, ovviamente, è che non è automatico e richiede alcuni movimenti e sequenze di tasti in più per l’implementazione.

Un approccio migliore sarebbe usare una formula per inserire l’ora. La funzione ORA restituisce la data e l’ora correnti e puoi usarla in una cella in questo modo:

=NOW()

Naturalmente, questa semplice formula viene aggiornata ogni volta che il foglio di lavoro viene ricalcolato. Ciò significa che la funzione restituisce l’ora corrente ogni volta che si immette un valore nella colonna A. Ciò non è desiderabile perché non si desidera aggiornare l’ora precedente. Potresti provare a usare una formula per verificare se c’è qualcosa nella colonna A, come in questo modo:

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

Il problema è che una formula come questa introduce un riferimento circolare nel foglio di lavoro, che presenta tutta una serie di sfide con cui lavorare. Un approccio migliore è creare una macro che venga eseguita automaticamente ogni volta che viene inserito qualcosa nella colonna A. Fare clic con il pulsante destro del mouse sulla scheda del foglio di lavoro utilizzata per l’immissione dei dati e scegliere Visualizza codice dal menu contestuale. Vedrai la finestra del codice per il foglio di lavoro nell’editor di Visual Basic, quindi inseriscilo nella finestra:

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 in posizione, ogni volta che inserisci qualcosa in una cella nella colonna A, la cella adiacente nella colonna B conterrà la data e l’ora (formattata per mostrare solo l’ora). Se elimini qualcosa nella colonna A, viene cancellata anche la cella adiacente nella colonna B.

Si noti inoltre che è possibile modificare l’impostazione della proprietà NumberFormat per riflettere il modo in cui si desidera visualizzare la data. Ad esempio, è possibile passare al formato dell’ora di dodici ore modificando “hh: mm: ss” in “h: mm: ss AM / PM”.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3116) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: