ビジネス課題への解決策(アイディア)と、新たな発想(+α)が見つかるIT情報メディア

Menu
  1. TOP
  2. データ活用
  3. Excelだけに存在する日付

Excelだけに存在する日付

  • LINEで送る
  • このエントリーをはてなブックマークに追加

今回は、少々懐かしく、そしてまだごくまれに出会うことのあるものです。

「Excelだけに存在する日付」と聞いて、すぐに「ピン!」と来るかたもいらっしゃると思います。
そうです。「1900/02/29」です。
(実は、もう1つあるのですが、それについては下の方で簡単に書いてあります)

1900/02/29:

1900/02/29という日付は、もちろん現実には存在しない日付です。
現実には存在しないのですが、Excelに「1900/02/29」を入力してみると、「日付」として認識されることが確認できます(※Excel for Macでは、標準では「1900/02/29」を入力できません。理由は後述しています)。

この「1900/02/29」が日付として認識されており、文字列としては認識されていないことは、セルに表示される位置が標準の左寄せではなく右寄せであることからもわかりますが、より確実なのは、このセルの表示形式を「日付」から「数値」に変えることです。

「1900/02/29」という日付は、「60」という数値に変わりました。

この60という数値は、日付型の内部データです。
日付型は、Excelに限らずある特定の日付を「0」または「1」として置き、そこからの経過日数で表しています。
Excelでは、「1900/01/01」を1日目としているので、「1900/02/29」は60日目、ということになります(存在しませんけどね)。

では、なぜExcelに「1900/02/29」という、実際には存在しない日付が用意されているのでしょうか?

これは、Windows OSが普及する前に大きなシェアを持っていた表計算ソフト「Lotus 1-2-3」との互換性を得るためと言われています。
きっと、Lotus1-2-3をご存じないかたもいらっしゃいますよね…
と書いている筆者も、実物に触れる機会はありませんでした。製品末期に、黄色い廉価ソフトメーカーから販売されていたのは店頭で見ているのですが。

この「1900/02/29」、「Lotus 1-2-3のバグ」と言われることもありますが、実際はLotus 1-2-3が全盛期だった当時のハードウェアのスペックから、「閏年は4年に1度」だけを処理するように割り切っていた、と聞いたことがあります。
だとすると、Lotus 1-2-3では2100年も02/29が存在したのだろうか?、という疑問が湧くのですが、実物がないので確認できず…ちなみに、Excelは「1900/02/29」以外はグレゴリオ暦に従っています。

設定で回避:

これを回避する方法を、Microsoftが案内しています。
それは、「1904年から計算する」というオプションです。

このオプションのデフォルト値は、

  • Windows版のExcel:オフ
  • Excel for Mac:オン
  • Excel Online:オフ固定(オプション無し)

となっています。

Windows版のExcelで設定するには、
[ファイル]-[オプション]-[詳細設定]-[次のブックを計算するとき]

[1904年から計算する]チェックボックス
をチェックします。

このチェックは、上記画面のとおりブック単位(=ファイル単位)に行います。
(以下、わかりやすいように「1904年から計算する」オプションが有効な状態を「1904年から計算する」設定、無効な状態を「1900年から計算する」設定、と記述します)

注意点:

この設定、
「1900/01/01を1日目としていたものを、1904/01/01を0日目とするように変更」
という変更なので、
「1904/01/01以前の日付は扱えない」のです。

確かに「1900/02/29」は扱えなくなりましたが…解決したと言ってよいものかどうか?
そして、内部数値「1」が表す日付が
「1900年から計算する」設定…1900/01/01
「1904年から計算する」設定…1904/01/02
と変更されたために、

  • 設定が異なるブック間でコピー&ペーストを行うと、日付が変わります。
    • 既にデータが入力されているExcelブックの設定を変更すると、日付が変わります。
  • リンクセルの場合も、リンク元とリンク先の設定が異なると、日付が変わります。

日付のズレを解決するには、手動で対応(値から1462を加減算)するようにMicrosoftから技術文書が出ています。 ( 1900 年と 1904 年の日付システムの違Excel

ちょっと手間ですね…

この設定にチェックを入れると:

[1904年から計算する]設定のときは、1904年以降の日付が扱えるようになるほか、時刻の計算で結果がマイナスになっても表示されるようになります。

おまけ:

「1900年から計算する」設定で数値「0」を日付に変換すると…これまた困った日付に…

日付を使わず時刻だけで計算しようとしたとき、この日付を見かけたかたもいらっしゃるかもしれませんね。
「1904年から計算する」設定では、数値「0」を日付に変換すると、上に書いたとおり

1904/01/01となります。

おまけその2:

データベースによっては、「特定の日付」より前の日付をマイナス数値で表すものもあるのですが、Excelは
「1900年から計算する」設定:「###~###」(扱えない値、の意)
「1904年から計算する」設定:絶対値が表す日付に「-」が付く
(例:1…1904/01/02、-1…-1904/01/02)
と処理されます。

「1904年から計算する」設定ときの動作は、先に記載した日付の計算がマイナスになったときも表示できるようになったことの副作用だと思いますが、マイナスの西暦って何でしょうね?

おまけその3:

前回参照していた、Office Open XML形式の仕様「ECMA-376 4th edition」( http://www.ecma-international.org/publications/standards/Ecma-376.htm )の定義には、「18.17.4 Dates and Times」に、日付型と時刻型の定義があります。

この記載によると、Office Open XML形式ファイルの仕様上は、(マイナス数値を使って)0001/01/01から扱うことができ、「1900/02/29」は存在しないことになっています(なので、1900/02/28より前の日付において、仕様とExcelの実装には差異があります)。
過去の「ECMA-376」では、「1900/02/29」は「古い表計算ソフトとの互換のため」として定義があったと記憶しているので、版が進んだことでその仕様は無くなったようです。
とはいえ、現行のExcelで扱うと、「おまけその2」で記載した動作になるのですけれども。


関連コンテンツ

グレゴリオ暦?ユリウス暦? データベースによって異なる、日付時刻型が扱える範囲

追記:Waha! Transformer 製品サイトの関連コンテンツ

Waha! Transformer の動作プラットフォーム

データの抽出や加工、連携にお悩みではありませんか?

20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。

> 純国産ETLツール「Waha! Transformer」

Waha! Transformer
メールマガジンの登録はこちらから
メルマガ登録 お問い合わせ