まりふのひと

Excel/第1月曜日の日付の求める数式をグーグル先生に教わった

 21日金曜日の「世界一やさしいExcel2016 in 田布施町高齢者いきいき館」の時間に、内職して「第1月曜日を求める数式」を探した‥‥ が、数式を理解できなかった...

  • 第一月曜の日付をもとめるには(引用:エクセル関数リファレンス)
     第一月曜日の日付を求めるには、まず、DATE関数を使用して、その月の1日に1週間(7日)を足した日を求めます。次に、WEEKDAY関数を使用して、その月の1日の前日、つまり前月の末日の曜日に対応する数値を求め、先ほど求めた日から引くことで第一月曜日の日付を求めることができます。
    =DATE(B1,B2,"1")+7-WEEKDAY(DATE(B1,B2,"1")-1,2)

帰宅後、改めてサンプルを作りながら試したら確かにできた。が、相変わらず 😵 の状態...


1.数式を日本語で書いてみる
  • 8日の日付(DATE(B1,B2,"1")+7)から、1日の前日(=前月の末日:DATE(B1,B2,"1")-1)の戻り値(曜日コード)を引く

 これまで、Weekday関数の第2引数(種類)は殆ど省略していたが、今回は「2」となっている。
改めてググる‥‥

  • Weekday関数の種類
    • 上記のWeekday関数では「2」を使っているが、Excel2010以降では 11 も使える。

≪考察≫

  1. 引数2(種類)を「2」にしているのは、月曜日の戻り値を「1」にしたいため...
  2. 8日の日付を作っているのは、上記の戻り値の最低値が「1」であるため...

 改めて実例で検証した。

  • Weekday関数の種類別戻り値(抜粋)
種類 日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
1または省略 1 2 3 4 5 6 7
2または11 7 1 2 3 4 5 6
3 6 0 1 2 3 4 5
  • 試してガッテン
基準日 基準日+7
B
基準日前日の曜日 Weekdayの戻り値
D
結果
B - D
2019/4/1 2019/4/8 日曜日 7 2019/4/1
2019/5/1 2019/5/8 火曜日 2 2019/5/6
2019/6/1 2019/6/8 金曜日 5 2019/6/3
2019/8/1 2019/8/8 水曜日 3 2019/8/5

 だれがこんな法則? を見つけたのだろうか。自分なら、即、VBAで作るところだが...


第1月曜日以外の曜日もできるはずなので...

「はず」を Excel2010 で検証した。

  • 1行目にWeekday関数の第2引数(種類)を横に入力
  • セルA4以下にWeekday関数の第1引数(シリアル値=日付)を入力
    • 必ず1日付けとする。
  • セルB4に数式:=(A4+7)-WEEKDAY(A4-1,B$1) を入力
  • 他のセルはセルB4の数式をフィルハンドルでコピー

≪結果≫
 第1火曜日~第1日曜日ともWeekday関数の第2引数(種類)を変えるだけで出来た。