エクセルは存在しない1900年2月29日があると勘違いしている!?
うるう年は何年おきにやって来るか?
こんな質問をすると、「4年おきに決まっているだろう!」と怒られそうだが、この模範的とも思われる解答は実は大間違い。
うるう年は、厳密には次の条件で求められる年のことを言う。
(1)4で割り切れる年はうるう年である
(2)4で割り切れても、100で割り切れたらうるう年ではない
(3)100で割り切れても、400で割り切れたらうるう年である
つまり、この条件の(1)と(3)がうるう年である。
2012年がうるう年だったのは、単純に(1)の条件を満たしていたから。
しかし、2000年がうるう年だったのは、(1)ではなく(3)の条件を満たしていたからなのだ。
ということは、(2)の条件を満たしてしまう1900年はうるう年ではない。
よって、1900年2月29日という日付は存在しない。
ところが、エクセルで「1900/2/29」と入力すると、何と、日付と認識されてしまう。
これはどういうことだろう。
さらに考察を進めてみる。
ご存知の人も多いと思うが、エクセルは内部的に日付を「シリアル値」という数値で管理している。
このシリアル値は、1900年1月1日が「1」で、その翌日が「2」と順番に割り当てられている。
そして、「1900/2/29」と入力したセルの表示形式を「標準」にしてみると、エクセルはこの存在しない日付に「60」というシリアル値を割り当てていることがわかる。
これで、完全にエクセルは1900年がうるう年であると勘違いしている証拠が掴めた。
ここで、さらに踏み込んでみたい。エクセル5から登場したマクロ言語のVBA(Visual Basic for Applications)も、1900年2月29日という日付があると勘違いしているのだろうか。
答えは「ノー」だ。この存在しない日付をVBAで処理しようとすると、エラーが発生する。
ところが、2015年6月19日のシリアル値を見ると、エクセルもVBAも「42174」という結果を返す。
VBAには1900年2月29日という日付は存在しないのに、なぜ、両者のシリアル値は同じなのだろうか。
理由は、VBAでは、1900年1月1日のシリアル値が、エクセルとは「1」ずれた「2」から始まることによる。
そうすれば、1900年3月1日の両者のシリアル値はともに「61」となり、ここで帳尻が合うわけである。
ややこしい話で恐縮だが、ややこしくしているのはエクセルであって、うるう年自体は初歩的な概念だ。
このエクセルの1900年2月29日問題。
エクセルのバグという説と、ロータス1-2-3に1900年2月29日が存在したため、それに仕様を合わせざるを得なかったという説がある。
さて、真相やいかに。
毎日30分かかる事務作業のルーティンワーク。
エクセルのマクロなら1秒で!
その作業、VBAid(ブイビーエイド)にお任せしませんか?
『新装改訂版 Excel VBA 本格入門』
~マクロ記録・If文・ループによる日常業務の自動化から高度なアプリケーション開発までVBAのすべてを完全解説~
Chapter2 VBAの基本構文を理解する
Chapter3 ブックとシートをVBAで操作する
Chapter4 セルをVBAで操作する
Chapter5 変数を理解する
Chapter6 条件分岐を理解する
Chapter7 繰り返し処理(ループ)を理解する
Chapter8 対話型のマクロを作る
Chapter10 ユーザーフォーム
Chapter11 基本的な入力や表示を行うコントロール
Chapter12 選択を行うコントロール
Chapter13 そのほかの便利なコントロール
Chapter14 文字列を操作する関数
Chapter15 日付や時刻を操作する関数
Chapter16 そのほかの便利な関数
Chapter17 マクロの連携とユーザー定義関数
Chapter18 イベントマクロ
Chapter19 エラー処理
Chapter20 画面表示と組み込みダイアログボックス
Chapter21 グラフをVBAで操作する
Chapter22 ファイルの操作
『いつもの作業を自動化したい人の Excel VBA 1冊目の本』
Excel VBAは、一人ひとりの作業のあり方、いえ、ひいてはあなたの時間の使い方、すなわち「人生すら変えてしまう」パワーがあります!
本書は、Excel VBAを使いこなしたい方がどこでつまずいてしまうのかを徹底的に研究して書き上げた「1冊目」の決定版です!
まずは第1章の立ち読みから(スマホ対応)→ こちら
→ Amazonへ
最近の画像つき記事
-
ソフィア・ケニン、リヨン・オープン優勝!(女子テニス359)
-
ソフィア・ケニン、リヨン・オープン決勝進出!(女子テニス358)
-
ソフィア・ケニン、全豪オープン2020優勝!ガルビネ・ムグルッサを撃破!(女子テニス357)
-
ソフィア・ケニン、大大大金星!アシュリー・バーティーを撃破!(全豪オープン2020)(女子テニス356)
-
ソフィア・ケニン、勝つには勝ったが・・・(全豪オープン2020)(女子テニス355)
-
ココ・ガウフはなぜ負けたのか(全豪オープン2020)(女子テニス354)
-
大坂なおみは、なぜココ・ガウフに負けたのか(全豪オープン2020)(女子テニス353)
-
ワン・チャン、セレナ・ウィリアムズを撃破!ココ・ガウフ、大坂なおみを撃破(全豪オープン2020)(女子テニス352)
-
ベンチッチ、オスタペンコを撃破!(全豪オープン2020)(女子テニス351)
-
シャラポワはこのまま引退してしまうのか?(全豪オープン2020)(女子テニス350)