排八字排大運,可以用excel搭建一個表格實現(xiàn)嗎?試一下吧
說干就干,經(jīng)過數(shù)日嘗試,終于實現(xiàn)了手機上排盤軟件的主要功能。
界面如下:
主要功能:
1,在黃色表格處,輸入男女性別和陽歷生辰,表格可自動計算出四柱干支及十神屬性。
2,點擊表中排大運按鈕,則表格下半部分自動計算出生辰對應(yīng)的大運,當(dāng)前大運自動用綠色背景著重顯示。當(dāng)前流年用棕色背景著重顯示。
在表格創(chuàng)建中,地支藏干,對應(yīng)于日元的十神屬性,12生旺死絕表,空亡,60甲子納音這幾項內(nèi)容,主要用VLOOKUP函數(shù)以查詢模式從子表格提取,比較簡單。干支對應(yīng)的某一個字,用MID函數(shù)來提取文本。
其他的,用NOW函數(shù)顯示當(dāng)前時間。
陽歷與陰歷的轉(zhuǎn)化,采用了簡單的函數(shù)形式,陰歷=MID(' 甲乙丙丁戊己庚辛壬癸',MOD(TEXT(G3,'[$-130000]e')-3,10)+1,1)&MID('子丑寅卯辰巳午未申酉 戌亥',MOD(TEXT(G3,'[$-130000]e')-4,12)+1,1)&'年'&IF(TEXT(G3,' [$-130000]m')*1=12,' 臘',IF(TEXT(G3,' [$-130000]m')*1=1,' 正',TEXT(G3,' [$-130000][DBNum1]m')))&'月'&IF(TEXT(G3,' [$-130000]d')-9<=1,'初',IF(TEXT(G3,' [$-130000]d')-29>=1,'卅',IF(TEXT(G3,' [$-130000]d')-19>=1,'廿','十')))&IF(RIGHT(TEXT(G3,' [$-130000]d'),1)*1=0,'',TEXT(RIGHT(TEXT(G3,' [$-130000]d'),1)*1,'[DBNum1]d'))&'日',
公式中G3是陽歷所在單元格。
其它信息的提取,用了INDEX與MATCH的組合函數(shù)。
過程中遇到的難點主要有兩個,
1,陽歷生辰如何轉(zhuǎn)化為四柱八字?
2,在四柱八字基礎(chǔ)上如何匹配出大運信息?
這些對于老師傅來說這些都不難,但對于excel中自動運算,已超出了個人舊有的知識范圍,只能在學(xué)習(xí)中解決。
一般函數(shù)不能實現(xiàn)問題中較復(fù)雜的邏輯運算,最后采用excel VBA功能來實現(xiàn)了它。
由陽歷轉(zhuǎn)化為干支紀(jì)年的四柱,涉及到歷法的基礎(chǔ)內(nèi)容,而地球并非正圓,二十四節(jié)每節(jié)跨過黃經(jīng)15度,冬春節(jié)日間隔稍長,夏秋節(jié)日間隔稍短,最靠譜的辦法是用天文臺的數(shù)據(jù)來修正,這是一般人不能實現(xiàn)的事。
四柱的轉(zhuǎn)換,借用了已有的兩個VBA模塊,一個校正節(jié)氣,一個換算。
節(jié)氣換算代碼如下:
四柱換算代碼如下:
使用上面兩個excel的代碼模塊,第一個問題的四柱換算解決。
第二個問題是大運推算。同樣涉及二十四節(jié)的確定及起運時刻的確定,并且每段大運在不同年份,且要自動生成表格一一呈現(xiàn),一開始感覺很難,不過對vba有了一些了解后,再找成熟的工具模板容易了不少,看懂了代碼,就可以隨便拿捏它。
推算大運的代碼如下:
此前,個人對于VBA一竅不通,深入了解后,感覺是挺有用,這并不是一個落伍了的工具,如果經(jīng)常處理復(fù)雜的流程表格,還是非常值得花些時間學(xué)一學(xué)的。
成年人已經(jīng)對很多事熟視無睹,能做一些挑戰(zhàn)自己知識邊界的事,有動力又好玩,這是近來有益的一次收獲。
聯(lián)系客服