1
DATE 関数
DATE 関数は、引数で指定される日付のシリアル値を返します。 =DATE(年,月,日)
引数の「年」「月」「日」には、整数や YEAR 関数、MONTH 関数、DAY 関数などでシリアル値から取り出した数値などが 使用できます。 =DATE(2016,4,1) =DATE(YEAR(TODAY()),MONTH(TODAY())+6,1) DATE 関数は、シリアル値を返しますが、自動で表示形式が「日付」となるため、日付として表示されます。 表示形式を「標準」にすると、シリアル値が表示されます。 特定の日付を取得するための専用の関数も多数ありますが、DATE 関数でも様々な日付を取得することができます。 今月の初日 =DATE(YEAR(TODAY()),MONTH(TODAY()),1) 翌月の初日 =DATE(YEAR(TODAY()),MONTH(TODAY())+1,1) ※ 1 月 1 日の場合も、YEAR を「+1」しなくても、Excel が翌年の 1 月 1 日に調整します。
2 今月の末日 =DATE(YEAR(TODAY()),MONTH(TODAY())+1,0) ※ 月を「+1」し、日を「0」にします。 来年の元日 =DATE(YEAR(TODAY())+1,1,1) 生年月日など期日を指定して、開始日や終了日を求めることがあります。 このような場合は、DATE 関数と IF 関数等を組み合わせます。 ※ 以下、生年月日の入ったセルには、「生年月日」と名前を定義しています。 児童手当「小学校修了前」の開始日 まず、3歳の誕生日を取得します。 =DATE(YEAR(生年月日)+3,MONTH(生年月日),DAY(生年月日)) 次に、「小学校修了前」の開始日を「3歳に達した日の属する月の翌月」と考えます。 =DATE(YEAR(生年月日)+3,MONTH(生年月日)+1,1) が、生年月日が月の初日の場合、「3歳未満に支給」がうまくいきません。 そこで、生年月日が月の初日であるかどうかを判断して、支給開始月を正しく取り出します。 =IF(DAY(生年月日)=1,DATE(YEAR(生年月日)+3,MONTH(生年月日),1) ,DATE(YEAR(生年月日)+3,MONTH(生年月日)+1,1))
3 小学校入学 まず、満 6 歳の誕生日を取得します。 =DATE(YEAR(生年月日)+6,MONTH(生年月日),DAY(生年月日)) 次に、満 6 歳の誕生日以後における最初の学年の初め(最初の 4 月 1 日)を取得します。 =DATE(YEAR(生年月日)+7,4,1) が、このままでは「早生まれ」の場合、間違った日付を返します。 「早生まれ」を調整します。 =IF(OR(MONTH(生年月日)<4,AND(MONTH(生年月日)=4,DAY(生年月日)=1)) ,DATE(YEAR(生年月日)+6,4,1),DATE(YEAR(生年月日)+7,4,1)) ※ 「早生まれ」は、月が 4 未満または月が「4」且つ日が「1」の場合ということです。次の論理式のほうがわかりやすいかも しれません。 (MONTH(生年月日)<4)+(MONTH(生年月日)=4)*(DAY(生年月日)=1) 児童手当「中学校修了前」の開始日 小学校入学と同じ考えで、+する年数を「12」または「13」とします。 =IF(OR(MONTH(生年月日)<4,AND(MONTH(生年月日)=4,DAY(生年月日)=1)) ,DATE(YEAR(生年月日)+12,4,1),DATE(YEAR(生年月日)+13,4,1)) 加算開始日 小学校入学と同じ考えで、+する年数を「15」または「16」とします。 =IF(OR(AND(MONTH(生年月日)=4,DAY(生年月日)=1),(MONTH(生年月日)<4)) ,DATE(YEAR(生年月日)+15,4,1),DATE(YEAR(生年月日)+16,4,1)) 18 歳年度末 =IF(OR(AND(MONTH(生年月日)=4,DAY(生年月日)=1),(MONTH(生年月日)<4)) ,DATE(YEAR(生年月日)+17,3,31),DATE(YEAR(生年月日)+18,3,31)) 22歳年度末 =IF(OR(AND(MONTH(生年月日)=4,DAY(生年月日)=1),(MONTH(生年月日)<4)) ,DATE(YEAR(生年月日)+22,3,31),DATE(YEAR(生年月日)+23,3,31))
4
EDATE 関数
EDATE 関数は、開始日から起算して、指定された月数だけ前または後の日付に対応するシリアル値を返します。 =EDATE(開始日,月) 今日のひと月後は、月を「1」とします。 =EDATE(TODAY(),1) 今日のひと月前は、月を「-1」とします。 =EDATE(TODAY(),-1) DATE 関数ではそれぞれ次のようになります。 =DATE(YEAR(TODAY()),MONTH(TODAY())+1,DAY(TODAY())) =DATE(YEAR(TODAY()),MONTH(TODAY())-1,DAY(TODAY())) 応当日 「指定された月数だけ前または後の日付に対応するシリアル値」を返しますということは、一見民法の「応当日」のようです。 が、次の式は =EDATE("2016/10/31",1) 「2016/11/30」を返します。 次の式は、 =EDATE("1/31",1) 「2016/2/29」を返します。 民法では「応当日がないときは・・・」という文があります。これは、10 月 31 日の応当日「11 月 31 日」がない場合など、 月末に生じるもので、応当日がない場合は、月の末日が「応当日の前日」となります。 つまり、EDATE 関数が、月によっては、応当日と応当日の前日を返してしまいます。 そこで、開始日と EDATE で取得した日付の「日」が異なる場合は、応当日がないという判断をして、調整します。 =IF(DAY(D1)<>DAY(EDATE(D1,1)),DATE(YEAR(D1),MONTH(D1)+2,0),EDATE(D1,1)-1)5
EOMONTH 関数
EOMONTH 関数は、開始日(シリアル値)から起算して、指定された月数だけ前または後の月の最終日のシリアル値を 返します。 =EOMONTH(開始日,月) 「月」が、「0」はの場合はその月の末日、「-1」の場合は、前月の末日となります。 月の初日は、次の式です。 その月の日数も簡単に取得できます。 =DAY(EOMONTH(D1,0)) ところで、DATE 関数では、今月の末日と初日は、次の式でした。 =DATE(YEAR(TODAY()),MONTH(TODAY())+1,0) =DATE(YEAR(TODAY()),MONTH(TODAY()),1) EOMONTH 関数は、2007 以降で使用できる関数であり、新しい関数は、常により簡潔に書けます。 が、関数の引数や使い方、動作等を覚えておく必要があります。 一方、DATE 関数のほう、理解しやすく、は長くはなりますが、どのような動作をしているのかが分かりやすくなっています。6
NETWORKDAYS 関数
NETWORKDAYS 関数は、開始日から終了日までの期間に含まれる稼動日の日数を返します。 引数はすべてシリアル値です。 NETWORKDAYS(開始日,終了日,[祭日]) ※ 稼働日とは、土曜、日曜、および指定された休日を除く日 祭日は省略可です。日曜日と土曜日を除く日数を返します(育児休業手当金の給付日数)。 =NETWORKDAYS(開始日,終了日) 祭日は、日付を含むセル範囲か、日付を示すシリアル値の配列定数を指定します。祭日は土・日と重なった場合は除きま す。 =NETWORKDAYS(開始日,終了日,祭日) 次の式は、月ごとの稼働日を返します。$E$2:$E$18 で祭日が指定されているので、主任手当の日数計算の基礎として 使えます。 =NETWORKDAYS(A2,B2,$F$2:$F$19)7
NOW・TODAY 関数
NOW 関数は現在の日付と時刻に対応するシリアル値を返します。 =NOW() TODAY 関数は、現在の日付に対応するシリアル値を返します。 =TODAY() TODAY 関数が整数のみのシリアル値であるのに対して、NOW 関数が返すのは、少数部のあるシリアル値であり、少数部 が時刻です。シリアル値
Excel では、日付と時刻は連続したシリアル値として扱います。 ※ シリアル ・・・ 連続していること 日付は、「1900/1/1」を「1」とし、1 日ごとに「1」を加えた数値になっています。 「1899/12/31」は文字列と判断されます。また、日付の最大値は「9999/12/31」です。 時刻は、1/(24*60*60)を 1 秒とし、0 時 00 分から、1 秒経過ごとに同じ数値が加算されます。累計が「1」を 超えると日付が 1 日繰り上がり、「0」からの加算が繰り返されます。 次の式は、5 時を表します。式を挿入し、表示形式を時刻にすると、「5:00:00」と表示されます。 =(1/(24*60*60))*5*60*608
WEEKDAY 関数
WEEKDAY 関数は、日付(シリアル値)に対応する曜日を「1」から「7」の整数で返します。既定では、「1」が「日」、「2」 が「月」、、、、、、「7」が「土」です。 =WEEKDAY(シリアル値,[週の基準]) F 列は、=E1 といった数式が入っており、表示形式(aaa)で曜日名を表示しています。 週の規準は省略できます。「2」とすると、「1」を「月」として開始します。 WEEKDAY 関数は、単に整数を返すだけなので、曜日を表示するためには、CHOOSE 関数などを使うか、表示形式で 表示を切り替えます。 =CHOOSE(WEEKDAY(A1),"日","月","火","水","木","金","土") VLOOKUP 関数では次のとおりです。 =VLOOKUP(WEEKDAY(D1),$G$1:$H$7,2) ところで、日付のシリアル値を「7」で割ると、日曜日は剰余が「1」、月曜日「2」、、、、金曜日「6」、土曜日「0」となります。 これを利用すると、曜日を返す VLOOKUP 関数の式は、 =VLOOKUP(MOD(D1,7),$G$1:$H$7,2,FALSE) となります。この場合は、4 つ目の引数(FALSE)が必要です。9
YEAR・MONTH・DAY 関数
YEAR 関数は日付(シリアル値)に対応する「年」を 1900〜9999 の範囲の整数で返します。 =YEAR(シリアル値) MONTH 関数は日付(シリアル値)から「月」を整数で返します。 =MONTH(シリアル値) DAY 関数は日付(シリアル値)から「日」を整数で返します。 =DAY(シリアル値) DATE 関数のところで、シリアル値から取り出した「年」や「月」、「日」を利用して様々な日付を取得しました。DATE 関数 とこの 3 つの関数が、日付処理の基本です。 和暦の「年」を取り出す関数はありません。西暦の「年」から換算します。平成の場合は、次の式です。 =YEAR(TODAY())-1988 昭和は次の式です。 =YEAR(D1)-1925 あるいは、TEXT 関数で取得します。 =VALUE(TEXT(D1,"e")) TEXT 関数で取り出すと、文字列になるので、VALUE 関数で数値に変換します。 シリアル値のまま、表示形式(e)で和暦の「年」にすることもできます。10
日付と表示形式
例えば、月予定表を作るときに、次のような形式の表を作ることがあります。
ここでは、A4 からの結合セルに、該当月の初日のシリアル値を入れ、表示形式で「平成 28 年 4 月 事務予定一覧」と しています。また、日は数値を直接入力するのではなく、A3 には=A1、A4 以下には=A3+1 といった数式を入れ、、表 示形式(d)で、シリアル値から日を表示しています。また、B3 以下には、=A3 といった数式を入れ、表示形式(aaa) で曜日を表示しています。 このようにシリアル値をそのままにして、表示形式で加工することにより、A1 に該当月の初日を入れるとその月に切り替わり ます。条件付き書式等で、末日の処理を行うと、翌月の日や曜日、罫線の非表示等も行えます。 日付はシリアル値として取り扱い、シリアル値はシリアル値のまま残しておくことで、自動取得や表示の切り替えが簡単に行 えます。 YEAR 関数や MONTH 関数と文字列を連結して、
="平成" & YEAR(TODAY())-1988 & "年" & MONTH(TODAY()) & "月分" など、「平成 年 月分」などをシリアル値から自動的に取得することがあります。 が、このような数式にすると、文字列となってしまい、再利用ができません。 個人的には、「日付はシリアル値として扱うべし」という方針を取り、「年」や「月」、「日」を扱う場合は、書式で処理をするこ とにしています。 表示形式は次のとおりです。 ggge"年"m"月分 非常勤講師の勤務状況について(報告)"
11 次の図では、A1 から下へ、先月の初日、本日のシリアル値を返す数式を設定し、表示形式を「ggge"年"m"月分"」とし ています。 A1:A3 をデータの入力規則、リストの元の値にすると、「月分」を今月と前月から選択することができます。通常は実績月 の翌月に作成するが、実績月に作成することもある場合など、の処理に使えます。 日付シリアルに下記の表示形式文字を適用すると、右側のように表示されます。 表示形式文字 表示 表示形式文字 表示 yyyy 2016 ge H28 yy 16 gge 平 28 m 2 ggge 平成 28 mm 02 e 28 d 5 aaa 金 dd 05 aaaa 金曜日 g H 区切り文字として使用できる半角記号以外の文字列は、「”(ダブルクォーテーション)」で挟んで、ユーザー定義の表示形 式に配置します。 ggge"年"m"月"d"日("aaa ")現在の児童生徒見込み数"
12