Calcolo sulle date e sugli orari tramite funzioni native (segue) (aggiornato al 08/07/03) Funzioni native per le date Continuiamo la panoramica dei calcoli con le date, esaminando alcune delle funzioni native del VBA che permettono di gestirle. Date abbiamo già visto nella pagina precedente l'impiego di questa parola; è opportuno riprenderla per sottolineare che viene utilizzata in contesti diversi con significati diversi :
in questo esempio interroghiamo l'orologio interno e otteniamo il giorno della settimana in una finestra di messaggio, che porta nella barra del titolo il testo contenuto nell'istruzione Title:
Dim X As Date
Funzioni native per gli orari Time questa funzione restituisce un valore di tipo Date con l'orario corrente; quest'esempio mostra una finestra di messaggio con l'orario corrente:
Dim X As Date L'esempio è per vedere il costrutto, perchè in realtà per avere una messagebox con l'ora di sistema sarebbe sufficiente una semplice istruzione, così: MsgBox Time
TimeValue questa funzione restituisce un valore Variant (Date) contenente un orario. Utile quando si voglia calcolare la differenza tra due orari. Questo esempio considera due celle, ad esempio la A1 e la B1 con due orari immessi, formato celle impostato a Ora, e restituisce la differenza in C1.
Sub miaora() Ricordo che tutto ciò che riguarda date ed orari NON può avere valore negativo, quindi dovremo sempre sottrarre l'orario minore da quello superiore, e non viceversa. Inoltre le ore partono dalle 0.0.0 e terminano alle 23.59.59. Se dobbiamo fare la differenza, per esempio tra le 17.30 e le 01.30, per calcolare un turno di lavoro che inizia alle 5.30 del pomeriggio e termina alle 01.30 di notte, non possiamo fare 01.30 - 15.20, perchè le 01.30 appartengono al giorno dopo. Infatti una differenza come l'esempio, viene vista come differenza tra le 5.30 del pomeriggio e le 01.30 di mattina, ma dello stesso giorno, e quindi negativa, con manifesta irritazione di Excel che segnala una serie infinita di cancelletti (#). Andrà infatti sommata la differenza tra le 23.59.59 e le 17.30, e tra le 01.30 e le 0.0.0 per ottenere il totale delle ore del turno.
TimeSerial questa funzione restituisce un valore Variant (Date) che contiene l’orario corrispondente a un’ora, minuto e secondo specifici. Utile quando si voglia restituire un orario per differenza non da un'altro orario, ma da un certo numero di ore, minuti, secondi, da sottrarre ad un determinato numero di ore. Esempio (banale): supponiamo di voler sapere che ore saranno togliendo 5 ore e 25 minuti alle 17. Per meglio capire, vediamo prima la sintassi della funzione:
TimeSerial(ora, minuti, secondi)
E' necessario quindi fornire tutti e tre gli argomenti, (ore,minuti,secondi), separati da una virgola. Poichè la funzione consente di eseguire "direttamente" la differenza tra due valori ora, meno i minuti, meno i secondi, un istruzione va compilata in questo modo:
TimeSerial(12 - 6, -15, 0) Per indicare un'ora specifica, quale 11.59.59, ciascun argomento della funzione TimeSerial dovrà essere rappresentato da un numero incluso nell'intervallo di valori validi per quell'argomento. I valori validi per le ore vanno da 0 a 23, per i minuti e per i secondi da 0 a 59. Se un qualsiasi argomento non rientra nell'intervallo valido specifico dell'argomento, verrà incrementato all'unità superiore successiva in modo appropriato. Se si specifica, ad esempio, 75 minuti, l'argomento "minuti" verrà valutato come 1 ora e 15 minuti. Se si usasse un'ora + frazione di ora come 16,30 , verrà valutato solo l'argomento "ora" e non i minuti dopo la virgola. Se volessimo fare un esempio su un foglio di lavoro, dovremmo vedere una situazione del genere:
dove in D3 abbiamo l'ora a cui vanno sottratte:
in C3 vorremo il valore restituito dalla funzione TimeSerial, che fornirà questo risultato:
e ora vediamo la procedura della macro:
Sub Differenzaore()
'ora si assegnano a
tre variabili i valori contenuti nelle celle Attenzione: il formato delle celle da D a G 3 è "generale", in C3 provvederà il codice a formattare in formato personalizzato h.mm.ss. AM/PM. Se vorrete, potrete preimpostare la cella di destinazioni in un vostro formato preferito, esempio: personalizzato, h.mm.ss e la data sopra la vedreste 11.40.00 Capisco che siano argomenti un pò ostici, ma tant'è, e consiglio quindi di munirsi di santa pazienza e provare senza arrabbiarsi, per le proprie esigenze. E' sempre meglio comunque aiutarsi con la guida in linea.
Buon lavoro. |