見出し画像

上下さかさまで混同する日付を列挙する

お店では品質管理のため、封を開けたキャップに日付を記入している。

11/1か1/11かどっちやねん

すると、上下をひっくり返しても日付になっていることがあり「いつ開けたんだコレ?」となることがあった。

流石に半年も放置しないだろうけど、近い日付で混同すると困るということで、上下ひっくり返して区別が付かない日を列挙する。それだけの記事。


上下さかさまで読める数字の一覧

数字単位では、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月以降を評価する

総当たりで挙げるのがメンドかったので、スプシで総当たりして、上下反転しても日付として成立するものを挙げた。

スプシで計算

結論の要約

  • 上下さかさまで日付として成立するのは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同士で日付を作ると差分がマイナスになることがあった。条件分岐を入れて、来年の日付と比較した。

フィルターせず1月を全表示したもの
ヒットしない数字は#N/Aとなったり
「10」や「11より後」はK列でFALSEにしたり

いいなと思ったら応援しよう!

odapeth
「文章でメシを食う」の道を開くため、サポートいただけると励みになります。それを元手にメシを食ってメシレポします。

この記事が参加している募集