Volevo calcolare le fasi lunari con metodo astronomico, questo permette
un calcolo con precisione al minuto, attualmente utilizzo un metodo
utiizzando il numero d'Oro e l' Epatta pero' in questo modo a volte il
calcolo sballa di un giorno.

Per i calcoli astronomici esiste un libro Bibbia
Jean Meeus, Astronomia con il computer. Formule, metodi di calcolo,
esempi numerici. Salvo De Meis (curatore) Milano, Hoepli 1990. (232 pagine)

pero' e' irreperibile se non in lingua inglese. Girovagando ho trovato
un programmatore VB6 che ha implementato gli algoritmi del libro

http://www.it-lang-vb.net/download.asp?file=http://www.it-lang-vb.net/Archivio/Sorgenti/Fasi%20Lunari.zip&ID=685

ho leggermente modificato le funzioni passando invece della data odierna
(Now) una data da me scelta, mi serve fare i calcoli partendo sempre dal
primo del mese e poi non avendo a disposizione la Funzione Round ho
provato, seguendo i post di questa ML, ad implementare io una funzione
Round, pero' i calcoli non sono precisi non riesco a capire se gli
errori sono dovuti ad una difformita' della funzione Round di VB oppure
se chi ha implementato gli algoritmi ha commesso piccoli
errori,guardando l' ora ad esempio della luna nuova e confrontando i
risultati con quelli di questo sito :
http://www.marcomenichelli.it/fasilunari.asp
noto uno sfasamento di alcune ore per cui in taluni casi il giorno
risulta essere sbagliato, anche utilizzando via codice la funzione Calc
  ROUND o ROUNDUP non ottengo risultati precisi.

Allego le routine chissa' magari sotto l' ombrellone vi annoiate e ci
provate.






--
Cordiali saluti. Luca


Const PG = 3.14159265358979 'è la classica pi greca

Function data() as Date

Dim Y as Integer, M as Integer, D as Integer

Y = 2008
M = 10
D = 1

data = cDate( D & "/" & M & "/" & Y )
 
End Function 


Function JD(YYY As Integer, MMM As Integer, GGG As Integer) As Double
    Dim AAA As Long, BBB As Long
    If MMM < 3 Then MMM = MMM + 12: YYY = YYY - 1
    AAA = Int(YYY / 100)
    BBB = 2 - AAA + Int(AAA / 4)
    JD = Int(365.25 * (YYY + 4716)) + Int(30.6 * (MMM + 1)) + GGG + BBB - 1524.5
End Function

Function NDay(JD As Double) As Variant
    Dim ParteIntera As Long, ParteDecimale As Double
    Dim PPP As Long, AAA As Long, BBB As Long, CCC As Long, DDD As Long, EEE As 
Long
    Dim SCN As Double, MNT As Double, HRN As Double, GRN As Integer, MSN As 
Integer, ANN As Integer
    JD = JD + 0.5
    ParteIntera = Int(JD)
    ParteDecimale = JD - ParteIntera
    PPP = Int((ParteIntera - 1867216.25) / 36524.25)
    AAA = ParteIntera + 1 + PPP - Int(PPP / 4)
    BBB = AAA + 1524
    CCC = Int((BBB - 122.1) / 365.25)
    DDD = Int(365.25 * CCC)
    EEE = Int((BBB - DDD) / 30.6001)
    GRN = BBB - DDD - Int(30.6001 * EEE)
    HRN = Int(ParteDecimale * 24)
    ParteDecimale = ParteDecimale - HRN / 24
    MNT = Int(ParteDecimale * 1440)
    ParteDecimale = ParteDecimale - MNT / 1440
    SCN = Int(ParteDecimale * 86400)
    If EEE < 13.5 Then MSN = EEE - 1
    If EEE > 13.5 Then MSN = EEE - 13
    If MSN > 2.5 Then ANN = CCC - 4716
    If MSN < 2.5 Then ANN = CCC - 4715
    NDay = Format(GRN, "00") & "." & Format(MSN, "00") & "." & ANN & " ore " & 
Format(HRN, "00") & ":" & Format(MNT, "00") & ":" & Format(SCN, "00")
End Function

Function LunaNuovaPrecedente() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data - 30) / 365
    kk = Round (((YYY - 1900) * 12.3685),0)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Precedente Luna Nuova
    LunaNuovaPrecedente = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 
2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
    print NDay(LunaNuovaPrecedente)
End Function

Function PrimoQuartoPrecedente() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(Now) + DatePart("y", Now - 30) / 365
    kk = Round((YYY - 1900) * 12.3685) + 0.25
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Primo Quarto Precedente
    PrimoQuartoPrecedente = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT 
^ 2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    + 0.0028 - 0.0004 * Cos(MS * PG / 180) + 0.0003 * Cos(ML * PG / 180) 'per 
1° quarto
    print NDay(PrimoQuartoPrecedente)
End Function

Function LunaPienaPrecedente() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(Now) + DatePart("y", Now - 30) / 365
    kk = Round ((YYY - 1900) * 12.3685) + 0.5
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Luna Piena Precedente
    LunaPienaPrecedente = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 
2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
End Function


Function UltimoQuartoPrecedente() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(Now) + DatePart("y", Now - 30) / 365
    kk = Round((YYY - 1900) * 12.3685) + 0.75
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Ultimo Quarto Precedente
    UltimoQuartoPrecedente = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT 
^ 2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    - 0.0028 + 0.0004 * Cos(MS * PG / 180) - 0.0003 * Cos(ML * PG / 180)
End Function


Function LunaNuova() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data) / 365
    kk = RoundUp (((YYY - 1900) * 12.3685),0)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Luna Nuova del mese
    LunaNuova = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 2) - 
0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
   
   print NDay(LunaNuova)
End Function



Function PrimoQuarto() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.25),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Primo Quarto
    PrimoQuarto = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 2) - 
0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    + 0.0028 - 0.0004 * Cos(MS * PG / 180) + 0.0003 * Cos(ML * PG / 180)
  printNDay(PrimoQuarto)  
End Function



Function LunaPiena() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.5),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Prossima Luna Piena
    LunaPiena = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 2) - 
0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
 print NDay(LunaPiena)   
End Function


Function UltimoQuarto() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.75),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Ultimo Quarto
    UltimoQuarto = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 2) - 
0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    - 0.0028 + 0.0004 * Cos(MS * PG / 180) - 0.0003 * Cos(ML * PG / 180)
  print NDay(UltimoQuarto)  
End Function


Function LunaNuovaSuccessiva() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data + 30) / 365
    kk = RoundUp(((YYY - 1900) * 12.3685),0)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Successiva Luna Nuova
    LunaNuovaSuccessiva = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 
2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
    print NDay(LunaNuovaSuccessiva)
End Function



Function PrimoQuartoSuccessivo() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data + 30) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.25),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Primo Quarto Successivo
    PrimoQuartoSuccessivo = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT 
^ 2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    + 0.0028 - 0.0004 * Cos(MS * PG / 180) + 0.0003 * Cos(ML * PG / 180)
    print NDay(PrimoQuartoSuccessivo)
End Function


Function LunaPienaSuccessiva() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data + 30) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.5),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Luna Piena Successiva
    LunaPienaSuccessiva = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT ^ 
2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1734 - (0.000393 * TT)) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * 
PG / 180) _
    - 0.4068 * Sin(ML * PG / 180) + 0.0161 * Sin(2 * ML * PG / 180) _
    - 0.0004 * Sin(3 * ML * PG / 180) + 0.0104 * Sin(2 * FF * PG / 180) _
    - 0.0051 * Sin((MS + ML) * PG / 180) - 0.0074 * Sin((MS - ML) * PG / 180) _
    + 0.0004 * Sin((2 * FF + MS) * PG / 180) - 0.0004 * Sin((2 * FF - MS) * PG 
/ 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.001 * Sin((2 * FF - ML) * PG / 
180) _
    + 0.0005 * Sin((MS + 2 * ML) * PG / 180)
 print NDay(LunaPienaSuccessiva)   
End Function


Function UltimoQuartoSuccessivo() As Variant
    Dim YYY As Double, kk As Double, TT As Double, MS As Double, ML As Double, 
FF As Double
    YYY = Year(data) + DatePart("y", data + 30) / 365
    kk = Round((((YYY - 1900) * 12.3685) + 0.75),2)
    TT = kk / 1236.85
    MS = 359.2242 + 29.10535608 * kk - 0.0000333 * TT ^ 2 - 0.00000347 * TT ^ 3
    Do While Int(MS) > 360
        MS = MS - 360
    Loop
    ML = 306.0253 + 385.81691806 * kk + 0.0107306 * TT ^ 2 + 0.00001236 * TT ^ 3
    Do While Int(ML) > 360
        ML = ML - 360
    Loop
    FF = 21.2964 + 390.67050646 * kk - 0.0016528 * TT ^ 2 - 0.00000239 * TT ^ 3
    'Ultimo Quarto Successivo
    UltimoQuartoSuccessivo = 2415020.75933 + 29.53058868 * kk + 0.0001178 * (TT 
^ 2) - 0.000000155 * (TT ^ 3) _
    + 0.00033 * Sin((166.56 + 132.87 * TT - 0.009173 * (T ^ 2)) * PG / 180) _
    + (0.1721 - 0.0004 * TT) * Sin(MS * PG / 180) + 0.0021 * Sin(2 * MS * PG / 
180) _
    - 0.628 * Sin(ML * PG / 180) + 0.0089 * Sin(2 * ML * PG / 180) - 0.0004 * 
Sin(3 * ML * PG / 180) _
    + 0.0079 * Sin(2 * FF * PG / 180) - 0.0119 * Sin((MS + ML) * PG / 180) _
    - 0.0047 * Sin((MS - ML) * PG / 180) + 0.0003 * Sin((2 * FF + MS) * PG / 
180) - 0.0004 * Sin((2 * FF - MS) * PG / 180) _
    - 0.0006 * Sin((2 * FF + ML) * PG / 180) + 0.0021 * Sin((2 * FF - ML) * PG 
/ 180) _
    + 0.0003 * Sin((MS + 2 * ML) * PG / 180) + 0.0004 * Sin((MS - 2 * ML) * PG 
/ 180) _
    - 0.0003 * ((2 * MS + ML) * PG / 180) _
    - 0.0028 + 0.0004 * Cos(MS * PG / 180) - 0.0003 * Cos(ML * PG / 180)
print NDay(UltimoQuartoSuccessivo)    
End Function






'______________________________________________________________________________________________________________________


Function Round( n2r as Double, optional ndec as integer ) as Double
'____________________________________________

Dim initFormat as string, decpart as string
'____________________________________________
    
initFormat = "####"

  select case ndec
    case 0
      Round = cDbl(Format(n2r, initFormat))
    case 1 to 9
      decpart = "." & String(ndec, "#")
      Round = cDbl(Format(n2r,initFormat & decpart))
  End Select

End Function 

'______________________________________________________________________________________________________________________

Function RoundUp (Numero As Double, Cifre As Integer) As Double
Dim oFunction
      oFunction = CreateUnoService("com.sun.star.sheet.FunctionAccess")
      RoundUp = oFunction.callFunction("ROUNDUP", Array(Numero, Cifre))
End Function













---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a