【スプレッドシート】IF関数で潤年を判定しカレンダー自動入力する方法

こんにちは、たま(@closuppo)です。

「作りながら学ぼう」シリーズ第4回!

シリーズ連載を通して「勤怠管理システム」を作りながら、Googleスプレッドシートの関数や基礎知識について解説してます。

今回は、 閏年(うるうどし)を自動判定しカレンダー月末の29日・30日・31日を自動表示&自動非表示する方法 についてお伝えします。

閏年の判定方法はいくつかありますが、今回はオートフィルの特徴を活かした簡単な方法で進めます。

それでは、IF関数・DAY関数・OR関数の基礎を学びながら顧客管理システムを作っていきましょう。


タマ

前回の記事では「DATE関数やデータ入力規則を使って日付や曜日を自動表示する方法」についてお伝えしました!


シリーズ全編で学ぶ項目

  • 表示形式の変更
  • 文字・背景色の変更
  • 枠線の変更
  • 条件付き書式設定
  • データの入力規則
  • 演算子
  • 絶対参照
  • TEXT関数
  • DATE関数
  • OR関数
  • IF関数
  • SUM関数
  • COUNTA関数
  • COUNTIF関数
  • ArrayFormula関数
  • VLOOKUP関数


※目次をクリックすると
タイトルの先頭まで移動します(↓)

目次

まずはじめに

spreadsheet-aleapyear4

月末の29日・30日・31日を自動表示&自動非表示するシートを作成するために、カレンダーの前提条件を理解しておきましょう。

  • 2月は28日だが4年に1回の閏年(うるうどし)には29日となる。 
  • 2月以外であれば全ての月で30日は存在する。
  • 1月・3月・5月・7月・8月・10月・12月は31日まで存在する。

この前提条件とスプレッドシートの機能を利用して、その月に存在しない日数の場合は「ー」と表示する勤怠シートを作成していきます。


前回記事のおさらい

前回の記事では、データ入力規則やDATE関数を使ってカレンダーの1日から28日まで自動表示されるシートを作成しました。

閏年の自動判定をするため2020年2月のカレンダー設定になっています。

このシートの続きをから作っていきます。

前回の記事はこちら

spreadsheet-aleapyear_01

潤年を判定する簡単な方法

スプレッドシートでは日付に1をプラスすると翌日の日付を返してくれます。この 日付機能を活用することで簡単に潤年を判定 することができます。

例えば、セル「A30」に「=A29+1」と計算式を入れると「29」が返されます。これは潤年が自動判定され、2月28日の次の日の2月29日が返されています。(2020年は潤年)

この日付の前提条件を利用して、カレンダー月末の29日・30日・31日を自動表示される作業を進めていきましょう。


たま

潤年でない場合はの「01」と返されます!


IF関数を使って自動化する

IF関数を使って、カレンダー月末の29日・30日・31日を自動表示&自動非表示されるよう作っていきましょう。その月に存在しない日数の場合は「ー」と表示される数式にしていきます。

使う関数は3つ。

  1. IF関数
  2. DAY関数
  3. OR関数

それでは、解説していきます。

たま

本格的に関数を作っていくので少し難しくなってきますよ!


29日を自動表示する

29日を自動表示する数式はIF関数とDAY関数を組み合わせて作ります。

2月で潤年でない場合は「ー」と表示され、それ以外は「29」と表示されるようにします。

セルA30に入力する数式はこうなります。

=IF(DAY(A29+1)<>29,"ー",A29+1)

それでは解説していきます。


IF関数とは?

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関数の構文はこちら。

=DAY(シリアル値)

例えば、DAY関数でセル「A29」を指定した場合は「28」と返されます。これは2月28日の日の部分が返されています。

また、「A29+1」とすることで次の日を返すことができます。

2020年は閏年なので2月28日の次の日が29日となり「29」が返されます。潤年でない場合はの3月01日となるので「01」と返されます。

spreadsheet-aleapyear_02

このDAY関数を使ってIF関数の ❶条件 を作っていきましょう。


IF関数にDAY関数を組み合わせる

先ほど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日を自動表示する

30日を自動表示する数式はIF関数で作ります。

カレンダー前提条件でもお伝えした通り、2月以外の全ての月では30日が存在します。そのため、2月であれば「ー」と表示し、そうでなければ「30」と表示することで自動化することがきます。

セル「A31」に入力する数式はこうなります。

=IF(‘設定’!B2=2,"ー",30)
spreadsheet-aleapyear_04

こちらは設定シートのセル「B2」が「2」と等しければ、「ー」と返し、そうでなければ「30」と返します。


31日を自動表示する

31日を自動表示する数式はIF関数とOR関数を組み合わせて作ります。

31日が存在する月は「31」と表示させ、それ以外は「ー」と表示されるようにしていきましょう。

セル「A32」に入力する数式はこうなります。

=IF(OR(‘設定’!B2=2,’設定’!B2=4,’設定’!B2=5,’設定’!B2=7,’設定’!B2=8,’設定’!B2=10,’設定’!B2=12),A31+1,"ー")

それでは解説していきます。


OR関数とは?

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 を返しす数式となっています。


IF関数にOR関数を組み合わせる

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関数を組み合わせて残業時間を計算する方法についてお伝えします。