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).


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.