前回の連載でも紹介したように、数式や関数を使って日時(日付・時刻)の計算を行うことも可能である。ただし、日時を正しく計算するには、「Excelが日付や時刻をどのように扱っているか?」を理解しておく必要がある。ということで、今回は日時を数値で示した「シリアル値」について詳しく説明していこう。
「日付」の表示形式とシリアル値
Excelは、日付や時刻を「シリアル値」という数値に変換して記録・管理する仕組みになっている。このため、日付や時刻を正しく計算するには「シリアル値」について学んでおく必要がある。
まずは、Excelにおける「日付の入力」と「表示形式」について解説していこう。日付を入力するときは「月/日」という形でデータを入力するのが一般的だ。たとえば、「1/31」とデータを入力した場合を考えてみよう。
「Enter」キーを押して入力を確定すると、セルの表示は「1月31日」に変更される。これはExcelが気を利かして、表示形式を自動変更してくれているためだ。日付データを入力すると、そのセルの表示形式は「ユーザー定義」になり、「m月d日」という形で日付が表示される。
なお、上記のように「月/日」だけを入力した場合は、「今年の日付」として扱われる仕様になっている。「今年以外の日付」を入力するときは、以下のように「年/月/日」とデータを入力しなければならない。
この場合は、表示形式が「日付」に自動変更され、「年/月/日」という形でセルに日付が表示される。
では、これらの表示形式を「標準」に戻すと、どのような表示になるだろうか? 試してみよう。日付を入力したセルを選択し、表示形式に「標準」を指定する。
今回の例では、セルの表示が44957や44592といった数値に変更された。これが「シリアル値」と呼ばれるものだ。Excelの内部では、それぞれの日付を「数値」に変換して記録・管理する仕組みになっている。
このように、日付を入力したセルの表示形式を「標準」に変更すると、その日付の「シリアル値」を確認することができる。シリアル値を手軽に調べる方法として覚えておくとよいだろう。
シリアル値の起点は1900年1月1日
続いては、「どのようなルールで日付が数値に変換されるか?」を説明していこう。Excelのシリアル値は、1900年1月1日を数値の「1」として扱う決まりになっている。試しに、適当なセルに「1900/1/1」の日付データを入力し、表示形式を「標準」に変更してみるとよい。セルの表示が「1」に変更されるのを確認できるはずだ。
以降は、日付が1日経過する毎に数値が1ずつ増えていく仕組みになっている。たとえば、1900年の1月2日は「2」、1月3日は「3」・・・と数値が1ずつ増えていき、1月31日になるとシリアル値は「31」になる。その翌日の2月1日は「32」という具合に、月をまたいで日付は1日ずつカウントされていく。
さらにカウントを進めていくと、1900年12月31日は「366」になり(※)、その翌日の1901年1月1日は「367」になる。このように1900年1月1日を起点にして、年・月に関係なく1日ずつ日数をカウントしていったものが「シリアル値」となる。
(※)西暦1900年は「うるう年」になるため、1年が366日ある。
ちなみに、2000年1月1日は「36526」というシリアル値になる。つまり、1900年1月1日を含めて36,526日目が2000年1月1日になる、という訳だ。同様に、2023年の1月31日は44,957日目という計算になる。
このように説明すると少し難しく感じるかもしれないが、実際にはそれほど難しく考える必要はない。シリアル値の理解を深めるときに大切なことは、「1900年1月1日から何日経過しているか?」ではなく、「1日経過する毎に数値が1ずつ増えていく」というルールを覚えておくこと。これさえ知っていれば、日付を含む計算を問題なく行えるだろう。
日付の計算例
それでは、日付を含む計算の簡単な例をいくつか紹介していこう。「1日」が数値の「1」に相当することさえ知っていれば、その仕組みをすぐに理解できるはずだ。
まずは、「日付」と「数値」の足し算について。以下の例は、「3月10日」に「5」を足し算する(=B3+C3)という計算を行った例だ。数値の「5」は5日分に相当するので、その計算結果は3月10日の5日後、つまり「3月15日」となる。
このように、データ形式が異なる「日付」と「数値」であっても、問題なく計算を行うことが可能である。ただし、日付ならではの問題として「起算日をどう処理するか?」には注意しておく必要がある。
先ほどの例では、「今日の日付」を含まずに計算を行っている。つまり、3月10日に注文を受けて、翌日の3月11日から5日間で作業する、という考え方になる。一方、「今日の日付」を含めて3月10日から作業を開始する場合は、当日分をマイナス1して「=B3+C3-1」と数式を記述しなければならない。
日数が絡む計算では、シリアル値について理解するだけでなく、「起算日をどう処理するか?」などの問題もよく考慮して数式を記述する必要がある。念のため、注意しておこう。
話を元に戻して、別の例を紹介していこう。以下は、「日付」と「日付」の引き算を行った例だ。西暦を含めた形で「今日の日付」と「次の誕生日」を入力すると、「あと何日で次の誕生日が来るか?」を自動計算してくれるものだ。
この場合は、それぞれの日付のシリアル値が引き算されることになる。このとき、「各日付のシリアル値がいくつになるか?」は大きな問題ではない。引き算をした結果が「2つの日付の差」(日数)になることを理解していれば、「あと何日」を正しく計算できる仕組みも理解できるはずだ。
そのほか、関数を使って日付の計算を行うことも可能だ。以下は、2023/2/1~2023/2/7の日付を関数SUMで合計した例だ。
この場合は、各日付のシリアル値が合計され、その数値を日付に変換したものが計算結果として表示される。それぞれの日付は1900年1月1日を起点にした「日数」で記録されており、それを合計した数値を再び「日付」に換算したものが計算結果(2761年9月9日)として表示される。なお、この例は関数でも日付を扱えることを示しただけで、計算そのものに深い意味がある訳ではない。
「時刻」(時間)のシリアル値
続いては、「時刻」のシリアル値について説明していこう。Excelは「時刻」も「日付」と同じシリアル値で管理する仕組みになっている。先ほど説明したように、シリアル値の「1」は1日に相当する。よって、24時間が数値の「1」に相当することになり、その半分の12時間は「0.5」という計算になる。
実際に確認してみよう。セルに「12:00」(昼の12時、または12時間)と入力すると、そのセルの表示形式は「ユーザー定義」に自動変更され、「h:mm」という形で時刻データが表示される。
このセルの表示形式を「標準」に戻すと、「0.5」という数値が表示されるのを確認できるはずだ。
さらに、このセルの表示形式を「日付」カテゴリの「年/月/日 時:分」に変更した例も紹介しておこう。この場合、セルの表示は「1900/1/0 12:00」になる。
実際には1900年1月0日という日付は存在しないので、これはシリアル値の考え方に基づいた日時表記といえる。このように、単に時間だけを入力した場合は「1900年1月0日の時刻」として処理される。違う観点から見れば、「日付なしの時刻」と考えることもできる。状況によっては、これが重要な鍵になるケースもあるので、念のため覚えておくとよい。
基本的な考え方としては、日付の部分を「整数」、時刻の部分を「小数点以下」に換算する、と覚えておけばよい。もういちど時刻(時間)について整理すると、
・1日(24時間)が数値の「1」に相当する
・時間だけを入力すると、1900年1月0日(日付なし)の時刻として処理される
と理解しておけば十分だ。
いくつかの例を紹介しておこう。たとえば、6時間は1日(24時間)の1/4に相当するので「0.25」という数値になる。同様に、18時間は1日の3/4に相当するので「0.75」という数値になる。
同様に、1時間は数値の「1/24」に相当する。この数値は割り切れないため、「0.041666・・・」という表記になる。そして、「1/24」をさらに60で割った数値(0.00069444・・・)が1分、それをさらに60で割った数値が1秒に相当することになる。
このように、1日(24時間)を数値の「1」として、時、分、秒に換算した数値が「時刻」(時間)のシリアル値になる。小数点以下の割り切れない数値になるケースが多く、頭で暗算するのは難しいので、その“仕組み”だけを覚えておけば十分であろう。
時刻(時間)の計算例
最後に、時刻(時間)の計算例をいくつか紹介しておこう。最初は、「時間」と「時間」を足し算した例だ。それぞれの時間(3:30と1:15)は小数点以下の数値(シリアル値)に換算され、それらを足し算した数値を再び時間に戻したものが計算結果として表示される。
「3:30と1:15のシリアル値がいくつになるか?」を把握していなくても、計算の仕組みさえ理解していれば、「時間の足し算」が正しく計算されることを理解できるだろう。
続いては、前回の連載でも紹介した「時刻」と「時刻」の引き算だ。こちらは、それぞれの時刻の「時間差」が算出されることになる。
そのほか、「日付」に「時刻」を足し算することも可能だ。この計算は「日付に時刻を追加する処理」とも考えられる。念のため、それぞれのシリアル値も示しておくので参考にするとよい。
最後の例は「時間」に「数値」を掛け算した例で、こちらも前回の連載で紹介した内容となる。シリアル値では1時間が「1/24」として処理されているため、それを24倍すると、時間を「通常の数値」として扱えるようになる。
ただし、上記の例では「18:00」という計算結果が表示されている。これは、「勤務時間」の表示形式が自動的に引き継がれてしまったことが原因であり、適切な表示とはいえない。このような場合は、表示形式を「標準」に戻してあげると計算結果を正しく表示できる。
ちなみに、先ほどの「18:00」という表示は、19.75の小数点以下の部分(0.75)だけを時間として表示したものになる。24時間を「1」とすると、0.75は「3/4」なので18時間に相当する。ここから日付を省略して「時間」だけを表示すると「18:00」になる、という挙動だ。シリアル値の仕組みを十分に把握できていれば、このような挙動の裏側も理解できるだろう。
初心者にとって「シリアル値」は少し難しい概念かもしれないが、いちど理解してしまえば、さほど難しい話ではなくなるはずだ。「日付」や「時刻」を計算するときに欠かせない概念なので、この機会にいちど頭を整理しておくとよいだろう。