問題3】2013年1月8日に請求書を発行します。 支払日は5日後とします。

ただし、支払日が土日や祭日にあたる場合は支払日は翌日とします。支払日を求めなさい。


1/8から5日後は13日ですが、日曜日にあたります。

14日は祭日なので、支払日は 2013/1/15 となります。


 

問題3の解答例

祝日を考慮する場合は、祝日の表を作成します。引数の[祭日]の部分に祝日のセル範囲 E3:E5 を指定します。

C3セルには =WORKDAY(C2+4,1,E3:E5) と入力します。

支払日の前日を C2+4で求めて (ここで C2+5-1 と5日後の前の日を計算しています)、翌日(WORKDAY関数の第2引数を1とします)が土日や祭日を除いた平日を返すように、WORKDAY関数を使って求めます。

次の平日を出す場合 → Workday(開始日-1,1,祭日)

ちなみに、前の平日を求めるとき→ Workday(開始日+1,-1,祭日)

【問題2】2013年1月10日に請求書を発行します。 支払日は請求日から5営業日とします。

ただし、土日と祭日は営業日として数えません。支払日を求めなさい。




問題2の解答例

2013/1/10から土日と祭日を除くと 1/11、1/15、1/16、1/17、1/18 となり、5日後は2013/1/18となります。


祝日を考慮する場合は、祝日の表を作成します。引数の[祭日]の部分に祝日のセル範囲 E3:E5 を指定します。

C3セルには =WORKDAY(C2,5,E3:E5) と入力します。


C3セルにシリアル値が表示されたら、表示形式を「日付」の「2001年3月14日」に変更します。

祭日に祝日一覧の日付のセル範囲 E2:E4 を指定します。

C3セルを選択して、[関数の挿入]ボタンをクリックします。


関数の分類で「すべて表示」を選択し、関数名で WORKDAY を選択します。

[OK]ボタンをクリックします。


WORKDAY関数の引数、開始日に C2 、日数に 5 を入力します。


C3セルに =WORKDAY(C2,5) と数式が入力され、 セルには 2013年1月17日 と表示します。


C3セルにシリアル値が表示されたら、[Ctrl]+[1]でセルの表示形式のダイアログボックスを表示します。

表示形式を「日付」の「2012年3月14日」に変更します。

下図はExcel for Microsoft365です。ロケールは「日本語」、カレンダーの種類は「グレゴリオ暦」とします。


 

【問題1】2013年1月10日に請求書を発行します。 支払日は請求日から5営業日とします。

支払日を求めなさい。ただし祝日は考慮しないものとします。


(参考)2013年1月のカレンダーは下表のようになっています。

1/10から土日を除くと 1/11、1/14、1/15、1/16、1/17 となり、5日後は2013/1/17となります。

この問題では祝日は考慮しないので 1/14 も営業日としてカウントします。


問題1の解答例 WORKDAY関数を使った例です。(祭日は考慮していません)

C3セルに =WORKDAY(C2,5) と入力します。


 

指定された稼動日数だけ前/後の日付を求めます   

 ワークデイ

=WORKDAY(開始日,日数,[祭日])

   指定した稼働日数の前/後の日付に対応する値を返します。稼動日とは、土曜、日曜、および指定された祭日を除く。

 (注) Excel2003以前のバージョンでは、エラー値 #NAME? が返される場合は、分析ツール アドインを組み込む必要があります。

基本的には土日を除いた日数を計算することができますが、指定した日にちを除くこともできます。

構文の引数で「祭日」と書いてある部分に特定の日付を指定すればよいので、会社での土日以外の休日を当てることもできます。

翌営業日など次の平日(土日や祭日を除く)を求めることもできます。

WEEKDAY関数はExcel2007以前でもありましたが、Excel2010では種類に指定できる数が増えています。

=WEEKDAY(日付,[種類]) の種類に従来は1~3が指定可能でしたが、11~17の指定が可能になっています。

なお、3だけが0~6の値が返りますので要注意です。

基準の開始位置を各曜日に指定することができるようになっています。

17は1と同じ、11は2と同じ結果になります。

基準の開始位置が各曜日に指定することができるようになっています。


下図の例ではB4セルに=WEEKDAY($A4,B$2) と入力し、下方向および右方向へオートフィルで数式をコピーしています。

A4:A10は200/10/9/5~11が入力されています。表示形式を yyyy/mm/dd (aaa) としています。


なお、Excel2010では関数を手入力するとポップアップヒントで引数まで教えてくれますので、種類を覚える必要はないかもしれません。

 

マイクロソフト サポート技術情報 - 106339 (リンク先が削除されましたので、リンクを外しました)

[XL2002]WEEKDAY関数で1900年3月1日より前の正しい曜日が返らない

https://support.microsoft.com/ja-jp/help/106339

(確認してみました)

1900/2/27を入力し、下方向へコピー(フィルハンドルをドラッグ)すると、存在しないはずの1900/2/29が出てきます。

これは、Excel2010,2013,2016でも同じです。


=TEXT(日付,"aaa") で曜日を求めても同様に、1900年3月1日よりも前はずれていますので(正しい曜日が返されない)注意してください。

なお、VBAでは異なった処理になっていますのでご注意ください

VBAのDateSerial関数でシリアル値を求めると、下表のようになります。つまり、1900/2/29と1900/3/1は同じ 61 になります。

1900/1/1は 2から始まっています。つまり、1899/12/31 が 1 になっています。



WEEKDAY関数はExcel2007以前でもありましたが、Excel2010では種類に指定できる数が増えています。

=WEEKDAY(日付,[種類]) の種類に従来は1~3が指定可能でしたが、11~17の指定が可能になっています。

なお、3だけが0~6の値が返りますので要注意です。

基準の開始位置を各曜日に指定することができるようになっています。

17は1と同じ、11は2と同じ結果になります。

基準の開始位置が各曜日に指定することができるようになっています。


下図の例ではB4セルに=WEEKDAY($A4,B$2) と入力し、下方向および右方向へオートフィルで数式をコピーしています。

A4:A10は200/10/9/5~11が入力されています。表示形式を yyyy/mm/dd (aaa) としています。


なお、Excel2010では関数を手入力するとポップアップヒントで引数まで教えてくれますので、種類を覚える必要はないかもしれません。



 

=CHOOSE(WEEKDAY(A1),"日","月","火","水","木","金","土")

=MID("日月火水木金土",WEEKDAY(A1),1)

=VLOOKUP(WEEKDAY(A1),{1,"日";2,"月";3,"火";4,"水";5,"木";6,"金";7,"土"},2)

【注意】1900年3月1日より前の日をWEEKDAY関数で処理する場合には注意が必要です。




1900/2/29は存在しません(1900年はうるう年ではありません)が、Excelの日付システムには存在しています。

よって、1900年1月1日~1900年2月28日のWEEKDAY関数で返る値は間違った値になります。

詳しくは↓を参照してください。これは、Excel2003,2007,2010,2013,2016でも同じです。

曜日を表示したいときは、TEXT関数を使うのがスマートだと思います。A1に日付が入力してあるとして、 =TEXT(A1,"aaaa") とします。

"aaa" とすると、 月 と表示されます。

"【Office シリーズ】-2021-6-28  384-12" 

 

曜日の表示形式


日曜日~土曜日


または、表示形式でシリアル値を曜日で表示することもできます。 =A1 として セルの表示形式を「"aaaa"」とします。


【おまけ】どうしてもWEEKDAY関数を使って、曜日を表示したい時は、以下のような関数と組み合わせて使うことも可能です。