作りながら学ぶ!
シリーズ連載を通して、勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ方法を解説。
こんにちは、たま(@closuppo)です!
今回は「第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日を自動表示される作業を進めていきましょう。
IF関数を使って、カレンダー月末の29日・30日・31日を自動表示&自動非表示されるようにしましょう。
その月に存在しない日数の場合は「ー」と表示される数式にします。
使う関数は4つ。
- IF関数
- DAY関数
- DATE関数
- OR関数
それでは、解説していきます。
本格的に関数を作っていく
ので少し難しくなってきます
29日を自動表示する数式はIF関数とDAY関数を組み合わせて作ります。
2月で潤年でない場合は「ー」と表示され、それ以外は「29」と表示されるようにします。
セルA30に入力する数式はこうなります。
=IF(DAY(A29+1)<>29,"ー",A29+1)
それでは解説していきます。
IF(イフ)関数は論理関数の1つです。
IF関数では、条件を満たすときはTRUEの処理を返し、満たさないときはFALSEの処理を返します。
IF関数の構文はこちら。
=IF(❶条件 , ❷TRUE の処理 , ❸FALSE の処理 )
【❶条件】には「29日と等しくない」との条件の関数を入れます。この関数はDAY関数を活用するので後ほど説明します。
【❶条件】が満たせている場合はTRUEとなるので 【❷TRUE の処理】 には「"ー"」と記載します。
【❶条件】が満たせていない場合はFALSEとなるので【❸FALSE の処理】に「A29+1」と記載します。
数式を書くとこうなります。
=IF(❶条件 ,"ー",A29+1)
次に、DAY関数を使って【❶条件】部分を作っていきましょう。
IF関数にDAY関数を組み合わせる
方法についてお伝えします
IF関数の基礎をもっと詳しく知りたいという方は以下ページを参考にしてください。
DAY(デイ)関数は、指定した日付データから日の数値を抽出することができる関数です。
DAY関数の構文はこちら。
=DAY(シリアル値)
シリアル値とは、日付や時刻を数字で表した値のことです
シリアル値とは
通常、日付や時刻は人間が理解しやすい2/15、2月15日などの形式で表されますが、コンピュータが扱いやすい形式として、一定の基準日からの経過日数や経過秒数として表現される数字がシリアル値です。
D2のセルにDAY関数を使って、A2の日付データ「2020/2/15」から、日にちの「15」を数値として抽出して表示させてみましょう。
A2に入力する数式はこうなります。
=DAY(A2)
サンプルシートは【DAY関数】のシートをお使いください
日にちの「15」のみ表示することができました。
ここで注意したいのが、日付は表示形式の表示方法の1つであるということです
青い表の日付欄A6には、日付として見やすい「2020/2/15」という日付データで表示されていますが、表示形式で自動を選択すると「43876」という数字になります。
この「43876」という数字は、コンピュータが扱いやすい形式とされているシリアル値です。
表示形式で日付として見やすい「2020/2/15」という日付データで表示されていますが、コンピュータが認識している数字(シリアル値)は「43876」なのです。
「2020/2/15」と表示されているけど、数字のデータは「43876」なんですね
青い表の日付欄A6の表示形式を日付表示に戻してから、表示形式のカスタム日時で、日にちの「15」のみ表示させましょう。
日にちの「15」のみになったA6をコピーしてD6に貼り付けます。
一見D2とD6は同じ「15」に見えますが、それぞれの表示形式を自動にしてみると、D2はDAY関数を使って数値として抽出されているので数値の「15」ですが、D6の「15」は日付表示で「15」に見えているだけであって、数値に変換すると「43876」なのです。
このように、DAY関数を使うことで、ただ数字を参照しているだけではなく、表示形式も変換しているのです。
このDAY関数を使ってIF関数の【❶条件】を作っていきましょう。
先ほど【IF関数】で作った数式を思い出してください。
=IF(❶条件,"ー"
,A29+1)
この【❶条件】をDAY関数で作ります。
条件は「29日と等しくない」でしたね。
DAY関数でその条件を作るとこうなります。
DAY(A29+1)<>29
「A29+1」は2月28日に1をプラスしているので2月29日となります。そして今回は「29日と等しくない」との条件にしたいので演算子「 <> (等しくない)」を使っています。
セル「A30」に入力するIF関数にDAY関数を組み合わせた数式はこうです。
=IF(DAY(A29+1)<>29,"ー",A29+1)
セル「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日を自動表示する数式はIF関数とDATE関数を組み合わせて作ります。
カレンダー前提条件でもお伝えした通り、2月以外の全ての月では30日が存在します。そのため、2月であれば「ー」と表示し、そうでなければ「30」と表示することで自動化することがきます。
セル「A31」に入力する数式はこうなります。
=IF('設定'!B2=2,"ー",DATE('設定'!B1,'設定'!B2,30))
こちらは設定シートのセル「B2」が「2」と等しければ、「ー」と返し、そうでなければ「30」と返します。
31日を自動表示する数式はIF関数とOR関数を組み合わせて作ります。
31日が存在する月は「31」と表示させ、それ以外は「ー」と表示されるようにしていきましょう。
セル「A32」に入力する数式はこうなります。
=IF(OR('設定'!B2=1,'設定'!B2=3,'設定'!B2=5,'設定'!B2=7,'設定'!B2=8,'設定'!B2=10,'設定'!B2=12),A31+1,"ー")
それでは解説していきます。
OR(オア)関数は論理関数の1つです。
どれか1つの条件を満たしていればTRUE を返し、条件全てが一致していない場合はFALSEを返します。
OR関数の構文はこちら。
=OR(❶論理式, ❷論理式, …, 論理式255)
この論理式の部分に条件を入れていきます。
31日が存在する月は、1月・3月・5月・7月・8月・10月・12月でしたね。
この場合、完成したOR関数はこうなります。
=OR('設定'!B2=1,'設定'!B2=3,'設定'!B2=5,'設定'!B2=7,'設定'!B2=8,'設定'!B2=10,'設定'!B2=12)
こちらは、設定シートのセル「B2」が1・3・5・7・8・10・12のどれが1つでも等しければ 【TRUE】を返し、条件全てが一致していない場合は【FALSE】を返しす数式となっています。
31日が存在する月は「31」と返し、そうでない場合は「ー」と返す数式を作りましょう。
IF関数の構文はこうでしたね。
=IF(❶条件 , ❷TRUE の処理 , ❸FALSE の処理 )
【❶条件】には先ほど作ったOR関数を入れましょう。
OR関数では31日が存在する月は【TRUE】となる条件にしているので【❷TRUE の処理】には「A31+1」と入力しましょう。
31日が存在しない月の場合は【FALSE】が返されるので【❸FALSE の処理】には「ー」と入力します。
セル「A32」に入力するIF関数にOR関数を組み合わせた数式はこうなります。
=IF(OR('設定'!B2=1,'設定'!B2=3,'設定'!B2=5,'設定'!B2=7,'設定'!B2=8,'設定'!B2=10,'設定'!B2=12),A31+1,"ー")
設定シートのセル「B2」が1・3・5・7・8・10・12のどれが1つでも等しければ「31」 を返し、条件全てが一致していない場合は 「ー」 を返す数式の完成です。
OR関数の基礎もっと詳しく知り
たいという方は以下ページを参考
にしてください
今回はGoogleスプレッドシートでのIF関数・DAY関数・OR関数の使い方についてお伝えしました。
IF関数はよく使われる関数となり即戦力の必須テクニックの一つです。単体でIF関数を使うこともあれば、今回のように組み合わせてIF関数を使うこともよくあります。
経験をつみ、臨機応変に関数を使いこなせる技術を身につけていきましょう。
次回は、IF関数にARRAYFORMULA関数を組み合わせて残業時間を計算する方法についてお伝えします。
勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ
シリーズ連載を通して、勤怠管理システムを作りながらスプレッドシートを体系的に学ぶ方法を解説しています。