みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Googleスプレッドシートやエクセルで日付に関する処理をする場合も多いですよね。
ただ、けっこう日付の処理って、ややこしいしたくさん関数があって覚えきれなかったりしますよね。
今回は、スプレッドシートで使える日付関連の関数を一通り紹介したいと思います。
ちなみにですが、実は今回紹介する関数はExcelでも全く同じように使えますので、一石二鳥。
では、行ってみましょう。
スプレッドシートで使える日付関連の関数
今日の日付を求める
今日の日付を求める関数はTODAY関数です。
TODAY()
括弧内は何も書かないでOKです。
特定の日付から年、月、日を取り出す
ある日付から年、月、日を取り出したい場合はそれぞれYEAR,MONTH,DAY関数で
YEAR(日付)
MONTH(日付)
DAY(日付)
とします。
例えば日付が「2016/4/18」であれば
- YEAR(“2016/4/18”) → 2016
- MONTH(“2016/4/18”) → 4
- DAY(“2016/4/18”) → 18
となります。
年、月、日を指定して日付にする
逆に、年月日を指定して日付にしたい場合はDATE関数で
DATE(年,月,日)
と書きます。
何カ月後の日付を求める
ある特定の日から指定の月数だけ加算した日の日付を求めたい場合はEDATE関数を使います。
書き方は
EDATE(開始日,月数)
です。
例えば以下の場合はそれぞれ
- 来月の同じ日付:EDATE(TODAY(),1)
- 前月の同じ日付:EDATE(TODAY(),-1)
- 1年後の同じ日付:EDATE(TODAY(),12)
と書きます。
末日を求める
月末の日付を求める場合はEOMONTH関数を使います。
書き方はこうです。
EOMONTH(開始日,月数)
例えば
- 今月末:EOMONTH(TODAY(),0)
- 来月末:EOMONTH(TODAY(),1)
- 前月末:EOMONTH(TODAY(),-1)
などと使います。覚えておくと便利です。
日付関連の関数を使った演習
さて、では演習です。
チャットワークに自動でタスクを追加するというシステム作りを進めているのですが、このようなスプレッドシートがあります。
記事はこちらですので、ご興味があればどうぞ。
さて、今まで紹介した関数を駆使ししてF4セルとF5セル、つまり「次のタスク期限」を求める適切な数式を入れたいと思います。
では、それぞれ求めていきましょう。
今日の日にちを条件に今月または来月の特定の日を求める
F4セルは
- 今日の日にちがE4セルで指定した日以前の日にちであれば、今月のE4セルと同じ日にちの日
- 今日の日にちがE4セルで指定した日より後の日にちであれば、来月のE4セルと同じ日にちの日
と設定をしたいです。
条件によって分岐があるのでまずIF関数を使います。
IF(論理式, TRUE値, FALSE値)
論理式の部分ですが、「今日の日にちがE4セルで指定した日より後の日にちであれば」という式については
- 今日の日にち:DAY(TODAY())
- E4セルで指定した日にち:E4
ですから
IF(DAY(TODAY())>E4, TRUE値, FALSE値)
と表現することができます。
次にFALSE値からいきますが、「今月のE4セルと同じ日にちの日」は
- 年は今日の日付と同じ年
- 月は今日の日付と同じ月
- 日はE4セル
ですから
DATE(YEAR(TODAY()),MONTH(TODAY()),E4)
と表現できます。
TRUE値は「来月のE4セルと同じ日にちの日」ですからつまり「今月のE4セルと同じ日にちの日」のちょうど一月後です。
EDATE(DATE(YEAR(TODAY()),MONTH(TODAY()),E4),1)
です。ややこしいですけど、コピペすれば簡単。
もしくは
DATE(YEAR(TODAY()),MONTH(TODAY())+1,E4)
と書くことができます。
ですから、F4セルは
=IF(DAY(TODAY())>E4,DATE(YEAR(TODAY()),MONTH(TODAY())+1,E4),DATE(YEAR(TODAY()),MONTH(TODAY()),E4))
とすればよいということです。
条件に応じて月末日を求める
次にF5です。
E5セルを見て「末」と書いてあれば、その月の月末日を求めるということです。
こちらは簡単ですね。
=IF(E5="末",EOMONTH(TODAY(),0))
で、「末」と書いていない場合は先ほどのF4の場合を当てれば両方のパターンで使えますので
=IF(E5="末",EOMONTH(TODAY(),0),IF(DAY(TODAY())>E5,DATE(YEAR(TODAY()),MONTH(TODAY())+1,E5),DATE(YEAR(TODAY()),MONTH(TODAY()),E5)))
としておきます。
超長いですが、分解して段階を踏めば…なんとかなりますでしょ?
まとめ
スプレッドシートで使える日付関連の関数を多数お伝えしました。リファレンス的にご活用頂ければうれしいです。
- 今日の日付を求める:TODAY()
- 日付から年を取り出す:YEAR(日付)
- 日付から月を取り出す:MONTH(日付)
- 日付から日を取り出す:DAY(日付)
- 年月日を指定して日付にする:DATE(年,月,日)
- 特定の日から指定の月数だけ加算した日の日付を求める:EDATE(開始日,月数)
- 特定の日の月末の日付を求める:EOMONTH(開始日,月数)
大事なことなのでもう一回お伝えしますが、これらの関数はExcelでも全く同じように使えます。
ぜひマスターしちゃいましょう。
次回、これを活用してチャットワークに自動でタスクを追加する記事の続きを書きますので、よろしければそちらもどうぞ。