表計算ソフトで時間計算、日数計算を行うための7つのレッスン 第3回

■■Lesson 3
「時間 = シリアル値」


[ここで学ぶ関数 YEAR() MONTH() DAY() HOUR() MINUTE() SECOND() ]

ところで、時刻のデータも実体は(日付を表すのと同じ)「シリアル値」である。
例えば、

12:35

の表示形式を「数値」にすると、

0.524305555555556

のようになる。

特定の日付の特定の時刻を入力するなら、

2014/9/8 13:24:15

といった表現が可能。
このような表現を日付文字列と呼ぶ場合もある。
この値をシリアル値で表すと「41890.5585069444」
のようになる。

さきにみたような、
「日付」の部分のない時間のみの値(シリアル値では
0以上1未満の値)を入力した場合、
Excel では、その日の日付は「1900年1月0日」となる。

補足メモ:
これは、OpenOffice の Calc や Google Spreadsheet などの場合は 1899年12月30日。
シリアル値の始まりの日も1日ずれている。
1900年のうるう年判定に関するExcelの「バグ」(下記のURL参照)により、このズレは1900年3月1日以降の日付では解消される。
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year

■ シリアル値からの情報の切り出し

シリアル値あるいは日付文字列から
年、月、日、時間、分、秒のみを
対応する整数として取り出す関数は以下のとおり

年:YEAR()
月:MONTH()
日:DAY()
時:HOUR()
分:MINUTE()
秒:SECOND()

eg)
=YEAR(TODAY()) → 2020
=DAY("2014/12/5") → 5
=HOUR(B5) → 12
=MINUTE("16:18") → 18
=SECOND(NOW()) → 48
="今月は"&MONTH(TODAY())&"月です。" → 今月は4月です。

VBA補足:
VBA では、Year() 、Month()、Day() 、Hour() 、Minute() 、Second()
の各関数が同様の役割をはたす。
たとえば今年の西暦年を返す
(ワークシート関数では =YEAR(TODAY()) )なら、
 Year(Date)
 のようになる。

また、シリアル値や日付文字列から日付に関する情報を取り除き、
時間のみの値にするなら、
シリアル値では 1日 = 1 であることを利用して、

=D1-INT(D1)

といった処理を行えばよい。
逆に、シリアル値や日付文字列から時刻のデータを取り除くには、

=INT(D1)

とするだけ。

補足メモ:
これを、「あえて」まるめのための他の関数を使って表現するとすると、以下のような表現が考えられる。

 =ROUNDDOWN(D1,0)
 =FLOOR(D1,"24:00")
発展:
NOW() 関数の返り値には日付に関する情報も含まれている。
これを時間のみの情報にするには以下のようにする必要がある。
=NOW()-INT(NOW())
または、
=NOW()-TODAY()
これを利用し、いま、午前か午後かを返す関数
=IF(NOW()-TODAY()<TIMEVALUE("12:00"),"午前","午後")
または、
=IF(NOW()-TODAY()<0.5,"午前","午後")
注:TIMEVALUE() 関数は Lesson 5 で学びます。

VBA では、Time 関数で、NOW()-TODAY() と同様の値を返す。
また、TODAY() にあたるのは Date 、NOW() にあたる
関数は Now 。

今回は、シリアル値である「日付」「時間」から、年・月・日・時・分・秒を分解して取り出す方法を説明しました。Lesson 4 では、それぞれの値をまとめてシリアル値に変換する方法などを学びます。

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