ダウンロード

日付に関する小技集


メニュー
月初日と月末日
第何週目
第n曜日の日付
nヵ月後、指定曜日の日付
最終営業日
営業日かを判定
営業日を考慮した作業完了日
営業日と締日、引き落とし日
曜日別集計
週ごとの集計
サンプルファイルのダウンロード
リンクリスト
解答を 全て展開 折り畳む

月初日と月末日


問題

月の最初最後の日付を算出しなさい。





完成例


解答例


月初日を求める

=DATE(YEAR(B30),MONTH(B30),1)
本日の日付から年月を取出し、月の始め(1日と決まっている)の日付を作り出します。

=EOMONTH(B30,-1)+1
月末を求める関数 EOMONTH を使用します。
先月の月末の次の日(+1)が、今月の月初めとなります。

月末日を求める

=DATE(YEAR(B30),MONTH(B30)+1,1)-1
翌月(+1)の「ついたち」の前日が、今月の末日

=EOMONTH(B30,0)
前項と同様。ただし今月(第2パラメータを「0」)

第何週目

問題


指定日付が月初めから数えて「第何週目」かを求めなさい。

例:
 2019年4月1日は「第週目」
 2019年4月8日は「第週目」
 2019年4月30日は「第週目」

解答例

WEEKNUM関数を使用すると、その年の1月1日から数えて、第何週目かを求めることができます。

たとえば、日曜日を週の始めとする場合
2019/4/8は、2019/1/1から数えて15週目、2019/4/1 は、14週目となります。
よって、2019/4/8 は、2019/4/1 から数えて2週目(15-14+1)となります。(+1 が必要なことに注意)



WEEKNUMの書式

WEEKNUM(シリアル値,[週の基準])

引数

シリアル値 必ず指定。 日付を指定。
        日付は、DATE 関数を使って入力するか、他の数式または他の関数の結果として指定。
週の基準 省略可能。 週の始まりを何曜日とするかを数値で指定。 既定値は 1(日曜基準)
       1:日曜 2:月曜

週の基準(始まりの曜日)について

週の始めを日曜にするか月曜にするかは異論のあるところです。
国によって異なり、日本や韓国、アメリカ、南米の多くは「日曜」基準、
ヨーロッパの大半、ロシア、中国は「月曜」基準となっているようです。

その他、
ISO(を国際標準規格機構)、1974年に“生活や実務上では、週の始まりを月曜日にする”と勧告
コンピュータ系:POSIX規格(UNIX,Windows含)では日曜基準が既定値
JIS日曜基準?

参考:
 週の始まりは何曜日なのか? 
 1週間のはじまりは何曜日?アメリカ式とヨーロッパ式って?
 こよみの学校

第n曜日の日付


問題

第n曜日の日付

 ある年月のn番目のX曜日の日付を求めなさい。

  例:2013年7月の第3水曜日は、2013年7月17日

解答例


nヵ月後、指定曜日の日付


問題

nか月後の以降の最初の指定曜日の日付を求めなさい

  本日が、2013年6月26日(水)とすると、
  3ヶ月後の最初の日曜日は、2013年9月30日(月)
  同、     最初の金曜日は、2013年9月27日(金)

解答例


最終営業日を求める


問題

月の最終営業日を算出しなさい。

営業日とは、土日、祝日(右下表)、および指定の休日を除いた日とします。
稼働日とも言います。

解答例



営業日かを判定

問題

指定日が営業日であれば"○"を表示しなさい。

営業日は、土日、祝日(右下表)、および指定の休日を除いた日とします。
祝日は右下の「祝日表」を使用。範囲(H8:H29)には"祝日表"の名前を定義済み

カレンダーは検算用


完成例

解答例



方法A:曜日判定と祝日表検索

土日、および、祝日表の日にち以外を営業日とします。
=IF(AND(MID("0000011",WEEKDAY(B49,2),1)="0",ISNA(VLOOKUP(B49,祝日表,1,FALSE))),"○","")
指定日の曜日が休みでなく休日に該当しない(指定日が休日表に見つからない)場合は営業日と判定。

MID("0000011",WEEKDAY(B49,2),1)="0"
月曜を基点とした曜日数字(月曜〜日曜:1〜7)をインデックスとして、休日を表す文字列から取り出した1文字が"0"であれば営業日

休日を表す文字列("0000011")
 WEEKDAY関数から帰る値は、1〜7の7種類
 それぞれを月火水目金土日 に相当させ、"0"は営業日,"1"は休みを表します。
 本例では、土曜と日曜の部分を"1"とし、休みにしています。

MID は、文字列の指定位置から指定数の文字列を取り出す関数

本方法は、休み曜日が視覚的にわかりやすくした方法。下記のように記述してもい可。
=IF(AND(WEEKDAY(B49,2)<=5,ISNA(VLOOKUP(B49,祝日表,1,FALSE))),"○","")
WEEKDAYの部分は、曜日数値が5(金曜日)以下(月〜金)かを判定しています。
ただし、月曜木曜が休みの場合には個別判定が必要となるので、式が長くなる。
(本例方式では、"1001000"とするだけでよい。)

ISNA(VLOOKUP(B49,祝日表,1,FALSE))) : 祝日表に見つからない

方法B:「期間内の営業日数を算出する関数」を利用

指定期間内の営業日数を返巣関数、NETWORKDAYS.INTL を利用します。
=IF(NETWORKDAYS.INTL(B49,B49,1,祝日表),"○","")
期間内(開始日〜終了日)の営業日数を返すので、
当日当日から当日まで)の営業日数が1(TRUE)であれば営業日と判定できます。

NETWORKDAYS.INTL関数の書式

NETWORKDAYS.INTL(開始日, 終了日, [週末], [休日])

開始日、終了日:日数を計算する 2 つの日付を指定
週末: 開始日と終了日の間の稼働日数に含めない、週末の曜日を指定。
    "週末" は、週末を示す週末番号または文字列で指定。
 週末番号で指定する場合:
  1、省略:土日が休み
  2:日曜と月曜  3:月曜日と火曜日 4:火曜日と水曜日 〜略〜
  11:日曜のみ 12:月曜のみ 13:火曜のみ 〜略〜
  
 文字列で指定する場合:
  週末の文字列値は 7 文字で、文字列内の各文字は月曜日から始まる各曜日を表ます。
  1 は非稼働日を表し、0 は稼働日を表します。
  たとえば、0000011 と指定すると土曜日日曜日が週末になります

休日:休日のリスト範囲を指定(本例では名前範囲"祝日表"を使用)

方法C:「指定日数後の営業日を返す関数」を利用

開始日から起算して、指定された営業(稼動)日数だけ前または後の日付に対応する日付を返す関数
WORKDAY.INTL を利用します。
=IF(WORKDAY.INTL(B49-1,1,"0000011",祝日表)=B49,"○","")
当日の一日前(B49-1)から1営業日後の日付が、当日と等しければ、当日は営業(稼働)日となります。
A,B,Cの中で一番簡素で短く、旧バージョンのエクセルでも使用できるので「推奨」解です。
週内固定休が土日でない場合は、方法Bを推奨

WORKDAY.INTL関数の書式

(開始日, 日数, [週末], [休日])

開始日: 必須。 起算日を表す日付を指定。
日数: 必須。 開始日から起算して、週末や祭日を除く週日の日数を指定。
    正負指定可。0は不可
週末: 省略可。 週末にする曜日 (稼働日と見なされない日) を指定。
     "週末" は、週末を示す週末番号または文字列で指定。
    指定方法は、上記の NETWORKDAYS.INTL と同じ
休日: 省略可。 国民の祝日や夏期休暇など、稼働日数の計算から除外する日付のリストを指定

補足

祝日表
指定の休日(創立記念日、県民休日等)がある場合は、"祝日表"に追加しておきます。
2000年〜2069年の祝日表は「祝日一覧表」を参照  
INTL
関数の後に付く INTLInternational の略
一般化して使用できるようにした関数を表しています。
EXCEL2010以降で使用可能

週末は国によって異なります。
日本の場合、カレンダー的には日曜基点で土曜日が週末(気分的/慣習的には日曜が週末)
ヨーロッパは月曜基点で日曜が週末
WORKDAY , NETWORKDAYS
WORKDAY , NETWORKDAYS 関数を使用しても実現可能です。
ただし、週末は「土日」固定となりますので、「月火」が固定休のような場合には不可

営業日を考慮した作業完了日



問題

稼働日(営業日)を考慮して、開始日と所要日数作業から作業完了予定日を求めなさい

稼働日(営業日)は、土日、祝日(右下表)、および指定の休日を除いた日とします。
祝日は右下の「祝日表」を使用。範囲(H8:H29)には"祝日表"の名前を定義済み
開始日を「1日目」とします。

カレンダーは検算に使用

完成例

解答例

=WORKDAY(C38,D38-1,祝日表)
WORKDAY関数 を使用すると、休みを除いた日(土日および表で定める固定休日)を稼働日として計算できます。

−1は、開始日を第一日目とするため。(WORKDAY関数の既定値は翌日が第一日目)



固定休み曜日が土日以外の場合は、WORKDAY.INTL関数を使用します。

営業日と締日、引き落とし日‐翌月末最初の営業日

問題

支払締め日を毎月15日(セルE6)とします。
口座からの引き落とし日は、支払日が15日以前の場合は翌月末16日以降の場合は翌々月末とします。
ただし、月末が営業日(土日祝日を除く)でない場合は、以降の最初の営業日を引き落とし日とします。

祝日は「祝日表」を使用。範囲(I6:I45)には"祝日表"の名前を定義済み

引き落とし予定日を表示してください。


完成例



航空券:15日以前なので翌月(12月)の末
洋服:16日以降なので翌々月(1月)の末
ライコスx10:翌々月(2月)の末は土曜日なので、その次の営業日(=2020/03/2(月))

解答例



=IF(DAY(D47)<=$E$6,WORKDAY(EOMONTH(D47,1)-1,1,祝日表 ),WORKDAY(EOMONTH(D47,2)-1,1,祝日表))

式の意味

支払日の日にち(DAY(D47))を判定

締日以前の場合

翌月末の1日前から次の営業日を求めます。
上記の場合、11月の翌月末は12月31日。その1日前は12月30日
よって、その次の営業日は12月31日(火曜日)となります。

もし、次の日が営業日でない場合(「絵画(東山魁夷)」の例)は、以降の直近の営業日となります。
「絵画(東山魁夷)」の例では、2月31日は土曜、3月1日は日曜なので、次の営業日は3月2日の月曜日となります。

締日より後の場合

翌々月末以降の営業日となります。


曜日別集計


問題

曜日ごとに来場者数を集計して下さい。

完成例

解答例


週ごとの集計


問題

週単位の集計

指定月の週ごとの集計を求める。

   その月の1日目が属する週を第1週とする

解答例





×