天干地支-被玄学异化的古代周期历法(六)

天干地支:被玄学异化的古代周期历法(六)

/孔述

 

4)这里采用官方"万年历"

生成万年历,即公元124年至2103年间对应的天干地支。

先介绍制作方法,再说明使用方法。制作方法基本与上文相同。

O15=INDEX(MID("甲乙丙丁戊己庚辛壬癸",IF(MOD(ROW(A1),10)=0,10,MOD(ROW(A1),10)),1),,)&INDEX(MID("子丑寅卯辰巳午未申酉戌亥",MOD(ROW(A1)-1,12)+1,1),,)向下生成甲子、乙丑等干支组合。

P15=SEQUENCE(60,1,124,1)向下生成60个不间断的年号。

Q15=SEQUENCE(1,32,(P15+60),60)向左生成32个甲子年。

选定Q5AV15整行下拉至第74行。1980年(从公元124年起近2000年)的表格数据自动生成,对应的天干地支也随之生成。

若要查询某年对应的天干地支,只需在表中查询即可。例如2018年的天干地支为"戊戌",位于图中坐标颜色交汇处。若查询1997年,则为"丁丑"。左边红色区域及右边AW16处也会自动显示为"丁丑",无需在表中逐一查找数据。

如何实现自动查询结果?为展示效果,放大局部视图。

AW19为输入查询的年份,年份下方设有滑动按钮,点击上下键可调整年份,点击下键变为1996年,此时系统立即查出1996年为"丙子"。此按钮功能在开发工具中通过链接控制,此处不作详细讲解。

P14=IFERROR(AJ15&"-"&(AK15-1),AJ15&"-")向右拖动至AV列,生成14行的一行区间数。

AW14=LOOKUP(AW19,P15:AV15,P14:AV14)查询所查年份所在的区间

AW16=INDEX(O15:O74,MATCH(AW19,AX15:AX74,0))查询对应的天干地支

AX15=CHOOSECOLS(P15:AV74,MATCH(AW14,P14:AV14,0))所查年份所在的列

上表中所有颜色部分均通过条件格式自动标注,此处不作详细介绍。

现如查询1781

很多人会问,是否可以随时随地使用这个万年历,这与古人使用一本翻破了的万年历有何区别?无需万年历又该如何计算呢?关键在于如何计算年、月、日、时这四柱对应的天干地支,也就是人们常说的"四柱"

下面介绍"四柱"的具体计算方法:

(5)年干柱的计算:

(6)先查看下表

B3C3D3E3 分别为需要计算和查询的年、月、日、时。D4D5分别为对应的年干、年支,E4为结果。合显示。同理,E9E15E8分别为月、日、时干支,F5为万年历中自动查询的结果。例如2026年自动查询显示为"丙午",与计算结果一致。当E5正确时显示并高亮,错误时会警示。目前状态为√。

C4=IF(MOD(B3-3,10)=0,10,MOD(B3-3,10))                  计算年干数

C5=IF(MOD(B3-3,12)=0,MOD(B3-3,12)+12,MOD(B3-3,12))      计算年支数

D4=INDEX(数据基础!B2:K2,MATCH(C4,数据基础!B1:K1,))     自动查询年干

D5=INDEX(数据基础!B5:M5,MATCH(C5,数据基础!B1:M1,))    自动查询年支

E4=D4&D5                                            年干支组合

F3=INDEX(对照表!H:H,MATCH(B7,对照表!A:A,))             查询当年的阴历月

C6=IFS(C3=1,13,C3=2,14,OR(C3=3,C3=4,C3=5,C3=6,C3=7,C3=8,C3=9,C3=10,C3=11,C3=12),C3)

                                                   计算日支需用的数据

C9=IF(MOD(C8*2+F3,10)=0,10,MOD(C8*2+F3,10))          计算月干数

D9=INDEX(数据基础!B2:K2,MATCH(C9,数据基础!B1:K1,))     计算月干

D10=INDEX(数据基础!B9:M9,MATCH(F3,数据基础!B1:M1,))    计算月支  需用到阴历月

E9=D9&D10                                          月干支组合

日干支计算比较复杂:

CYMD 分别表示世纪(前两位202120)、年份(后两位21)、月、日。例如20266月初5

且月份需要判断奇偶:

F2=IF(MOD(C3,2)=0,6,0)

C15=IF(MOD(4*B14+INT(B14/4)+5*C14+INT(C14/4)+INT(3*(C6+1)/5)+F14-3,10)=0,10,MOD(4*B14+INT(B14/4)+5*C14+INT(C14/4)+INT(3*(C6+1)/5)+F14-3,10))              计算日干数

C16=IF(MOD(8*B14+INT(B14/4)+5*C14+INT(C14/4)+INT(3*(C6+1)/5)+F14+7+F12,12)=0,12,MOD(8*B14+INT(B14/4)+5*C14+INT(C14/4)+INT(3*(C6+1)/5)+F14+7+F12,12))      计算日支数

以上计算均需要用到前面"算日支需用"的数据。

D15=IF(INDEX(数据基础!B2:K2,MATCH(C15,数据基础!B1:K1,))=0,10,INDEX(数据基础!B2:K2,MATCH(C15,数据基础!B1:K1,))) 自动计算日干

D16=IF(INDEX(数据基础!B5:M5,MATCH(C16,数据基础!B1:M1,))=0,12,INDEX(数据基础!B5:M5,MATCH(C16,数据基础!B1:M1,))) 自动计算日支

时干支需要用到日干数、"时对应的干表"和对应的"时辰表"C18=INDEX(C21:C30,MATCH(D15,B21:B30,))生成时干

C19=INDEX(D33:D44,MATCH(F19,C33:C44,))生成时支

(7)阳历、阴历对照表:此对照表基本按沿袭的农历生成,主要用于上面计算月干支时需要用到阴历月。

仅就几个公式简单介绍:

D2=TEXT(A2,"yyyy-mm")转成公历年计算方式

E2=RIGHT(C2,LEN(C2)-FIND("",C2)) 提取农历月日,便于后期对照计算月支

G2=@SWITCH(TRUE,MID(C2,SEARCH("",C2)+LEN(""),SEARCH("",C2)-SEARCH("",C2)-LEN(""))="","",MID(C2,SEARCH("",C2)+LEN(""),SEARCH("",C2)-SEARCH("",C2)-LEN(""))="","十二",MID(C2,SEARCH("",C2)+LEN(""),SEARCH("",C2)-SEARCH("",C2)-LEN(""))) 提取农历大写月,因为出现""""月需要转换为可计算的数字,故还需转换为对应的小写数字。

I2=BYROW(E2:E73001,LAMBDA(x,IF(ISNUMBER(SEARCH("",x)),"",""))) 显示有闰月并高显红色,用于月支推算

有闰月的部分年份四年一闰局部

如果要继续随机查询,只需输入对应年月时辰,结果瞬间显示。

注意输入时辰会自动选择对应的"时支"并高显红色,

G32=--TEXT(E3,"HH") 即把带分的时间转为整时数,

F33=LOOKUP(G32,E33:E44,C33:C44) 根据整时数自动查到对应的时支。

至此,四柱计算出来了。注意,这里只是介绍基础算法,因为社会上各种计算规则不同,可能会有计算偏差。

此外,阴历、阳历存在区别,但称呼习惯不同而已。老黄历上的吉凶等只要熟悉规则,亦可函数计算。授予人以鱼不如授人以渔,主要介绍方法。欢迎各位方家及有兴趣的朋友交流、指正。