Chiquilin Site■07.08.07_Excel:第n指定曜日を求める

その1:前月末日を基準にする
その2:「第〇指定曜日」を求める
その3:番号と曜日を選択式にする
ChiquilinSite

その1:前月末日を基準にする

基準をどこにするかがポイント!
「今月の第2火曜日を計算で求めたい」といきなり云われると どきっとする人も多いかもしれませんが これらの計算はパターンを覚えてしまえば別段難しくはありません。ポイントとなるのは「基準となる日」をどこにおくのかです。当月の1日を基準にしたくなるかもしれませんが 1日が指定曜日の可能性もあります。どの指定日にも対応させようとするなら「前月末日」を基準にすると考え易いです。「前月末日」は比較的簡単に求まります。
前月末日:=TODAY()-DAY(TODAY()) 
もちろん1日がどこかに表示されているなら「−1」するだけでいいですね。
ページの一番上へ

その2:「第〇指定曜日」を求める

例えば「第三土曜日」と求める場合です。第三土曜日を考える時「×3」で求まれば分かりやすいと思いませんか? 曜日ですから「+7×3」です。つまり「21日足したら第三土曜日になる」というのが他に応用しやすい方法と云えるでしょう。それは逆に云えば第三土曜日の21日前が分かればいいということになります。つまり「第〇土曜日」を求めればいいのです。
前月末日が何曜日かによって第〇土曜日は変わります。
前月末日が月曜日の場合 → 2日前が第〇土曜日
前月末日が火曜日の場合 → 3日前が第〇土曜日
前月末日が水曜日の場合 → 4日前が第〇土曜日
前月末日が木曜日の場合 → 5日前が第〇土曜日
前月末日が金曜日の場合 → 6日前が第〇土曜日
前月末日が土曜日の場合 → 0日前が第〇土曜日
前月末日が日曜日の場合 → 1日前が第〇土曜日
つまり第〇土曜日というのは前月の末日から「0〜6」を引いた日になります。お気付きの方もいらっしゃるでしょうが Excelには曜日によって「0〜6」の数字が出る 打って付けの関数があります。WEEKDAY関数です。WEEKDAY関数は第二引数を「3」にすることで 曜日に対応する数値が「月曜:0〜日曜:6」で返ります。ただし月曜日始点になりますので 何曜日を指定するかによって調整値が必要になります。
前月末日から引く数は
 第〇月曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-0,3)
 第〇火曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-1,3)
 第〇水曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-2,3)
 第〇木曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-3,3)
 第〇金曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-4,3)
 第〇土曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-5,3)
 第〇日曜日の場合:=WEEKDAY(TODAY()-DAY(TODAY())-6,3)
以上です。冗長な式になってますが 今回は分かり易さを優先します。公式的に覚えるよりも仕組みを考えながら覚えた方が 別の応用に使えると思います。
第三土曜日を求める
■C2セル:本日
 =TODAY()
■C3セル:第三土曜日
 =C2-DAY(C2)-WEEKDAY(C2-DAY(C2)-5,3)+7*3
 
「年」「月」が別々のセルに入力されている場合は 上の式の方が短くていいかと思うのですが 月初日が分かっているなら下の方が短くまとまりますね。(2016.01.20追加)
 =月初日-WEEKDAY(月初日-7)+7*3
 
Excel2010以降なら WEEKDAY.INTL関数を使って
 =WORKDAY.INTL(前月末日,1,"0111111")
これで第一月曜日になります。
ページの一番上へ

その3:番号と曜日を選択式にする 

せっかくですからどの曜日にも対応できるようにしたいものです。上の式ができているので後は応用するだけです。
番号を選択式にする
A3セルを選択して [データ]→[入力規則]
[入力の種類]を[リスト]にして元の値に「1,2,3,4,5」と入力
→[OK]
A3セルのセルの書式設定で[表示形式]を[ユーザー定義]で「[DBNum3]"第"0」
と入力→[OK]
次に曜日も同じように設定します。
曜日を選択式にする
B3セルを選択して [データ]→[入力規則]→[入力の種類]を[リスト]に
元の値に「月曜日,火曜日,水曜日,木曜日,金曜日,土曜日,日曜日」と入力
→[OK]
後は数式を以下のように変更します。
■C3セル
=C2-DAY(C2)-WEEKDAY(C2-DAY(C2)-FIND(LEFT(B3),"火水木金土日月"),3)
+A3*7
 
Excel2010以降なら
=WORKDAY.INTL(C2-DAY(C2)-7,1,REPLACE(REPT(1,7),FIND(LEFT(B3),"月火水木金土日"),1,0))+A3*7
でも。
→参考ファイル(034.xls)
ページの一番上へ
ChiquilinSite トップページへ Copyright(C) Chiquilin_site. All Rights Reserved.
inserted by FC2 system