Excel 【関数】土日祝を考慮した「月末最終営業日」を自動取得し業務を効率化
この記事では、土日祝日を考慮した月末最終営業日を自動で取得する具体的な方法を解説します。
なぜ月末最終営業日の取得が難しいのか
経理処理や月次報告など、ビジネスにおいて月末の締め日は重要な基準日となります。
しかし、月末日が土日や祝日に該当する場合、実際の締め日は直前の平日に調整する必要があります。
この日付調整を手作業で行うと、カレンダーの確認や祝日の把握に時間がかかり、ミスも発生しやすくなります。
Excel関数を活用することで、こうした煩雑な処理を自動化し、業務効率を改善できます。
概要解説動画
準備:祝日リストを作成する
Excelが営業日を正しく判断するためには、祝日データが必要です。
以下の手順で準備を進めてください。
手順1:祝日シートの作成
新しいシートを追加し、シート名を「祝日リスト」に設定します。
※シート名は任意ですが、数式は「祝日リスト」で進めます。
手順2:祝日の入力
作成したシートのA列に、計算対象期間の祝日を日付形式で入力します。
複数年にわたる場合は、該当する全ての祝日を漏れなく入力してください。
注意点として、項目行(ヘッダー)を設けると数式がエラーになる場合があります。
項目行が必要な場合は、後述する数式内で列全体ではなく具体的な行範囲を指定してください。


月末最終営業日を取得する数式
数式の構成と設定例
WORKDAY関数とEOMONTH関数を組み合わせることで、月末最終営業日を算出できます。
数式
=WORKDAY(EOMONTH(B3,0)+1,-1,祝日リスト!A:A)
各引数の解説
- B3:基準となる日付が入力されているセル(この例では2023年4月1日など、算出したい月の任意の日付)
- EOMONTH(B3,0)+1:B3セルの日付が含まれる月の翌月1日を算出する部分
- -1:翌月1日から1営業日前に戻ることを指定
- 祝日リスト!A:A:祝日リストシートのA列全体を参照


列全体を指定する際は、ヘッダー行(日付以外のデータ)があるとエラーの原因となります。
項目行を設ける場合は「祝日リスト!A2:A100」のように行範囲を明示してください。
数式のロジック解説:なぜ翌月1日から戻るのか
この数式は「翌月1日」を起点として「-1営業日」戻る処理を行っています。
月末日が土日や祝日の場合、WORKDAY関数が自動的に直前の営業日まで日付を調整します。
この方法により、月末日のパターン(平日・土日・祝日)を問わず、常に正確な最終営業日を取得できます。
具体例として、2024年11月の場合を考えます。
11月30日は土曜日のため、WORKDAY関数は自動的に11月29日(金曜日)を返します。
このように、カレンダー上の判断を関数に委ねることで、確実性の高い日付管理が実現します。
月末から N 営業日前を算出する方法
月末 N 営業日前のニーズと数式
実務では「月末3営業日前までに経費精算を提出」といった締め日設定も一般的です。このような場合、基本の数式を応用することで対応できます。
月末3営業日前を求める数式
=WORKDAY(EOMONTH(B3,0)+1,-3,祝日リスト!A:A)
引数の「-1」を「-3」に変更するだけで、月末から3営業日前の日付を取得できます。この数値を調整することで、任意の営業日数に対応可能です。


ユースケースの提示
月末N営業日前の算出は、以下のような業務シーンで活用されています。
- 経費精算や請求書の提出期限設定
- 月次レポートの作成・提出スケジュール管理
- 在庫棚卸や月次決算の準備作業の基準日設定
- 給与計算の締め日管理
これらの業務では、月末の営業日を基準とした逆算スケジュールが必要となるため、この数式が効果的に機能します。
より高度な自動化を目指す方へ(VBAとRPA)
VBA(Visual Basic for Applications)による自動化
Excel関数では対応が困難な複雑な条件分岐や、他の処理との連携が必要な場合は、VBAによる自動化が有効です。
コード例
VBAではWorksheetFunctionを使用してExcel関数と同等のロジックを実装します。
Sub GetLastWorkDay()
Dim targetSheetName As String
Dim holidaysSheetName As String
Dim targetDayRange As String
Dim outputRange As String
Dim holidayRange As String
Dim daysBack As Long
' --- 設定値 ---
targetSheetName = "日付" ' 更新対象シート
targetDayRange = "B3" ' 基準日の日付セル
outputRange = "C3" ' 計算結果の出力セル
holidaysSheetName = "祝日リスト" ' 祝日シート
holidayRange = "A:A" ' 祝日日付の列
' --------------------------------------------
' 最終営業日を求める場合は 1 を設定
' 3営業日前を求める場合は 3 を設定
' --------------------------------------------
daysBack = 1
' --- 変数宣言 ---
Dim targetDate As Date
Dim lastDayOfMonth As Date
Dim holidays As Range
' 祝日リストの範囲を設定
Set holidays = Worksheets(holidaysSheetName).Range(holidayRange)
' 基準日を取得
targetDate = Worksheets(targetSheetName).Range(targetDayRange).Value
' 翌月1日を計算
lastDayOfMonth = WorksheetFunction.EoMonth(targetDate, 0) + 1
' 最終営業日を計算
Worksheets(targetSheetName).Range(outputRange).Value = _
WorksheetFunction.WorkDay_Intl(lastDayOfMonth, -daysBack, 1, holidays)
End Sub
このコードでは、設定値を変更するだけで複数のシートや異なる条件に対応できます。
Power Automate Desktop (RPA) による業務全体の自動化
算出した最終営業日を起点として、メール送信やファイル処理など業務フロー全体を自動化する場合は、RPAツールの活用が有効です。
Power Automate Desktopでの具体的な実装手順については、以下の記事で解説しています。
まとめ
WORKDAY関数とEOMONTH関数の組み合わせにより、土日祝を考慮した正確な月末営業日の算出が可能です。
この手法を業務に取り入れることで、締め日確認の手間を削減し、日付管理の精度向上と業務効率化を実現できます。
月次処理や定期的な業務スケジュール管理において、実用的なテクニックとして活用してください。
関連記事
Excel 日付の計算方法まとめ
Excel完全マスター: 関数・テクニック・新機能を網羅した決定版ガイド


本書は、Excelの基礎から応用まで、包括的に学べるガイドブックです。当サイトの豊富な情報を、電子書籍向けに最適化し、読みやすく再構成しました。
【本書の特徴】
- 情報量:Word-A4サイズ換算で1,400ページ相当
- 基本操作から高度なテクニックまで、段階的に学習可能
- 140種類の関数を詳細に解説
- 109種類の実用的なテクニックと具体例を紹介
- 最新機能(XLOOKUP関数、LET関数、シートビュー、LAMBDA関数、スピル等)を徹底解説
【対象読者】
- Excel初心者からプロフェッショナルまで
- 体系的にExcelスキルを向上させたい方
- 業務効率化を目指すビジネスパーソン
- データ分析や可視化のスキルを磨きたい方
【本書の強み】
- 実務に即した例題と解説
- 視覚的な図表やスクリーンショットで理解を促進
- 最新のExcelバージョンに対応した内容
- 著者の長年の経験に基づく、実践的なTipsを多数収録
【更新とサポート】
- 常に最新の情報を反映するため、定期的に内容を更新
- 最新版の入手方法:Amazonカスタマーサポートへお問い合わせください
【入手方法】
- 買い切り:950円
- Kindle Unlimited:読み放題プランで利用可能
Excelマスターを目指す方、業務効率を劇的に向上させたい方に、自信を持っておすすめできる一冊です。この1冊で、Excelの可能性を最大限に引き出す力が身につきます。