いくつかのパターンに分けて紹介します。
- WORKDAY関数などの関数を使って、月の最後・最初の平日の日付を求めることができます。
最後の平日を求める方法
日付から求める場合
画像ではB列に祝日リストを入力し(これを用意しないと祝日が判定できません)、D3セルには日付を入力しています。
そこでF3セルに式を入力し、その日付が属する月の最後の平日の日付を求めています。2024年3月30,31日は土日なので、金曜日の29日の日付が取得されています。
F3セル
=WORKDAY(EOMONTH(D3,0)+1,-1,B3:B7)
ズバリ平日を求める関数であるWORKDAY関数を使っています。
第1引数(開始日)の「EOMONTH(D3,0)+1」は「D3セルの日付が属する月の月末の翌日」つまり翌月1日を表しています。第2引数の「-1」は、第1引数の日付の1つ前の平日を求めることを表しています。第3引数は祝日リストです。
考え方がややこしい感じですが「月の末日の0日後の平日を求める」というつもりで「=WORKDAY(EOMONTH(D3,0),0,B3:B7)」としてしまうと末日が土日や祝日であってもその日を取得してしまいます(誤り)。これは慣れるしかありません。
なお、セルの表示形式が「標準」の状態でこの式を入力すると「45380」のように数値が表示されます。その場合はセルを右クリック→「セルの書式設定」を選択して表示形式を日付に変更してください。
年,月の値から求める場合
年と月の値が数値で指定されている場合の例です。
G3セル
=WORKDAY(DATE(D3,E3+1,1),-1,B3:B7)
考え方は上の例と同じですが、翌月1日の日付を求める式を「DATE(D3,E3+1,1)」としているのが異なる点です。
このように年,月の数値が与えられるケースではこちらの式の方が簡単です。
今月最後の平日を求める場合
画像は省略しますが、次のような式で「今月の最後の平日」の日付が求められます。
=WORKDAY(EOMONTH(TODAY(),0)+1,-1,B3:B7)
最初の例の「D3」(セル参照)を「TODAY()」に変えただけです。ここは「NOW()」としても同じ結果になります。
もちろん祝日リストの用意と指定(第3引数)は必要ですのでお忘れなく。
最初の平日を求める方法
日付から求める場合
祝日リストと日付が与えられていて、その日が属する月の最初の平日を求めるパターンです。
2024年1月1日は月曜日ですが祝日リストに含まれている日付なので、翌日の2日の日付が取得されているのがわかります。
F3セル
=WORKDAY(EOMONTH(D3,-1),1,B3:B7)
「EOMONTH(D3,-1)」はD3セルの日付の前月末日を表します。第2引数を「1」とすることでその前月末日からみた次の平日を求めています。
年,月の値から求める場合
年と月の値が数値で指定されている場合の例です。
G3セル
=WORKDAY(DATE(D3,E3,0),1,B3:B7)
前月末日の日付を「DATE(D3,E3,0)」で求めています。あとは上の例と同じです。
今月最初の平日を求める場合
画像は省略しますが、次のような式で「今月の最初の平日」の日付が求められます。
=WORKDAY(EOMONTH(TODAY(),-1),1,B3:B7)
繰り返しになりますが祝日リストを作成したうえで第3引数に指定する必要があるので、この式をコピペするだけでは祝日が判定できません。
結果が数値になる場合
上記でも触れていますがWORKDAY関数を使った式を入力した際に結果が数値で表示されることと思います。
その場合はセルを右クリックして「セルの書式設定」を選択し、表示形式を日付形式に変更してください。