Hallo,
habe die folgende VBA-Funktion zur Berechnung des Sonnenuntergangs an einem bestimmten Geo-Punkt:
übergeben werden die Daten: Längengrad, Breitengrad, Tag im Jahr, Zeit in Stunden, Zeitdifferenz zur Weltzeit.
Leider funktioniert die Berechnung nicht. Kann mir jemand sagen, wo der Fehler liegt oder - noch besser - eine funktionierende Lösung hier reinschreiben? Ausserdem interessant: die Berechnung des Zeitpunkts, zu dem die Sonne bei einer bestimmten Gradzahl überm Horizont steht. Diese Daten sind wichtig für eingrößeres Projekt mit dem jüdischen Kalender, das ich zunächst in VBA lösen möchte, um es später zu übertragen.
Option Explicit
Const Pi = 3.14159265358979
Dim Lat, Lng As Double
Function RAD() As Double
RAD = Pi / 180
End Function
Function SunHeight() As Double
SunHeight = (-50# / 60#) * RAD
End Function
Function Sun_Declination(ByVal T As Double) As Double
Sun_Declination = 0.409526325277017 * Sin(1.69060504029192E-02 * (T - 80.0856919827619))
End Function
Function Time_Difference(ByVal Declination As Double) As Double
Time_Difference = 12# * Application.WorksheetFunction.Acos((Sin(SunHeight) - Sin(Lat * RAD) * Sin(Declination))) / (Cos(Lat * RAD) * Cos(Declination)) / Pi
End Function
Function Time_Equation(ByVal T As Double) As Double
Time_Equation = -0.170869921174742 * Sin(3.36997028793971E-02 * T + 0.465419984181394) - 0.129890681040717 * Sin(1.78674832556871E-02 * T - 0.167936777524864)
End Function
Function Sunrise(ByVal T As Double) As Double
Dim SD As Double
SD = Sun_Declination(T)
Sunrise = 12 - Time_Difference(SD) - Time_Equation(T)
End Function
Function SunDown(ByVal T As Double) As Double
Dim SD As Double
SD = Sun_Declination(T)
SunDown = 12 + Time_Difference(SD) - Time_Equation(T)
End Function
Sub Display_Results()
Dim la, ln As String
Dim DiY, hour, td_utc As Double
Dim rise, down, equa, dekl As Double
la = Replace(Worksheets(1).Range("C6"), ".", ",")
ln = Replace(Worksheets(1).Range("C5"), ".", ",")
Lat = CDbl(la)
Lng = CDbl(ln)
DiY = CDbl(Worksheets(1).Range("C7"))
Debug.Print Lng
Debug.Print Lat
rise = Sunrise(DiY)
rise = rise - Lng / 15# + Worksheets(1).Range("C9")
down = SunDown(DiY)
down = down - Lng / 15# + Worksheets(1).Range("C9")
Worksheets(1).Range("C11") = rise
Worksheets(1).Range("C12") = down
Worksheets(1).Range("C13") = Time_Equation(DiY)
Worksheets(1).Range("C14") = Sun_Declination(DiY)
End Sub
|