【スプレッドシート】IF関数で潤年を判定しカレンダー自動入力する方法
作りながら学ぶ!
シリーズ連載を通して、勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ方法を解説。
今回は「第5回:IF関数で潤年を判定しカレンダー自動入力する方法」について説明していきます。
閏年(うるうどし)を自動判定し、カレンダー月末の29日・30日・31日を自動表示&自動非表示されるようにしていきましょう。

全シリーズは以下シートにまとめてます
※目次をクリックすると
タイトルの先頭まで移動します(↓)
前回記事のおさらい
前回の記事では、【DATE関数】と【データ入力規則】の機能を活用してカレンダーの1日から28日まで自動表示されるシートを作成しました。
今回は、その続きで【IF関数】【DAY関数】【OR関数】を使って閏年(うるうどし)を自動判定し、カレンダー月末の29日・30日・31日を自動表示&自動非表示する方法を解説します。
閏年の判定方法はいくつかありますが、今回はオートフィルの特徴を活かした簡単な方法を学びましょう。

サンプルシートを用意しています
のでコピーして参考にしてください
まずはじめに

月末の29日・30日・31日を自動表示&自動非表示するシートを作成するために、カレンダーの前提条件を理解しておきましょう。
- 2月は28日だが4年に1回の閏年(うるうどし)には29日となる。
- 2月以外であれば全ての月で30日は存在する。
- 1月・3月・5月・7月・8月・10月・12月は31日まで存在する。
この前提条件とスプレッドシートの機能を利用して、その月に存在しない日数の場合は「ー」と表示する勤怠シートを作成していきます。
潤年を判定する簡単な方法
スプレッドシートでは日付に1をプラスすると翌日の日付を返してくれます。この 日付機能を活用することで簡単に潤年を判定 することができます。
例えば、セル「A30」に「=A29+1」と計算式を入れると「29」が返されます。これは潤年が自動判定され、2月28日の次の日の2月29日が返されています。(2020年は潤年)
この日付の前提条件を利用して、カレンダー月末の29日・30日・31日を自動表示される作業を進めていきましょう。

潤年でない場合はの「01」と
返されます!
IF関数を使って自動化する
IF関数を使って、カレンダー月末の29日・30日・31日を自動表示&自動非表示されるようにしましょう。
その月に存在しない日数の場合は「ー」と表示される数式にします。
使う関数は3つ。
- IF関数
- DAY関数
- OR関数
それでは、解説していきます。

本格的に関数を作っていく
ので少し難しくなってきます
29日を自動表示する
29日を自動表示する数式はIF関数とDAY関数を組み合わせて作ります。
2月で潤年でない場合は「ー」と表示され、それ以外は「29」と表示されるようにします。
セルA30に入力する数式はこうなります。
それでは解説していきます。
IF関数とは?
IF(イフ)関数は論理関数の1つです。
IF関数では、条件を満たすときはTRUEの処理を返し、満たさないときはFALSEの処理を返します。
IF関数の構文はこちら。
【❶条件】には「29日と等しくない」との条件の関数入れます。この関数はDAY関数を活用するので後ほど説明します。
❶条件 が満たせている場合はTRUEとなるので ❷TRUE の処理 には「"ー"」と記載します。
【❶条件】が満たせていない場合はFALSEとなるので【❸FALSE の処理】に「A29+1」と記載します。
数式を書くとこうなります。
次に、DAY関数を使って【❶条件】部分を作っていきましょう。

IF関数にDAY関数を組み合わせる
方法についてお伝えします
IF関数の基礎もっと詳しく知りたいという方は以下ページを参考にしてください。
DAY関数とは?
DAY(デイ)関数は、日付データから日の数値を求める関数です。
DAY関数の構文はこちら。
例えば、DAY関数でセル「A29」を指定した場合は「28」と返されます。これは2月28日の日の部分が返されています。
また、「A29+1」とすることで次の日を返すことができます。
2020年は閏年なので2月28日の次の日が29日となり「29」が返されます。潤年でない場合はの3月01日となるので「01」と返されます。

このDAY関数を使ってIF関数の【❶条件】を作っていきましょう。
IF関数にDAY関数を組み合わせる
先ほど【IF関数】で作った数式を思い出してください。
この【❶条件】をDAY関数で作ります。
条件は「29日と等しくない」でしたね。
DAY関数でその条件を作るとこうなります。
「A29+1」は2月28日に1をプラスしているので2月29日となります。そして今回は「29日と等しくない」との条件にしたいので演算子「 <> (等しくない)」を使っています。
セル「A30」に入力するIF関数にDAY関数を組み合わせた数式はこうです。

セル「A29」に1をプラスした結果が「29」と等しくなければ「ー」と返し、等しければ「A29に1をプラスした結果」を返しています。
潤年でなければ2月は28日までとなるため、「A29+1」 は3月1日となり「ー」と表示されます。
設定ページの「年」を2021などに変更し、しっかりと条件が適応されているのか試してみてください。
IF関数の引数(論理式)に使用できる比較演算子には次のものがあります。
演算子 | 効果 | 使用例 | 結果 |
---|---|---|---|
= | 等しい | 1 = 2 | FALSE |
<> | 等しくない | 1 <> 2 | TRUE |
> | 大きい | 1 > 2 | FALSE |
< | 小さい | 1 < 2 | TRUE |
>= | 以上 | 1 >= 2 | FALSE |
<= | 以下 | 1 <= 2 | TRUE |
30日を自動表示する
30日を自動表示する数式はIF関数で作ります。
カレンダー前提条件でもお伝えした通り、2月以外の全ての月では30日が存在します。そのため、2月であれば「ー」と表示し、そうでなければ「30」と表示することで自動化することがきます。
セル「A31」に入力する数式はこうなります。

こちらは設定シートのセル「B2」が「2」と等しければ、「ー」と返し、そうでなければ「30」と返します。
31日を自動表示する
31日を自動表示する数式はIF関数とOR関数を組み合わせて作ります。
31日が存在する月は「31」と表示させ、それ以外は「ー」と表示されるようにしていきましょう。
セル「A32」に入力する数式はこうなります。
それでは解説していきます。
OR関数とは?
OR(オア)関数は論理関数の1つです。
どれか1つの条件を満たしていればTRUE を返し、条件全てが一致していない場合はFALSEを返します。
OR関数の構文はこちら。
この理論式の部分に条件を入れていきます。
31日が存在する月は、1月・3月・5月・7月・8月・10月・12月でしたね。
この場合、完成したOR関数はこうなります。
こちらは、設定シートのセル「B2」が1・3・5・7・8・10・12のどれが1つでも等しければ 【TRUE】を返し、条件全てが一致していない場合は【FALSE】を返しす数式となっています。
IF関数にOR関数を組み合わせる
31日が存在する月は「31」と返し、そうでない場合は「ー」と返す数式を作りましょう。
IF関数の構文はこうでしたね。
【❶条件】には先ほど作ったOR関数を入れましょう。
OR関数では31日が存在する月は【TRUE】となる条件にしているので【❷TRUE の処理】には「A31+1」と入力しましょう。
31日が存在しない月の場合は【FALSE】が返されるので【❸FALSE の処理】には「ー」します。
セル「A32」に入力するIF関数にOR関数を組み合わせた数式はこうなります。
設定シートのセル「B2」が1・3・5・7・8・10・12のどれが1つでも等しければ「31」 を返し、条件全てが一致していない場合は 「ー」 を返しす数式の完成です。

OR関数の基礎もっと詳しく知り
たいという方は以下ページを参考
にしてください
まとめ
今回はGoogleスプレッドシートでのIF関数・DAY関数・OR関数の使い方についてお伝えしました。
IF関数はよく使われる関数となり即戦力の必須テクニックの一つです。単体でIF関数を使うこともあれば、今回のように組み合わせてIF関数を使うこともよくあります。
経験をつみ、臨機応変に関数を使いこなせる技術を身につけていきましょう。
次回は、IF関数にARRAYFORMULA関数を組み合わせて残業時間を計算する方法についてお伝えします。
勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ
シリーズ連載を通して、勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ方法を解説してます。