皆さん、こんにちは。VBA講師の私が、あえて今回は「関数」の深掘りをお届けします。なぜなら、VBAで複雑なロジックを組む前に、Excel標準関数でスマートに解決できることは、メンテナンス性を考慮して関数に任せるべきだからです。今回は業務効率化の要となる「稼働日計算」について解説します。
なぜNETWORKDAYS関数を使うのか
多くの現場で、納期計算や工数計算に引き算(終了日 – 開始日)を使っているのを見かけます。しかし、これでは土日が無視されてしまい、週明けの納期が狂う原因になります。NETWORKDAYS関数は、指定した期間内の「稼働日(土日を除く日数)」を自動算出する、実務の必須ツールです。
例えば、プロジェクトの進捗管理表で「着手日から完了日まで何営業日かかったか」を算出する場合、単純な差分ではなく、この関数を使うことで「土日を挟んでも正確な実働日数」が弾き出せます。
WORKDAY関数の「先読み」力
一方で、WORKDAY関数は「未来の特定」に真価を発揮します。「着手日から5営業日後の日付はいつか?」といった、納期回答や納品予定日の算出に最適です。
実務で私がよく推奨するのは、これに「祝日リスト」を組み合わせることです。関数の引数に祝日テーブルを指定するだけで、日本の複雑なカレンダーにも完璧に対応できます。
VBAエンジニアが知っておくべき「落とし穴」
VBAで日付処理を組む際、Forループで一日ずつ判定するコードを書く方がいますが、それは避けるべきです。コードが長くなるだけでなく、処理速度も低下します。VBAで記述する場合でも、以下のようにワークシート関数を呼び出すのが最も堅牢です。
Application.WorksheetFunction.NetworkDays(開始日, 終了日, 祝日範囲)
このように、VBAと関数を適材適所で使い分けることこそが、中級者から上級者へのステップアップです。次回は、土日以外に「水曜定休」などの独自ルールがある場合の実践的なテクニックをお伝えします。まずは今の業務で、単純な日付の引き算をNETWORKDAYS関数に置き換えるところから始めてみてください。
