六曜(先勝・友引・先負・仏滅・大安・赤口)を数式で計算しようと思ったら、月齢計算が必要になるので、なかなかにめんどくさい。なのに Excelでカレンダーを作りたいという人に限って「六曜も表示したいなー」などと気軽にいい始めるのである。
こういう時は、WebAPIの力を借りよう。暦APIが jsonデータを提供してくれているので、これを使えば六曜でも十支十二支でも簡単に計算できる。旧暦カレンダーなんて作らなくてもいい。
六曜=LET( date,A1, key,"rokuyou", url,"http://koyomi.zingsystem.com/api/?mode=d&cnt=1", ty,"&targetyyyy="&YEAR(date), tm,"&targetmm="&TEXT(date,"mm"), td,"&targetdd="&TEXT(date,"dd"), ws,WEBSERVICE(url&ty&tm&td), IFERROR(MID(ws,FIND(key,ws)+10,2),"") )
Excel2021より前のバージョンだと LETが使えないので、定義付けせずにダラダラ書くことにはなるけど、Excel2013以上ならこれで計算できる。
十支十二支は2つをくっつけようと思ったら長くなるので、部分抽出してからいらない部分を消せばいいかな。TEXTSPLITを使えるならそっちでやってもいいけど。
十支十二支=LET( date,A1, key,"zyusi", url,"http://koyomi.zingsystem.com/api/?mode=d&cnt=1", ty,"&targetyyyy="&YEAR(date), tm,"&targetmm="&TEXT(date,"mm"), td,"&targetdd="&TEXT(date,"dd"), ws,WEBSERVICE(url&ty&tm&td), IFERROR(REPLACE(MID(ws,FIND(key,ws)+8,15),2,13,""),"") )
干支なら、MOD関数を使えば計算できるからそっちは割愛。