Excelで勤務表や営業日カレンダーを作成する際、「土日祝を除いた日付だけ表示したい」というケースは非常に多くあります。
特にWORKDAY関数を使う場合、月初が土日だった時に「1日」が表示されてしまう問題に悩む人も少なくありません。
この記事では、WORKDAY関数を使った土日祝除外カレンダーの仕組みと、月初が土日でも正しく営業日のみ表示する方法を詳しく解説します。
今回のExcel構成について
質問の内容では、以下のような構成になっています。
| セル | 内容 |
|---|---|
| C3 | YYYY/MM/01(月初日) |
| A9:A32 | 営業日一覧表示 |
| 祝日シート | 祝日一覧 |
そして目的は、「土日祝を除いた日付のみをA列へ順番表示する」というものです。
WORKDAY関数とは?
WORKDAY関数は、「指定日から○営業日後」を返す関数です。
土日を自動除外し、さらに祝日リストも指定できます。
基本形は以下です。
=WORKDAY(開始日,営業日数,祝日範囲)
例えば以下なら、1営業日後の日付を返します。
=WORKDAY("2025/08/01",1,祝日!A:A)
質問の関数式は正しい?
質問で提示されている式はこちらです。
=IF(MONTH(WORKDAY($C$3-1,ROW()-ROW($A$9)+1,祝日!$A:$A))<>MONTH($C$3),"",WORKDAY($C$3-1,ROW()-ROW($A$9)+1,祝日!$A:$A))
結論から言うと、この式で「土日祝を除いた営業日一覧」は基本的に正常動作します。
特に『月をまたいだ場合は空白にする』処理まで入っているため、かなり実用的な式です。
なぜ「C3-1」なのか
ここが重要ポイントです。
WORKDAY関数は「開始日を含めない」仕様です。
つまり、8月1日から1営業日後を求めると、8月4日(月)になるケースがあります。
そのため、開始日を1日前にして調整しています。
例えば2025年8月は1日が金曜日ですが、2026年8月は1日が土曜日です。
この場合でも、以下のようになります。
| 営業日数 | 結果 |
|---|---|
| 1 | 2026/08/03(月) |
| 2 | 2026/08/04(火) |
つまり、土日を自動スキップできます。
なぜ以前の式では土曜日が表示されたのか
以前AIが生成した式では、おそらく以下のどちらかが原因です。
- WORKDAYではなくDATE+ROWを使っていた
- 開始日の扱いが誤っていた
例えば単純に以下のような式だと、土日もそのまま表示されます。
=C3+ROW(A1)-1
これでは営業日判定が入っていません。
より分かりやすく整理した式
現在の式でも問題ありませんが、可読性を上げるなら以下のように整理できます。
=LET(d,WORKDAY($C$3-1,ROW(A1),祝日!$A:$A),IF(MONTH(d)=MONTH($C$3),d,""))
LET関数を使うことで、同じWORKDAY計算を2回書かずに済みます。
ただし、LET関数は古いExcelでは使用できません。
祝日シートの注意点
祝日シートは、日付形式で入力されている必要があります。
文字列になっていると、WORKDAYが正しく判定できません。
例えば以下はOKです。
- 2025/01/01
- 2025/02/11
- 2025/08/11
逆に「’2025/01/01」のような文字列扱いは注意が必要です。
営業日一覧を作る時によくあるミス
営業日カレンダー作成では、以下ミスが非常に多いです。
- 開始日を含めてしまう
- 祝日範囲が固定されていない
- 月またぎ処理がない
- 表示形式だけ日付になっている
特に「月末を超えて次月の日付が出続ける」問題はよく発生します。
今回の式ではMONTH比較を入れているため、その対策もできています。
WORKDAY.INTLとの違い
もし土日以外を休日にしたい場合は、WORKDAY.INTL関数も便利です。
例えば以下なら日曜だけ休みにできます。
=WORKDAY.INTL(開始日,日数,"0000011",祝日範囲)
業種によって休日設定が異なる場合はこちらが便利です。
まとめ
質問の関数式は、土日祝を除外した営業日一覧を作る方法として基本的に正しく動作します。
特に「C3-1」で開始日を調整し、さらにMONTH関数で月またぎを防止している点が重要です。
そのため、月初が土曜日や日曜日のケースでも、営業日のみを正常表示できる可能性が高いです。営業日カレンダー作成では、開始日処理と祝日設定が特に重要なので、祝日シートの日付形式もあわせて確認しておくと安心です。

コメント