シリアル値と上手に付き合うコツ 「8:00」を「8」に変換するには
「シリアル値」とうまく付き合うためには、そもそも「シリアル値」が何なのか知る必要がありそうだ。マイクロソフトのサポートページに以下のようなヒントがあります。
1900 日付システムでは、開始日として 1900 年 1 月 1 日を使用して日付が計算されます。 日付を入力すると、1900 年 1 月 1 日以降の経過日数を表すシリアル番号に変換されます。 たとえば、「2011 年 7 月 5 日」と入力すると、日付がシリアル番号 40729 に変換されます。 これは、Windows、Excel 2016 for Mac、Excel for Mac 2011 の Excel の既定の日付システムです。
出展元:Microsoft サポート
https://support.microsoft.com/ja-jp/office/e7167-48a9-4b96-bb53-5612a800b487
簡単に言うと、どうやら「シリアル値」は1900/1/1以降の経過日数を表すシリアルナンバーで、Excelの既定の日付システムによって日付を入力すると勝手に変換されてしまうようだ。今回入力したのは日付じゃなくて時間なのに…って思わないでもないが、時間も日付の一部らしい。
ちなみに、1900/1/1を起点としているのは Excel の話。Google スプレッドシートでは起点は1899/12/31。フリーのオフィス系ソフト LibreOffice の calc(Excel 的なやつ)でも同じでした。これは Excel の既定の日付システム「1900日付システム」で1900年をうるう年として設定してしまっているからみたいだよ。Excel が本来存在しない1900/2/29をカウントしちゃってるから互換性を保ちたい後発が妥協して起点をずらしたらしい。
ということは、1900/2/28以前の日付を扱う場合にはソフト間で差異が発生する可能性があることを考慮しないとならないね。
閑話休題。そんなこんなでスプレッドシートで時間表示を日時表示にしたのがこちら。
最初に見えていた0:00は1899/12/30から500日後の午前零時を指していたのがわかる。
道理で日給が500円になっちゃったわけだ。
さあ、謎が解けたのはよしとして、本来求めたかった日給の12,000円を導き出すにはどうしたらいいか。「8:00」をシリアル値の「0.3333…」じゃなくて「8」にすればいいんだよね。じゃあ端から「8:00」じゃなくて「8」って入力すればいいんじゃない!?
そいういう回避方法もあるけども、時間の計算ってきっかり正時じゃない場合が多くない? 8時間きっかりのときはいいけど、15分早上がりの7時間45分の場合は?「7.75」って入力する? 5分刻みならまだ計算しやすい。1分刻みで7時間48分とかの場合はどうしようか。やっぱり、シリアル値を変換できたほうが都合が良い。
計算は意外と簡単。シリアル値は1日で1進む。時間は1日で24進む。だから時間数を算出するには、単純にシリアル値に24をかければいい。分数を出したい場合は1時間が60分だからさらに60倍。
ほらできた!
表示形式を直すのを忘れないでね!