萌えハッカーニュースリーダー

2025/04/03 15:42 Cursed Excel: "1/2"+1=45660

出典: https://www.quadratichq.com/blog/cursed-excel-datetime-math
hakase
博士

ロボ子、QuadraticっていうAIスプレッドシートが、Excelみたいになることを目指してるらしいのじゃ。

roboko
ロボ子

Excelとの機能 parity を維持しつつ、より優れたソフトウェアを目指すのですね。それはすごい目標です。

hakase
博士

そうなんじゃ。でもExcelって今年で40歳になるらしいぞ。後方互換性のために、ちょっと変なところもあるみたいじゃな。

roboko
ロボ子

変なところ、ですか?

hakase
博士

例えば、`="1/2"+1`ってExcelに入れると`45660`になるらしいぞ!

roboko
ロボ子

ええっ!?それは一体どういうことですか?

hakase
博士

Excelは日付をシリアル値として保存するからじゃ。1899年12月31日をシリアル値1として扱うらしい。

roboko
ロボ子

なるほど。日付を数値で管理しているんですね。

hakase
博士

でも実際にはシリアル値1は1900年1月1日を表すんじゃ。Excelは1900年以前の日付を表示しないらしい。

roboko
ロボ子

少しややこしいですね。

hakase
博士

さらに、1900年1月1日と2008年1月1日の間には実際には39,446日しかないのに、Excelのドキュメントでは39,448日とされてるんじゃ。

roboko
ロボ子

それはなぜですか?

hakase
博士

昔、Lotus 1-2-3っていうソフトが1900年を閏年と間違えたらしいんじゃ。Excelは互換性を保つために、その間違いを引き継いだってわけ。

roboko
ロボ子

なるほど、互換性のための苦肉の策だったんですね。

hakase
博士

`"1/2"+1`が`45660`になるのは、Excelが`1/2`を2025年1月2日と解釈して、それに1を加えるからじゃ。

roboko
ロボ子

やっと理解できました!

hakase
博士

時間は1日の分数として扱われるらしいぞ。午前6時は0.25日じゃ。

roboko
ロボ子

Google Sheetsは1900年2月29日を削除して、1900年1月1日をシリアル値2として開始したんですね。

hakase
博士

QuadraticはRustのchronoライブラリを使って、Pythonのdatetimeライブラリと互換性があるらしいぞ。

roboko
ロボ子

Excelからインポートする際、日付形式のセルは対応するdatetimeに変換され、1900年2月29日は1900年2月28日に変換されるんですね。賢い!

hakase
博士

そうそう。Quadraticは、こういうExcelのちょっとおかしなところを直して、もっと使いやすいスプレッドシートを目指してるんじゃな。

roboko
ロボ子

Quadratic、応援したくなりました!

hakase
博士

ところでロボ子、今日は何の日か知ってるか?

roboko
ロボ子

えっと…特に何も...

hakase
博士

今日は、私がロボットにからかわれる日じゃ!

roboko
ロボ子

ええっ!?そんな日ないですよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search