MW211 EXIT

devlog
Excel/1900年02月29日
2018年10月27日
Excelの世界では、存在しないはずの「1900年02月29日」が存在する。

「4年に一度の閏年は、100年に一度閏年ではなくなる(但し400年に一度は閏年になる)」
という法則からすると、「2000年02月29日」は存在しても
「1900年02月29日」や「2100年02月29日」は存在しないことになる

ただ、競合するLotus1-2-3の仕様が「1900年02月29日」が存在するものだった(*1)ので
Excelもそれに合わせて今日に至っているという事情のようだ
*1:メモリ節約のため「100年に一度閏年ではなくなる」を端折ったとの話も

従って、シリアル値を日付に変換する場合、
基本的に「シリアル値1=1900年01月01日」から日数を加算していく形となるが
「1~59」の間はこれが遵守されるが、「シリアル値60=1900年02月29日」
「シリアル値61=1900年03月01日」なので、「61~」は前述の法則性から
敢えて一日引いてあげなければなない
┌───┬──────────────────────────────────┐
│ 1~59│1900年01月01日の(シリアル値 - 1)日後                                │
├───┼──────────────────────────────────┤
│60    │1900年02月29日(本来はありえない)                                    │
├───┼──────────────────────────────────┤
│61~  │1900年01月01日の(シリアル値 - 2)日後                                │
└───┴──────────────────────────────────┘

ちなみに、「2100年02月29日」は存在しない
┌──────────────────────────────────────┐
│・シリアル値73109=2100年02月28日                                           │
│・シリアル値73110=2100年03月01日                                           │
└──────────────────────────────────────┘
→あくまで「100年に一度閏年ではなくなる」を端折ったのではなく
  「1900年02月29日」だけ(前述の事情による)特例であるという扱いである
分類:Excel