![見出し画像](https://assets.st-note.com/production/uploads/images/173297168/rectangle_large_type_2_7cab88c9283ff477d68fbf1f9d84a941.jpeg?width=1200)
上下さかさまで混同する日付を列挙する
お店では品質管理のため、封を開けたキャップに日付を記入している。
![](https://assets.st-note.com/img/1738454717-Jr507WsQvk6go2xHGVdK8alh.png)
すると、上下をひっくり返しても日付になっていることがあり「いつ開けたんだコレ?」となることがあった。
流石に半年も放置しないだろうけど、近い日付で混同すると困るということで、上下ひっくり返して区別が付かない日を列挙する。それだけの記事。
上下さかさまで読める数字の一覧
数字単位では、2, 3, 4, 5, 7は上下ひっくり返すと数字にならないので、それ以外を挙げればよい。
0→0
1⇀1
6⇀9
8⇀8
9⇀6
上下さかさまで日付になる日付
先ほど挙げた数字を組み合わせてできる日付について、元旦から大晦日まで挙げればよい。
その中で、混同するとヤバい(本来廃棄するべきが見落とされる)ものがどれくらいあるか、日数差によって吟味する。
ひとまず1月だけやってみる。
1/1⇀1/1:同日
1/6⇀9/1:約8か月差
1/8⇀8/1:約7か月差
1/9⇀6/1:約5か月差
1/10⇀01/1:日付として不成立
1/11→11/1:約10か月差
1/16→91/1:日付として不成立
1/18→81/1:日付として不成立
1/19→61/1:日付として不成立
書き下した学びとして:
「10日」をひっくり返した「01日」のゼロパディングは、手書きすることがないので、混同を考える必要がない。
「11日」は上下反転して「11月」になるけど、「12日」以降は月として存在しないので考えなくてよい。
教訓を踏まえて2月以降を評価する
総当たりで挙げるのがメンドかったので、スプシで総当たりして、上下反転しても日付として成立するものを挙げた。
![](https://assets.st-note.com/img/1738453230-NukgrBiv7Q0ZecnVWzPlJFS4.png?width=1200)
結論の要約
上下さかさまで日付として成立するのは25通り。
さかさまの日付と混同する恐れがあるのは20通り。
5通り(1/1, 6/9, 8/8, 9/6, 11/11)はさかさまにしても同じ日付。
さかさまの日付までの差分が100日以内になるのは6通り。TOP3は:
8/6 ⇀ 9/8:33日差
9/11 ⇀ 11/6:56日差
6/8 ⇀ 8/9:62日差
下線付けて是正策なんて話もあったが、毎月の頻度で棚卸ししていれば大半のケースで問題にならないように思えた。
計算過程の苦労
月はMONTH関数、日はDAY関数で取り出せる。10の位は10で割ってFLOORで切り捨て、1の位はMOD関数で10で割った余りとして取り出せる。
数字の変換は別のところにテーブルつくってVLOOKUP関数で参照した。
位置をひっくり返したら余裕じゃないかと思ったら、愚直にやると「01/01」をひっくり返して「10/10」に変換されてしまう。元の数が10に満たない場合は、1の位は1の位にひっくり返す処理が必要。
ひっくり返した日付をDATE関数で求めると(J列)、関数の仕様によって存在しない91月を入力したDATE(2025, 91, 1)は、91か月後の日付を返してしまう問題があった。
先に得た教訓から「10」や「11より後」を除外する判定(K列)を入れて対処した。
2025同士で日付を作ると差分がマイナスになることがあった。条件分岐を入れて、来年の日付と比較した。
![](https://assets.st-note.com/img/1738478435-3Y5qOpnsbSxkLZFX0cQT8Boh.png?width=1200)
ヒットしない数字は#N/Aとなったり
「10」や「11より後」はK列でFALSEにしたり
いいなと思ったら応援しよう!
![odapeth](https://assets.st-note.com/production/uploads/images/46576640/profile_af3b0c2604dc408a4c9c62099394d9e5.jpg?width=600&crop=1:1,smart)