Excel fornisce una serie di funzioni che restituiscono True o False a seconda del contenuto di una cella. Ad esempio, ISBLANK restituisce True se una cella è vuota, ISERR restituisce True se una cella contiene un valore di errore e ISTEXT restituisce True se una cella contiene testo. Potresti chiederti se è possibile determinare se una cella contiene un’ora.

La risposta breve è no, non è possibile: Excel non contiene alcuna funzione per indicare se una cella contiene un’ora. Il motivo è abbastanza semplice: gli orari e le date in Excel tecnicamente non sono altro che numeri. Una data è qualsiasi numero compreso tra 1 e 2958465, che rappresenta le date da 1/1/1900 a 12/31/9999. Se aggiungi una parte decimale al numero, questa rappresenta un’ora (0 è mezzanotte, 0,25 è le 6:00, 0,5 è mezzogiorno, ecc.).

Conoscendo l’intervallo di valori che può essere utilizzato per date e ore, oltre al fatto che una cella contenente un’ora deve essere formattata correttamente per visualizzare un’ora, puoi creare una formula che indicherà se una cella contiene un’ora:

=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)<="D9"), "Time Format","Not Time Format")

Questa formula controlla la formattazione applicata alla cella B2. Se la formattazione è uno dei formati comunemente usati per gli orari, restituisce il testo “Formato ora”. Se viene utilizzata una formattazione diversa, la formula restituisce “Formato non ora”.

Un approccio diverso consiste nel verificare se il valore nella cella B2 è un valore temporale valido. Puoi farlo usando una formula come la seguente:

=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")

La funzione funziona bene fintanto che la cella B2 contiene solo un’ora. Se la cella contiene sia una data che un’ora, la funzione restituisce sempre “Not a Time Entry”.

Per ottenere il meglio da entrambi i mondi, controllando i formati e il valore nella cella, prendi in considerazione la possibilità di creare una funzione definita dall’utente in VBA. Il motivo è semplice: VBA include la funzione IsDate che non solo guarda l’intervallo corrente del numero, ma controlla anche che la cella sia formattata come una data. La seguente macro fornisce un esempio di come si potrebbe creare una tale funzione:

Function IsTime(rng As Range) As Boolean     Dim sValue As String     sValue = rng.Cells(1).Text     On Error Resume Next     IsTime = IsDate(TimeValue(sValue))

On Error GoTo 0 End Function

Per utilizzare la funzione, utilizza la seguente formula in una cella:

=IsTime(B2)

La funzione legge come viene visualizzato il valore (utilizzando la proprietà text dell’oggetto cella) e quindi prova a convertirlo con la funzione TIMEVALUE. Se questa è una data (determinata dalla funzione IsDate), il display è un orario valido. Se non è una data, VBA genera un errore, che il codice è programmato per ignorare.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

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

Questo suggerimento (9699) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: