Googleスプレッドで関数を使う(日付系関数のうまい使い方)その2

勤務シフトや納品日など、業務上日付を扱うことは多いと思います。

業務の開始日と終了日の日数だったり、納期までの残日数、生年月日から年齢などを自動的に計算してくれるのに便利な関数があります。

ここでは、DAYS関数とDATEDIF関数の使い方について、わかりやすく図解付きで解説していきます。

ここで解説する関数一覧

日付を処理する関数はいろいろありますが、ここでは次の関数の使い方を解説しています。

指定した2つの日付間の日数などを計算してくれる関数です。

関数名概要
DAYS指定した2つの日付間の日数を返します
DATEDIF2 つの日付間の日数、月数、年数を計算します

2つの日付間の日数を返す関数(DAYSとDATEDIF)

DAYS関数やDATEDIF関数を使うことで、納期までの残日数や、作業期間の日数などを指定した日付から計算することができます。

例として次のような表がある場合の使い方を説明します。

DAYS関数を使って、業務の開始日と終了日から、D列にその作業日数を計算する式を書きます。

構文は以下のとおり

=DAYS(終了日,開始日)

よくある間違いとして注意して欲しいのは2点

  • DAY関数と名前が似ている
  • 引数は先に終了日を入れる

実際に上図の表に式を入れるとこのようになります。

セルD2に入れている関数は次のように記述しています。

=DAYS(C2,B2)

11月1日から11月7日までだと7日間じゃないの?

と思われる方も多いかと思いますが、

DAYS関数は通算日数ではなく、経過日数と考えた計算をします。

なので、開始日である初日を0日として、6日経過すると終了日の11月7日ですね。

という計算をします。

通算日数として表示したい場合は、以下のように「+1」をつけて表示しましょう。

=DAYS(C2,B2)+1

DAYS関数と同じようなことができるのがDATEDIF関数です。

構文は以下のとおり。

=DATEDIF(開始日,終了日,単位)

DAYS関数と違って、開始日を最初に指定する構文です。

紛らわしいですね・・・

[単位]には6種類が指定できますが、詳しくは後述します。

DAYS関数と同じ計算をするのは[単位]を”D”としたときになります。

セルD2に書いた式は以下のとおり。

単位の引数には ”(ダブルクォーテーション)を忘れずに。

=DATEDIF(B2,C2,”D”)

先ほどのDAYS関数と同じ結果になります。

=DAYS(C2,B2)

先ほども言いましたが、開始日と終了日の指定が逆なのが何とも紛らわしいです。

DATEDIF関数もDAYS関数と同様、経過日数として計算するので、開始日を0日として数えられています。

DATEDIF関数は日数以外にも計算してくれるので、もう少し詳しく解説したいと思います。

DATEDIF関数の[単位]による違い

DATEDIF関数は、DAYS関数と違い、日数を計算するだけでなく、月数や年数も計算できます。

構文を改めて記載します。

=DATEDIF(開始日,終了日,単位)

引数に[単位]を指定できるので”D”以外を指定することで、月数や年数などの計算ができます。

DATEDIF関数の[単位]
Y開始日と終了日の間の年数を返します
M開始日と終了日の間の月数を返します
D開始日と終了日の間の日数を返します
MD開始日と終了日の間から年と月を差し引いた日数を返します
YM開始日と終了日の間から年を日を差し引いた月数を返します
YD開始日と終了日の間が1年以内である前提で、
開始日と終了日の間の日数を返します
DATEDIF関数の3つ目の引数[単位]一覧

単位に”Y”を指定した場合

単位に”Y”を指定すると、開始日と終了日の間の年数を返します。

セルC2に書いてある式は以下のとおり

=DATEDIF(A2,B2,”Y”)

計算結果は上図のようになります。

2,3行目のように、1年に満たない場合は全て「0」と計算されます。

4行目のように、ぴったり1年以上経過して初めて「1」と計算されます。

5行目のように、2年と1日のような状態だと、

やはり1年に満たない日数は切り捨てられて「2」と計算されます。

1年に満たない半端な日数は切り捨てられて計算されます。

単位に”M”を指定した場合

単位に”Y”を指定すると、開始日と終了日の間の月数を返します。

セルC2に書いてある式は以下のとおり

=DATEDIF(A2,B2,”M”)

計算結果は上図のようになります。

2行目のように、1ヶ月に満たない場合は「0」と計算されます。

3行目のように、2ヶ月と15日の場合は半端な日数は切り捨てられて「2」と計算されます。

4行目のように、1年以上の差があっても半端な日数は切り捨てられて月数が計算されます。

1月に満たない半端な日数は切り捨てられて計算されます。

単位に”MD”を指定した場合

単位に”MD”を指定すると、開始日と終了日の間から年と月を差し引いた日数を返します。

セルC2に書いてある式は以下のとおり

=DATEDIF(A2,B2,”MD”)

計算結果は上図のようになります。

2行目のような場合は”D”を指定した時と同じような計算をし、「6」と計算されます。

3行目のように、年も月も無視されて日だけ計算されます。

4行目のように、開始日の月が終了日の月より遅い月の場合は、11/21から~12/5までの日数が計算されます。

年は無視され、1か月に満たない半端な日数だけが計算結果として表示されます。

単位に”YM”を指定した場合

単位に”YM”を指定すると、開始日と終了日から年と日を差し引いた月数を返します。

セルC2に書いてある式は以下のとおり

=DATEDIF(A2,B2,”YM”)

計算結果は上図のようになります。

2行目のような場合は、1か月未満なので、「0」と計算されます。

3行目のような場合は、端数の日は無視されて月だけ計算されます。

4行目のような場合は、年と1か月に満たない日数は無視されて、月だけ計算されます。

1年に満たない○ヶ月が計算結果として表示されるようなイメージです。なので計算結果は0~11のいずれかになります。

単位に”YD”を指定した場合

単位に”YD”を指定すると、開始日と終了日から年を差し引いた日数を返します。

セルC2に書いてある式は以下のとおり

=DATEDIF(A2,B2,”YD”)

計算結果は上図のようになります。

2行目のような場合は、”D”を指定した時と同じような計算をし、「34」と計算されます。

3行目のような場合は、年が無視され、月日が同じなので、「0」と計算されます。

4行目のような場合は、1年に満たない部分だけ計算され、「365」と計算されます。

1年に満たない日数が計算結果として表示されるようなイメージです。なので計算結果は0~365のいずれかになります。

DATEDIF関数の便利な使い方

DATEDIF関数は指定した引数でいろいろな年・月・日を計算してくれますが、どういう場面で使えるかを解説していきます。

生年月日から自動的に年齢を計算する

年数のみを計算してくれる”Y”を使うと、今日時点で何歳かを簡単に計算できます。

例えば、以下のような表があったとします。

セルD1には今日の日付ということで、「=TODAY()」の関数が入っています。

TODAY関数についてはこちらの記事で解説しています。

C列に4~6行目に、「生年月日」と「今日の日付」から年齢を求めたい場合。

まずセルC4に以下の式を書きます。

=DATEDIF(B4,$D$1,”Y”)

開始日=生年月日、終了日=本日の日付、差分の年を表示

という書き方になりますね。

5,6行目にコピーして反映させたいので、指定したセルの位置が変わってほしくない「本日の日付」セルD1は、「$」を付けて絶対参照にしましょう。

そして出来上がったのがこちら。

セルの表示形式も以下のように変えると○○歳と表示されますね。

在社期間を○年○ヵ月○日と表示する

DATEDIF関数をうまく使えば、入社日と退社日から在社していた期間を○年○ヵ月○日と表示することができます。

このような表があるとします。

D列に在社年数を、E列に在社月数を、F列に在社日数をそれぞれDATEDIF関数を使って表示します。

D列は差分の年数さえわかれば良いので、引数に “Y” を使います。

セルD2には以下のように書きます。

=DATEDIF(B2,C2,“Y”)

E列は、年数を無視して月数だけ表示したいので、引数に “YM” を使います。

セルE2には以下のように書きます。

=DATEDIF(B2,C2,“YM”)

F列は、年を無視して1か月未満の日数だけを表示したいので、引数に “MD” を使います。

セルF2には以下のように書きます。

=DATEDIF(B2,C2,“MD”)

それぞれ入力して、3,4行目にもコピーするとこのように出来上がります。

味気ないというか、見づらいので表示設定もわかりやすく変更してみましょう。

これで、入社日と退社日の値を使った在社期間の表示ができました。

DATEDIF関数の”MD”,”YM”などはこのような使い方ができます。

まとめ

今回は、DAYS関数とDATEDIF関数の解説をしました。

日にちだけわかれば問題ない場合は、DAYS関数で事足りますが、もう少し複雑な計算結果を求めるなら、DATEDIF関数は何気に便利です。

何かと応用が利く関数ですし、一度仕込んでしまえば、その後の作業が楽になることが多いと思うので、うまく活用して仕事の手間を減らしてみませんか?

コメント