今さら聞いてもいいIT用語 #13: 「シリアル値」

「シリアル値」なんとなく美味しそうな響きですが、食べられません。

Excelやスプレッドシートで「日付」や「時刻」を扱えるわけですが、内部では「数値」として扱われていまして、それを「シリアル値」といいます。

Excelでは基準日である1900/01/01を「1」として、1日増えるごとに、1ずつ加算します。

・1900/01/02が「2」
・1900/02/01が「32」
・2024/03/30が「45381」

…となります。「serial」というのは「連続の」という意味。日付が連続しているから「シリアル値」というわけですね。

スプレッドシートでは、基準日がExcelより1日前倒しの1899/12/31となっています。

また、GoogleとMicrosoftで意見が割れているのか…と思いきや、スプレッドシートでも2024/03/30は「45381」でExcelと一致。…なぜでしょう?

これは、スプレッドシートでは1900年をうるう年扱いしている一方で、Excelはそうしていないということによります。結果、1900/03/01から双方のシリアル値は一致しています。

さて、時刻はどう扱っているかというと、シリアル値の小数部で表現しています。

・06:00は0.25
・12:00は0.5
・18:00は0.75

3時間単位なら割り切れますが、1時間単位にすると割り切れない時刻が出てきます。たとえば「04:00」は「0.166666666666667」となります。

小数の表現では割り切れずに循環小数になってしまうときがあるわけですが、その場合、内部では15桁で四捨五入して丸められてしまいます。

これは時刻の計算で誤差が発生する原因となっていまして、たとえば、手入力の「04:00」と計算結果の「04:00」が誤差のおかげで一致していないというような現象を引き起こします。

勤怠とか作業工数とか、時刻の計算をするときはこの誤差が悪さすることがあるので注意してくださいね。

シリアル値は、コンピューターで扱うのがやっかいな日付・時刻を、表計算で足し算・引き算など計算できるように考えられたものです。過去の技術者のみなさんの工夫に感謝です。

耳から聴きたい方はこちらからどうぞ

↓↓


この記事が気に入ったらサポートをしてみませんか?