VBAの勉強を始めてみた

色々試しています。

ひっそりとExcel関数のおさらい(日付/時刻に関するもの)

今回は日付/時刻に関する関数について、おさらいをします。と、同時に新たな気づき、アイデアに繋がればいいなーと思ってます。
Excel関数に関しては、既に多くのウェブサイト・書籍等で解説しつくされていますが、自分の頭を整理するためになるべく自分の言葉で書き、表現したいと思います。(結果、既存のものと似たような書きぶりになっている場合もあります・・・)

チョイスする関数は個人的に使用頻度の高いもの、今後使用しそうなもの、または単なる好みだったりするので、ご了承ください。

目次

 

 

日付、時刻を表すシリアル値とは?

シリアル値とは、1日を整数の「1」として表現し、1900年1月1日の「1」から始まり9999年12月31日の「2958465」まで続く値のことです。たとえば、2018年1月13日であればシリアル値は「43113」であり、1900年1月1日から43113日が経過していることを意味しています。1日のうちの時刻は、小数点以下の数値で表され、2018年1月13日の14時30分であればシリアル値は「43113.6041666667」となります。
このようにシリアル値で管理することによって、Excel上で日付の計算を容易に行うことができるようになっています。

 

 

現在の日付、時刻を取得する(TODAY関数、NOW関数)

TODAY関数

該当のセルに現在日付を表示する場合は=TODAY()と入力します。引数はありませんが、()が必要です。

f:id:kouten0430:20180114141014j:plain

 

NOW関数

該当のセルに現在日付と時刻を表示する場合は=NOW()と入力します。引数はありませんが、()が必要です。

f:id:kouten0430:20180114141217j:plain

 

なお、先ほども述べましたが「日付」のシリアル値は整数で、「時間」のシリアル値は小数で表されます。
関数で取得した日付・時間を「標準」書式に変更して見てみると、シリアル値がどうなっているか確認することができます。

 

・TODAY関数で取得したシリアル値

f:id:kouten0430:20180114141355j:plain

 

・NOW関数で取得したシリアル値

f:id:kouten0430:20180114141938j:plain

 

 

シリアル値から年、月、日、時、分、秒、曜日を求めて表示する(YEAR関数、MONTH関数、DAY関数、HOUR関数、MINUTE関数、SECOND関数、WEEKDAY関数)

YEAR関数
=YEAR(シリアル値)
引数のシリアル値から「年」に該当する1900~9999の範囲の整数を返します。

なお、引数はシリアル値以外に日付文字列(要するにExcelが日付と認識できる文字列"2018/1/13"など)とすることもできます。また、シリアル値・日付文字列が入ったセル参照とすることも可能です。

f:id:kouten0430:20180114142748j:plain

 

MONTH関数
=MONTH(シリアル値)
引数のシリアル値から「月」に該当する1~12の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114142916j:plain

 

DAY関数
=DAY(シリアル値)
引数のシリアル値から「日」に該当する1~31の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114142940j:plain

 

HOUR関数
=HOUR(シリアル値)
引数のシリアル値から「時」に該当する0~23の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114142955j:plain

 

MINUTE関数
=MINUTE(シリアル値)
引数のシリアル値から「分」に該当する0~59の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114143013j:plain

 

SECOND関数
=SECOND(シリアル値)
引数のシリアル値から「秒」に該当する0~59の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114143029j:plain

 

WEEKDAY関数
=WEEKDAY(シリアル値,[種類])[]内は省略可能な引数
引数のシリアル値から「曜日」に該当する1~7の範囲の整数を返します。なお、引数は日付文字列・セル参照とすることもできます。

f:id:kouten0430:20180114143106j:plain


このままでは、数値として表示されるだけなので、曜日として表示するには表示形式の変更が必要です。

表示形式のユーザー定義に「aaa」を追加し、OKします。

f:id:kouten0430:20180114143132j:plain

f:id:kouten0430:20180114143148j:plain

第2引数の種類で、始まりを何曜日にするかの指定ができますが、個人的には省略でよいかと思います。省略の場合は1(日曜)~7(土曜)になります。

 

 

2つの日付から経過年数・月数・日数を求めて表示する(DATEDIF関数)

=DATEDIF(開始日,終了日,"単位")
なお、開始日・終了日は、シリアル値・日付文字列・セル参照とすることができます。

 

・単位をYとした場合

開始日から終了日までの経過年数(月日は切り捨て)を取得します。

f:id:kouten0430:20180114144026j:plain

 

・単位をMとした場合

開始日から終了日までの経過月数(日は切り捨て)を取得します。

f:id:kouten0430:20180114144047j:plain

 

・単位をDとした場合

開始日から終了日までの経過日数を取得します。

f:id:kouten0430:20180114144127j:plain

 

・単位をYMとした場合

開始日から終了日までの1年未満の月数を取得します。

f:id:kouten0430:20180114144151j:plain

 

・単位をYDとした場合

開始日から終了日までの1年未満の日数を取得します。

f:id:kouten0430:20180114144215j:plain

 

・単位をMDとした場合

開始日から終了日までの1ヶ月未満の日数を取得します。

f:id:kouten0430:20180114144231j:plain


・YM,YD,MDの使い方の例
例えば、開始日から終了日までの経過年・月・日数を表示したい場合などは、Yで年数を取得し、YMおよびMDで1年未満の月数・日数を取得するとよいと思います。
下記画像では
A5セルに、=DATEDIF(A2,B2,"Y")
A6セルに、=DATEDIF(A2,B2,"YM")
A7セルに、=DATEDIF(A2,B2,"MD")
を入力し、経過年・月・日数を表示しています。

f:id:kouten0430:20180114144303j:plain