「えーっと、納期は3営業日後だから……木、金……あ、月曜日は祝日か!じゃあ火曜日だよね。よし、カレンダーを見て、と……」
こんな風に、指折り数えて納期を計算していませんか?
現場ではお馴染みの光景ですが、実はこうした手作業による計算には、思わぬリスクが潜んでいます。
そんな「人間ならではのミス」を根絶し、一瞬で正確な日付を導き出してくれるのが、ExcelのWORKDAY(ワークデイ)関数になります。
今回は、この便利な関数をVBA(マクロ)から呼び出し、業務効率を劇的に向上させる方法を詳しく解説します。
WORKDAY関数とは?
土日や祝日を自動的に考慮して計算してくれる便利なカレンダーのような機能になります。
単純な日付の加算では「金曜日 + 3日 = 月曜日」となりますが、WORKDAY関数を活用すれば、土日を除いた「金曜日 + 3営業日 = 水曜日」として正確に計算できます。
なぜVBAで活用するのか?
「セルに直接関数を書けばいいじゃん」と思うかもしれません。
しかし、数百名規模のスケジュール管理や、複雑な仕様を含む見積書の自動作成などを行う場合、VBAの内部で計算処理を完結させたほうが、全体の処理効率は圧倒的に高まります。
ファイル容量も軽く済ませることができます。
コピペでOK!基本のコード
VBAからExcel固有の関数を呼び出す際には、WorksheetFunction(ワークシート・ファンクション)オブジェクトを利用します。
Sub CalculateDeadline()
' --- 変数の準備 ---
Dim startDate As Date ' 開始日
Dim daysCount As Integer ' 何営業日後か
Dim deadline As Date ' 計算結果を入れる
' --- データのセット ---
startDate = Date ' 今日の日付を取得
daysCount = 5 ' 5営業日後を計算
' --- WORKDAY関数の呼び出し ---
' WorksheetFunction.WorkDay(開始日, 日数, [祝日リスト])
' ここではシンプルに土日だけを除外して計算します
deadline = WorksheetFunction.WorkDay(startDate, daysCount)
' --- 結果を表示 ---
MsgBox "5営業日後の納期は " & deadline & " です!"
End Sub
【実践】祝日も考慮した計算コード
土日だけじゃなく、祝日や会社の特別休暇などもスキップしたいですよね。
その場合は、Excelのシートに「祝日リスト」を作っておき、それをコードで指定します。
Sub Workday()
Dim holidayRange As Range
Dim resultDate As Date
' 1. 「祝日」という名前のシートのA列に祝日が入力されているとします
Set holidayRange = Sheets("祝日").Range("A1:A20")
' 2. WORKDAY関数を実行(第3引数に祝日リストを渡します)
' 祝日を考慮して本日から3営業日後を計算
On Error Resume Next ' エラー対策
resultDate = WorksheetFunction.WorkDay(Date, 3, holidayRange)
On Error GoTo 0
' 3. 結果をB2セルに書き込む
Range("B2").Value = resultDate
MsgBox "計算完了!"
End Sub
運用で欠かせないポイント:エラー対策
VBAでExcel関数を使うとき、関数の引数や戻り値が期待通りでないと、 たまに「型が合いません」というエラーが発生することがあります。
これは主に関数が正しい結果を返せなかった場合に引き起こされる現象になります。
プログラムの冒頭にOn Error Resume Nextを記述しておくことで、予期せぬ中断を防ぐことができます。
まずは動くものを作りたい初心者の方にも非常に有効な手法になりますので、ぜひ試してみてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント