みなさん、おはようございます!タカハシ(@ntakahashi0505)です。
こちらの記事は、タカハシが音声メディアVoicyの「スキルアップラジオ」にて放送した内容から、ピックアップしてお届けします!
今回のテーマは、今さら聞いてもいいIT用語 #13: 「シリアル値」です。
なお、以下で実際にお聴きいただくこともできます!
では、よろしくお願いいたします!
シリアル値とは
以前、649回の放送の1日10分ITマスター塾で、ExcelとかGoogleスプレッドシートの数値の書式設定、これを1発で変更できるショートカットキーというのを紹介したんです。
これ、超便利なので、聞いてない方はぜひ聞いていただければと思うんですが、その中で、「Ctrl + Shift + 3」、これで日付の形式に1発で変更できますよというお話をしたんですが、ちょっと勘のいいリスナーさんはここで「おっ」てなるんです。
というのも、日付なのに数値の書式設定なんだ、そんなふうに思った方もいらっしゃるんじゃないかなって思います。
日付は内部では数値として表されている
そうなんです。Excelもそうですし、Googleスプレッドシートでもそうなんですが、日付は内部では数値として表されているんです。
そして、この日付だったり時刻、これを数値で表現する仕方、もしくは数値で表現したもの、これをシリアル値というんです。
我々日本人からすると、シリアルというと、朝ごはんに出てきて牛乳かけて食べるみたいな、そんなシリアルをイメージするかもしれないんですが、ここでいうシリアルは全然違う意味でして、連続のという意味があります。
連続の値、これでシリアル値です。
基準日とシリアル値の仕組み
では、どう連続なのかというのを、シリアル値の仕組みこれをお伝えすることで理解していただけるんじゃないかなって思うので、説明をしていきたいなと思っています。
Excelの基準日と日付と数値の割り当て
たとえば、Excelで言うと、1900年1月1日、これが基準日になっているんです。
この基準日を1として、1増えるごとに1日経つ。
このような計算で日付と数値を割り当てていくんです。
たとえば、1900年1月2日これは2になるわけです。
では、1ヶ月後どういう風に表現するかというと、1900年2月1日は32になるわけです。
1月は31日ありますので、12、31を足し算して32。
これが次の月の1日、2月1日になるわけです。
で、こんな感じで、1日経つごとに日付がどんどん1日立っていくという日付の決め方、非常にシンプルですよね。
たとえば、今日2024年3月30日はシリアル値で表すと45381になります。
こんな感じで、表向きは日付表記になっていたとしても、Excelの内部では数値として扱われていて、ただ表示形式が日付になっているだけなんです。
なので、みなさんがExcelに入力した日付、このシリアルって何かな? って調べたいときには、書式設定を標準に戻せばオッケーです。
前回紹介したショートカットキー 「Ctrl + Shift + 1」 です。
これを押すとセルの表示になるので、これで入力してある日付がシリアル値でいうといくつなのかというのが確認できます。
GoogleスプレッドシートとExcelとの違い
さて、Excelについて話をしてきたんですが、Googleスプレッドシートでも基本的には同じような仕組みのシリアル値が使われています。
ただ、ちょっと違うところがあります。
何が違うかというと、基準日が違うんです。
Excelでは基準日が1900年1月1日だったんですが、Googleスプレッドシートでは基準日が1899年12月31日ということで1日ずれています。
なんだ、めっちゃ厄介だなと思われるリスナーさんいらっしゃると思うんですが、ただ、2024年3月30日、これをGoogleスプレッドシートでシリアル値に変換すると45381つまり、さっきお話したExcelと同じシリアル値になるんです。
これは、なんでそんなことが起きているのかということなんですが、実は、色々調べると1900年、これを閏年とするか否か、この扱いがExcelとGoogleスプレッドシートで違うらしいんです。
Excelでは1900年を閏年扱いしていないと。
で、Googleスプレッドシートでは閏年扱いしているんです。
結局1900年3月1日以降は同じシリアル値
するとどういうことが起きるかというと、さっきGoogleスプレッドシートの方が1日前の基準日だったですが、閏年として1日多いので、結局1900年3月1日以降はExcelもGoogleスプレッドシートも同じシリアル値になるって話なんです。
ということで、1900年のたった2ヶ月間だけ違うよって話で、残りずっと一緒。
2024年に生きている我々にとってはほとんど関係がない話でしたね。
ちょっと小話として楽しんでいただければと思います。
時刻をシリアル値で表現すると
さて、日付について話をしていたんですが、時刻に関してはどうなのかということを気になりますよね。
実は、この時刻も、日付と同様、シリアル値で表現されています。
時刻は小数で表現
どう表現しているかというと、シリアル値では、1日を1としていますので、時とか分、これは1よりも小さい数、つまり小数で表現されているんです。
たとえば、12時。これは1の半分なので、0.5になります。
そして、6時。これは1日の4分の1ですよね。なので、0.25と表現されているわけです。
同じように18時、夕方の6時です。これは0.75と表示されています。
割り切れない時刻
3時間単位だったら割と綺麗に小数で表現できるですが、じゃあ、たとえば4時はシリアル値ではどうなるか、みなさんお分かりになりますか。
これ実際、ExcelとかGoogleスプレッドシートで4時、4:00って入力して、表示形式を数値に変えるとわかるですが、そうすると、セルには0.16666みたいな感じで6が並んで、最後7、こういった数値が表示されることになります。「0.166666666666667」
1を24で割って、そして4掛ける、そんな計算になるわけなので、これ割り切れないんですよね。
結果、循環小数、ずっと小数が続いてしまう、そういった結果になるです。
そして、無限に続くような小数。
これはコンピューターで扱えませんので、どこかで桁を丸めないといけない。
どうしているかというと、15桁で四捨五入をしているんです。
なので、最後6、6、6って続いていますけど、7になっているという話になります。
この時刻が循環小数扱いになっていて、そして桁で丸められている。
この事実が、ExcelとかGoogleスプレッドシートで時刻の計算をするときに結構厄介なことをするということがあるです。
微妙に誤差が出ていることに注意
これはとても注意が必要です。
というのも、時刻の値によっては、先ほどお話しした通り、15桁で丸められてしまいます。
つまり、微妙に誤差が出ているのです。
この誤差が出たものに関して、足し算とかひとか、いろんな計算をしていくと、どんどん微妙にずれていってしまうということが起きます。
その結果、こっちで手入力した4時とあっちの何らかの計算で出た4時、これが等しいものではない、そういう風に判定されることが起こり得るってことなんです。
たとえば、勤怠の計算をしている方とか、もしくは作業工数の計算をしている方、時刻の扱いもすると思いますので、時刻自体の扱いだったりとかその計算結果、ここには誤差が発生する可能性があるということを念頭に置いて作業していただければと思います。
まとめ
今日は、今更聞いてもいいIT用語、シリアル値を紹介させていただきました。
ExcelでもGoogleスプレッドシートでも、裏では日付、時刻は数値として扱われている、それによって足し算とか引き算と、そういった計算ができるというメリットがあるんですが、お話した通り、特に時刻では誤差が出てしまうという注意点もありますので、是非気を付けていただければと思います。
タカハシのVoicyの放送はこちらからお聴きいただけます。
チャンネルのフォロー、コメント、SNSでのシェアなどなど、楽しみにお待ちしております。 では、また。