★私の万年暦に大きなミスが2020年01月27日 23:45:46

▲私の参覲交替(参勤交代)研究の中で大きな役割を演じたのは膨大な大きさの暦である。西暦1501年から1872年12月2日まである。それに相応する和暦を記入して作成してある。和暦の年月日を入れれば西暦の年月日と曜日が出る。本当に必要なのは1600年以降である。研究上では出発月日と到着月日との正確な日数計算に不可欠であった。何せ和暦では大月は30日、小月は29日、時には閏月というおまけが付く。大月と小月も規則的に西暦みたいに並んでいることはない。そこで西暦換算が計算上必要になったのである。
▲調子に乗って作成したのが西暦万年暦と和暦万年暦。これが研究上必須という訳ではない。遊びである。今日ファイルの中から見つけた2007年のそれは実に正確である。当時は1500年代、1600年代、1700年代、1800年代(1872年まで)の4つの表を作っていたので、VLOOKUP関数も複雑であった。合わせて10万行を超える一つの表など作れなかった。今はそれが可能である。104万行を誇る。
▲そこで、4つの表を1つの表にまとめた。作成したのは2018年。そこにミスが生じた。それは西暦万年暦である。今になって気が付いた。
①28日までしか出ない。
②和暦の表示(己丑、庚寅、辛卯‥‥)が出ない。
この②はすぐ分かったので修正した。
一番の問題は①である。ミスの原因は、4つの表を元に作った関数式が、1つになった表なのにそのまま使われていたことだった。
●4つの時の関数
=IF(AND($A75<=18721202,$A75>=18000101),DGET(表1!$BB$3:$BQ$36527,15,K74:M75),IF(AND($A75<=17991231,$A75>=17000101),DGET(表1!$AK$3:$AZ$36527,15,K74:M75),IF(AND($A75<=16991231,$A75>=16000101),DGET(表1!$T$3:$AI$36528,15,K74:M75),IF($A75<=15991231,DGET(表1!$A$3:$R$36528,15,K74:M75)))))
●1つの時の関数
=IF(AND($A76<=18721202,$A76>=15000101),DGET(表1!$B$3:$V$146091,15,K75:M76))
▲画像は西暦万年暦(1600年10月※慶長5.9.15関ヶ原の戰)