Excelではセルに 2012/8/20 とか、 8:30 と入れるとそのまま入力される。しかも、時刻や日付の入っているセル間での計算も可能である。これはどういうシカケになっているのだろう?
2012/8/22から2012/8/20を引くと、2、8:40から8:30を引くと 0:10 となる。なんか賢い
計算式で四則演算が出来るというのだから、普通に考えればセルにはなにか数値が入っているはず(ホントに文字列だったら計算できない)。そこで、セルの書式設定を使って表示形式を「標準」にしてみよう。
書式は「日付」になっている。これを「標準」に変えると、
さっきまで 2012/8/22 と表示されていたセルが 41143 という数字になった!
同様に、時刻表示になっているセルの書式設定を「標準」に変えると……
8:50 と表示されていたセルが、0.368056になってしまった。
実は、Excelの内部表現では日付や時刻は「シリアル値」(serial)と呼ばれる値で表現されている。シリアル値の整数部分が日付、小数部分が1日の中の時刻を表すシカケ。2012年8月22日が 41143なのは、Excelの内部での起点が 1900年1月1日となっていて、この日が1だから。ちなみに、負のシリアル値はExcelでは扱えないので、1900年1月1日以前の日付データを取り扱う場合はExcelの日付関係の関数は全滅となる。歴史研究などでちょっと古いデータを扱うひとには注意が必要。
小数部分は、1日24時間を0〜1の範囲の数に置き換えて表現している。0.368056に24をかけて時間表示にすると 8.833333333 つまりまず8時間。さらに小数点以下は分以下を表すので、分単位に換算するために60をかけると 0.8333333333×60=50 となって、合わせ技で 8:50 となる。
つまりシリアル値の基本単位は「日」である。そのため、2つの時刻を比較してその差が何時間あるか? ということを計算したいような場合には、差をとった後で24倍して時間単位に変換してやる必要がある。
Excelにはシリアル値を操作する関数が沢山ある。日付形式からシリアル値に変換する関数もあるし、シリアル値から日付に戻す関数もある。詳しくは「関数の挿入」ダイアログで、関数の分類として「日付/時刻」を選べばリストが表示される(Excel2007だと20個ある)。
ただ、上述の通りシリアル値はプラスの値しかとれないので1900年1月1日以前の日付を扱いたい場合はこのへんの関数は全滅となることに注意。