Excelで指定月の第4水曜日を自動計算する方法|WORKDAY.INTLで第N曜日を日付で求める

「毎月の第4水曜日」など、決まった“第◯曜日”をExcelで自動的に日付として出したい場面は意外と多いものです。この記事では、WORKDAY.INTLで“目的の曜日だけを稼働日として数える”テクニックを使い、指定月の第4水曜日をスパッと求める方法を、実務での使い方や落とし穴まで含めて解説します。

目次

結論:WORKDAY.INTLで「目的の曜日だけを稼働日」にすると一発で求まる

Excelで「指定月の第4水曜日」を求めるとき、カギになる考え方はとてもシンプルです。

  • WORKDAY.INTLは「稼働日だけを数えて、指定日数ぶん進めた日付」を返せる
  • その「稼働日」を、水曜日だけになるように設定する
  • あとは「第4」なら4回目を数えればよい

つまり、通常は「平日=稼働日、土日=非稼働日」という前提の関数を、逆転の発想で“水曜だけ稼働日”に改造して使います。

例:2025年8月の第4水曜日を求める数式

質問の例(2025年8月の第4水曜日 = 2025/8/27)は、次の数式で求められます。

=WORKDAY.INTL(DATE(2025,8,0),4,"1101111")

この式が返す値は2025/8/27です。ポイントは以下の3つです。

ポイント1:DATE(2025,8,0) は「前月末日」を返す

DATE(2025,8,0)は、日付の“0日”という指定により、2025年8月の前日(= 2025/7/31)を返します。対象月のカウントを始める起点として、前月末日が非常に便利です。

ポイント2:4 は「4回目(第4)」を意味する

WORKDAY.INTLの第2引数は「稼働日を何日進めるか」です。稼働日を“水曜だけ”にしているので、4稼働日進める = 水曜日を4回数えるのと同じになります。

ポイント3:”1101111″ は「水曜だけ稼働日」の設定

WORKDAY.INTLのweekend引数に、7文字の文字列を渡す方法があります(曜日ごとに稼働日/非稼働日を指定)。

この7文字は月〜日の順です。

  • 0:稼働日
  • 1:非稼働日

つまり、"1101111"は次の意味になります。

曜日指定扱い
月1非稼働日
火1非稼働日
水0稼働日
木1非稼働日
金1非稼働日
土1非稼働日
日1非稼働日

結果として、前月末日(7/31)から見て、次の水曜日を稼働日として数えます。

  • 8/6(第1水曜)
  • 8/13(第2水曜)
  • 8/20(第3水曜)
  • 8/27(第4水曜)

WORKDAY.INTLを“日付の自動計算エンジン”として使うための基礎知識

WORKDAY.INTLは、ふだん「営業日計算」に使われますが、今回のように発想を変えると「指定曜日の抽出」にも強力です。ここでは引数の意味を、実務で困らない粒度で整理します。

引数役割今回の使い方よくあるミス
start_date起点となる日付前月末日(DATE(年,月,0))月初(DATE(年,月,1))を起点にして、意図せず月内判定がややこしくなる
days稼働日で何日進めるか第N曜日の「N」「第4だから+21日」など固定計算と混同する
weekend非稼働日の定義水曜だけ0、それ以外1の7文字曜日順(月〜日)を取り違える/0と1を逆に覚える
holidays(任意)祝日/休業日を追加で除外水曜が祝日なら次の水曜へ…など範囲指定が文字列になっている/日付がテキスト扱いで除外されない

DATE(年,月,0) が前月末日になる理由(知らないと不安になる部分)

「0日って何?」と感じる方も多いので、ここは一度だけ押さえておくと安心です。

Excelの日付は内部的に「連続した数値(シリアル値)」で管理されています。DATE(2025,8,1)が8月1日を表すなら、そこから1日戻ったDATE(2025,8,0)は7月31日になります。Excelはこの“ズレ”を自然に吸収してくれるため、前月末日を簡潔に作れます。

より“意図が読みやすい”書き方にしたい場合は、EOMONTHを使う選択肢もあります。

=EOMONTH(DATE(2025,8,1),-1)

どちらでも結果は前月末日になります。チームで運用するシートなら、読みやすさ重視でEOMONTH、短さ重視でDATE(年,月,0)、という使い分けが現実的です。

年・月をセル参照にして「指定月の第4水曜日」を自動化する

実運用では、年・月を毎回数式に直書きするより、セル参照にしておく方が圧倒的に管理しやすいです。例えば、次のように入力欄を作ります。

セル内容例
A1年2025
B1月8
C1第N(何回目か)4

このとき、2025年8月の第4水曜日を求める式はこうなります。

=WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111")

「第4」を別セルにしておけば、第1〜第5もC1を変えるだけで同じ仕組みで流用できます。

第1〜第5までどうなる?(“月をまたぐ”挙動を理解しておく)

この方法の強いところは「第N曜日」のNを変えるだけで同じ構造が使える点ですが、一方で気をつけたい点もあります。それは、第5が存在しない月でも、式自体は次の月に進んで答えを返すという挙動です。

例えば「2025年8月の第5水曜日」を同じ考え方で求めると、8月には水曜日が4回しかないため、結果は翌月の水曜日(2025/9/3)になります。

=WORKDAY.INTL(DATE(2025,8,0),5,"1101111")

これは関数としては正しい動きですが、「“その月の中”の第5がなければ空欄にしたい」という要件もよくあります。そんなときは、戻ってきた日付が指定月かどうかをチェックします。

=IF(MONTH(WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111"))=B1,
  WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111"),
  ""
)

同じ計算を2回書くのが気になる場合、Microsoft 365(LETが使える環境)なら読みやすくできます。

=LET(
  d, WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111"),
  IF(MONTH(d)=B1, d, "")
)

“第5がない月”に対する仕様は、会議日・締め日・支払日などでよく揉める部分なので、最初にルールを決めて式に反映しておくと、後でトラブルになりにくいです。

水曜日以外にも対応したい:曜日ごとのweekend文字列一覧

今回の例では水曜日だけを稼働日にしましたが、同じ発想で「第2火曜日」「第3金曜日」などにも応用できます。まずは曜日ごとのパターンを一覧で持っておくと便利です(月〜日の順で、対象曜日だけ0)。

求めたい曜日weekend文字列意味(0=稼働日)
月曜日"0111111"月だけ稼働日
火曜日"1011111"火だけ稼働日
水曜日"1101111"水だけ稼働日
木曜日"1110111"木だけ稼働日
金曜日"1111011"金だけ稼働日
土曜日"1111101"土だけ稼働日
日曜日"1111110"日だけ稼働日

この表をどこかに置いておけば、曜日を変えるだけで再利用できます。ただ、運用が長くなると「文字列を手で差し替えるのが怖い」という状態になりがちです。次の章のように、曜日からweekend文字列を自動生成すると、人的ミスが激減します。

weekend文字列を自動生成して、曜日もセルで指定できるようにする

「水曜固定」ではなく、「セルで曜日を選んで第N曜日を返したい」場合は、weekend文字列を組み立てるのが現実解です。おすすめは、バージョン差の影響を受けにくい次の作り方です。

前提として、D1に曜日番号(1=月、2=火、…7=日)を入れるとします。水曜日ならD1は3です。

汎用パターン(多くの環境で動きやすい)

=REPT("1",D1-1)&"0"&REPT("1",7-D1)

これで、D1=3なら"1101111"が作れます。あとはそれをWORKDAY.INTLのweekendに渡します。

=WORKDAY.INTL(DATE(A1,B1,0),C1, REPT("1",D1-1)&"0"&REPT("1",7-D1))

これで「年(A1)・月(B1)・第N(C1)・曜日(D1)」を入力するだけで、任意の月の第N曜日が出せます。

曜日を“文字”で選びたい場合の設計(運用で強い)

現場では曜日番号より、「月」「火」「水」…の方が入力ミスが起きにくいです。例えば、D1に「水」と入れる運用にするなら、別セルで曜日番号に変換してから使うのが安全です。

入力(例)変換式の考え方結果(曜日番号)
月対応表で変換1
火対応表で変換2
水対応表で変換3
木対応表で変換4
金対応表で変換5
土対応表で変換6
日対応表で変換7

対応表は、同じシート内の小さな表でも、別シートのマスタでも構いません。VLOOKUP/XLOOKUPで番号に変換し、その番号を先ほどのREPT式に渡すのが堅い運用です。

祝日や社休日を避けたい場合:holidays引数で「水曜が休みなら次の水曜」も可能

WORKDAY.INTLには、任意でholidays(祝日/休業日)を渡せます。今回の使い方だと「稼働日=水曜」なので、holidaysが効くのは水曜日が休みの日だけです。

例えば、社内カレンダーで「特定の水曜は全社休業」などがある場合、休日リスト(例:F2:F50)を用意して次のように書けます。

=WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111",F2:F50)

これにより、該当水曜日が休日リストに含まれていればスキップし、次の水曜日に進みます。会議日程や締め日の自動算出で、意外と効いてくるポイントです。

なお、holidays範囲は“日付として認識されていること”が重要です。見た目が日付でも、データが文字列だと除外が効きません。違和感があるときは、セルの表示形式ではなく値として日付になっているかを確認してください。

よくあるつまずき:動かない・ズレるときのチェックリスト

WORKDAY.INTLは便利ですが、設定が1文字でもズレると結果が変わるため、確認観点を持っておくと安心です。

  • weekend文字列は月〜日の順になっているか(曜日の並びを誤解しやすい)
  • 0=稼働日、1=非稼働日で作っているか(0/1を逆にするミスが多い)
  • weekend文字列を渡すとき、ダブルクォートで囲んだ文字列になっているか
  • 起点日がDATE(年,月,0)になっているか(DATE(年,月,1)起点だと検証がややこしくなる)
  • 第5などで月をまたぐ可能性がある場合、MONTHで指定月か判定しているか
  • 休日リストを使うなら、休日が日付(数値)として入力されているか

特に「曜日の並び」と「0/1の意味」は、初見での取り違えが多い部分です。シートを引き継ぐ可能性があるなら、weekend文字列のセルにコメントを残す、あるいは表(一覧)を置いておくと保守性が上がります。

別解:WEEKDAYで「第N曜日」を求める方法(WORKDAY.INTLが使いにくい場合の保険)

環境によってはWORKDAY.INTLを多用したくないケースもあります(関数の意図が伝わりにくい、休日計算と混ざって混乱しやすい等)。その場合は、WEEKDAYを使って“第N曜日”を組み立てる方法もあります。

考え方は次の通りです。

  • まず対象月の1日(例:2025/8/1)を作る
  • その月の「最初の水曜日」を求める
  • あとは7日×(N-1)を足す

水曜日を例にすると、次のように書けます(WEEKDAYの戻り値を月=1…日=7に揃えるため、返り値の種類に2を使います)。

=DATE(A1,B1,1) + MOD(3 - WEEKDAY(DATE(A1,B1,1),2),7) + 7*(C1-1)

ここでの「3」は、月=1、火=2、水=3…の並びでの“水曜日”です。曜日を変える場合はこの数字を変えます。

WORKDAY.INTL方式とWEEKDAY方式は、どちらが優れているというより「運用のクセ」によって向き不向きがあります。違いを整理すると次の通りです。

観点WORKDAY.INTL方式WEEKDAY方式
式の短さ短く書きやすい(特に固定曜日)やや長くなりがち
発想の分かりやすさ“水曜だけ稼働日”という発想に慣れが必要「最初の水曜+7日×(N-1)」で直感的
休日対応holidaysで自然に回避できる(該当曜日が休日なら次へ)休日回避は別ロジックが必要(次の曜日へ繰り延べ等)
拡張性曜日だけでなく“特定パターンの稼働日”にも応用しやすい曜日計算に特化(ロジックは明快)

「第4水曜の会議日を出す」だけならWORKDAY.INTLが軽快です。一方で、シート利用者が多い場合や引き継ぎが多い場合は、WEEKDAY方式の方が理解されやすいこともあります。目的と運用体制に合わせて選ぶのが最適です。

実務で刺さる使い方:年間の第4水曜日を一括で一覧化する

毎月の会議日、締め日、配信日などは「一覧化」しておくとミスが減ります。例えば、年を固定して12か月分を出すだけなら、月を並べた列に対して同じ式をコピーするのが簡単です。

例:A列に月(1〜12)、B列に第4水曜日の日付を出す

  • A2に1、A3に2…A13に12
  • B2に次の式を入れて下までコピー
=WORKDAY.INTL(DATE(2025,A2,0),4,"1101111")

「年もセル参照」にしておけば、翌年になっても年だけ差し替えれば済みます。こうした“使い回し”を前提にした設計は、Excelの運用コストを確実に下げます。

仕上げのコツ:シートを壊れにくくする設計(オリジナルの実務ポイント)

関数が動くことと、シートが運用で壊れないことは別問題です。第N曜日の算出は、実際には次のような運用課題とセットで起きがちです。

  • 入力者が年・月を全角で入れる、文字列として入れる
  • 第Nのセルに空白や0が入ってしまう
  • 第5が存在しない月の扱いが決まっていない
  • 祝日回避を入れる/入れないが年度で変わる

このあたりに対して、あらかじめ“壊れにくい型”を作っておくと、現場では強いです。

入力チェックを先に入れる(空欄・0・負数対策)

第N(C1)が空や0のときは空欄にする、といったガードを入れておくだけで、余計なエラーが激減します。

=IF(OR(C1="",C1<1),"",WORKDAY.INTL(DATE(A1,B1,0),C1,"1101111"))

“第5がない月は空欄”を標準仕様にする

会議日などは「存在しないなら翌月に繰り越し」より「空欄で気づける」方が安全なことが多いです。先に紹介したMONTH判定は、実務ではかなり効きます。

式の意味を「見える化」する(メンテ性の差が出る)

WORKDAY.INTL方式は、慣れていない人にとっては“なぜこの文字列?”となりやすいです。次のように、近くに説明用のセルや表を置くだけでも、引き継ぎの摩擦が減ります。

  • 「weekend文字列は月〜日」「0=稼働日、1=非稼働日」と明記
  • 曜日別のweekend一覧表をシートの右端に置く
  • 可能ならLETでpatternなど名前を付ける

よくある質問

Q:なぜ前月末日(DATE(年,月,0))を起点にするの?

A:対象月の第1回目の曜日を数えるとき、前月末日を起点にすると「次に来る水曜日」が必ず対象月内になりやすく、ロジックが安定します。月初を起点にすると、月初が対象曜日だった場合のカウント解釈で混乱が起きやすくなります。

Q:第4水曜日が祝日ならどうしたい?

A:要件次第です。「次の水曜にずらす」ならholidays引数が自然です。「前の水曜に前倒し」など別ルールなら、別のロジック(マイナス方向へのWORKDAY.INTLやIF条件)を組み合わせます。まずは組織のルールを決めてから式に落とすのが安全です。

Q:第4水曜日ではなく“第4営業日”などにも応用できる?

A:できます。WORKDAY.INTLは本来が営業日計算なので、通常の「土日休み+祝日」ルールに戻して使えば、第4営業日、第10営業日などを同じ関数で出せます。今回のテクニックは、その“稼働日定義”を曜日に寄せているだけです。

まとめ:WORKDAY.INTLは「第N曜日」を求める近道になる

Excelで「指定月の第4水曜日」を求めるなら、WORKDAY.INTLで“水曜日だけを稼働日”にして数える方法が、短く・速く・実務にも強い解決策になります。

  • 基本形:=WORKDAY.INTL(DATE(年,月,0),第N,"1101111")
  • 年・月・第Nをセル参照にすれば、運用が一気に楽になる
  • 第5がない月や祝日回避など、実務ルールも式に組み込める

「毎月の第4水曜」のような定例スケジュールを、手作業でカレンダーを見て転記する運用は、忙しいほどミスが起きます。関数で自動化しておけば、来年・再来年も同じ仕組みで回り続けるので、ぜひテンプレ化して活用してみてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次