本帖最后由 jdwang1000 于 2011-11-23 12:03 编辑
VBA 万年农历新月及24节气查询( 计算范围 -9999 ~ 9999)
在2011-09-06發表了EXCEL 純函數24節氣的計算經過了2個多月後
終於完成了 VBA版的萬年農曆新月及24節氣查詢
本農曆及24節氣資訊主要參考來源為以下三處
天文與曆法 ( -7000 ~ 7000 ) http://bieyu.com/
寿星天文历(天文历书工具軟體下載) http://www.fjptsz.com/xxjs/xjw/sxwnl.rar
《天文算法》译著——许剑伟 (也是寿星天文历的開發者)
http://www.astronomy.com.cn/bbs/forum.php?mod=viewthread&tid=112225
本VBA 計算 200年的農曆及24節氣約需時 0.65秒 , 1000年約 2.96秒 , 5000 年約 14.1秒 , 20000 年約 55秒
( 硬體規格為 Intel Core™2 Quad CPU 2.4GHz 4G Ram Windows 7 作業系統 )
本 EXCEL工作簿操作說明如下 :
在 [ B1 ] 輸入所要西元年份 其範圍為 [ -9999 ] ~ [ 9999]
在 [ B2 ] 輸入所要的資料年數
例如若需要西元 1000 ~ 3060 年的農曆新月及24節氣資訊
則在 [ B1 ] 輸入 1000 在 [ B2 ] 輸入 2060
如此即可獲得自西元 1000 年起 至西元 3060 年 共2060年的農曆新月及24節氣資訊
若在 [ B1 ] 輸入 -3214 ( 公元前 3215年 ) 在 [ B2 ] 輸入 1052
如此即可獲得自 -3214 年起 ( 公元前 3215 年 ) 至 -2214 年止 ( 公元前 2215 年 ) 共1000年的農曆新月及24節氣資訊
[ B1 ] 輸入 [ 0 ] 代表公元前 1 年
[ B1 ] 輸入 [ -1 ] 代表公元前 2 年 依此類推
本VBA運算出的農曆及24節氣點與天文與曆法網站 http://bieyu.com/ 幾乎完全一致 (最大誤差1秒 --> 那是浮點運算小數進位時所造成)
(天文與曆法的所有農曆閏12月其年份有誤 --> 顯示為下一年的年份)
例 3359/01/21 應為農曆 3358年戊午年 ( 馬 )閏十二月初一 星期日
但天文與曆法為陰曆 3359年閏12月 1日
在 [ C ] [ F ] [ J ] 欄中的日期為若為 1900/01/01 ~ 9999/12/31 為EXCEL 的日期時間格式可做算術使用
在 [ C ] [ F ] [ J ] 欄中若前方有 [ T ] 英文字母出現
則代表此日期為 1900/01/01 之前的日期則為文字格式
因EXCEL 日期時間格式的起始值為 1900/01/01 超過此日期之前 EXCEL 並無法識別因此需轉為文字格式方能正常運作
此程式與 (寿星天文历(天文历书工具) )會有誤差至最大數小時是因為 寿星天文历少了以下的修正項
c = -0.000012932 * (y - 1955)^2
所以在 -9999 ~ 1955 及 2005 ~ 9999 間若年代越遠則誤差會越大 ( 寿星天文历會較快 )
此修正項之說明及參考資訊如下 :
Since the values of ΔT for the interval 1955 to 2005 were derived independent of any lunar ephemeris,
no correction is needed for this period. The uncertainty in ΔT over this period can be estimated from scatter in the measurements.
以上修正項請參閱NASA網站 http://eclipse.gsfc.nasa.gov/SEcat5/deltatpoly.html
|