Giorno360 PDF Stampa E-mail
Scritto da Cinzia Pagani   
Venerdì 18 Agosto 2006 01:00

Nel mondo assicurativo e in alcuni tipi di contabilità si usa in alcuni casi calcolare la differenza tra 2 date come se tutti i mesi fossero di 30 giorni.

Excel dispone di una funzione adatta a questo scopo Giorno360 che ha questa sintassi:

 Giorno360(data_iniziale; data_finale; metodo) 

Dove data_iniziale e data_finale sono le due date che delimitano il periodo di cui si desidera conoscere il numero di giorni. Se data_iniziale è posteriore a data_finale la funzione restituisce un numero negativo.

Metodo è un valore logico che identifica il metodo da utilizzare nel calcolo europeo o americano.

Ho riprodotto in VB la stessa funzionalità della funzione Excel in modo tale che possa essere utilizzata anche in Access dove  questa funzione non è presente nativamente.

Inserite questo codice in un modulo :

'DataIniziale e dataFinale delimitano il periodo preso in considerazione
'Metodo se Falso o Omesso utilizza il metodo Americano NASD (Associazione
' nazionale operatori di borsa, National Association of Securities Dealers).
' se vero utilizza il metodo Europeo
Function Giorno360(byval dataIniziale As Date, byval dataFinale As Date, Optional
metodo As Boolean = False) As Long
If Not metodo Then 'Metodo Americano
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

 

E per provare in finestra immediate scrivete:

Es: ? Giorno360(Cdate("2006/12/1"), Cdate("2006/10/31"), 0) = -30

  ? Giorno360(Cdate("2006/12/1"), Cdate("2006/10/31"), -1) =-31

Oppure

  ? Giorno360( #2006/12/1#, #2006/10/31#, 0) = -30

  ? Giorno360(#2006/12/#,#2006/10/31#, -1) =-31

 

Nota

Le date devono essere immesse utilizzando la funzione CDate o DateSerial o racchiudendole tra #,  oppure devono essere il risultato di altre formule o funzioni. Possono verificarsi dei problemi se le date vengono inserite come testo.


Sistema operativo: WIN32
Applicazioni: Access 97, Access 2000, Access 2002/XP, Access 2003

 

Ultimo aggiornamento Giovedì 02 Luglio 2009 11:28