Modules |
5.91 Differenza tra due data usando il calendario commerciale (tutti gli anni di 360 giorni e tutti i mesi di 30 giorni) |
Cinzia |
Al contrario di Excel per il quale esiste la funzione giorno360(datainziale;datafinale), in Access non esiste una funzione intrinseca che effettui la differenza tra due date usando il calendario commerciale secondo il quale tutti gli anni contengono 360 giorni e tutti i mesi contengono 30 giorni. Inserendo però la seguente funzione in un modulo standard di un database e richiamandola da un campo calcolato di una query o da un controllo calcolato di una maschera o di un report, si otterrà anche in Access gli stessi risultati che si ottengono in Excel relativamente alla differenza tra due date calcolata considerando il calendario commerciale. Function Giorno360(ByVal dataIniziale As Date, ByVal dataFinale As Date, Optional metodo As Boolean = False) As Long If Not metodo Then 'MetodoAmericano If Day(dataIniziale) = 31 Then dataIniziale = DateSerial(Year(dataIniziale), Month(dataIniziale), 30) End If If Day(dataFinale) = 31 And Day(dataIniziale) < 30 Then dataFinale = DateAdd("d", 1, dataFinale) ElseIf Day(dataFinale) = 31 And Day(dataIniziale) >= 30 Then dataFinale = DateSerial(Year(dataFinale), Month(dataFinale), 30) End If Else 'Metodo Europeo If Day(dataIniziale) = 31 Then dataIniziale = DateSerial(Year(dataIniziale), Month(dataIniziale), 30) End If If Day(dataFinale) = 31 Then dataFinale = DateSerial(Year(dataFinale), Month(dataFinale), 30) End If End If Giorno360 = DateDiff("m", dataIniziale, dataFinale) * 30 + (Day(dataFinale) - Day(dataIniziale)) End Function In VBA la funzione di cui sopra sarà richiamata nel seguente modo: DifferenzaGiorni = Giorno360( DataIniziale, DataFinale, NASD)dove DataIniziale e DataFinale sono due oggetti di tipo Data/ora che delimitano il periodo, mentre NASD è un oggetto di tipo booleano che assumerà il valore True nel caso si vuole usare il metodo di calcolo europeo, mentre assumerà il valore False nel caso in cui si vuole usare il metodo di calcolo americano NASD (Associazione nazionale operatori di borsa, National Association of Securities Dealers). |