Warning: The magic method InvisibleReCaptcha\MchLib\Plugin\MchBasePublicPlugin::__wakeup() must have public visibility in /home/c3541351/public_html/guakw.info/wp-content/plugins/invisible-recaptcha/includes/plugin/MchBasePublicPlugin.php on line 37
「月曜が祝日だった…」のミスをゼロに。VBA×WORKDAY関数で営業日計算を完全自動化する方法 | ぐー@高配当株ブログ

「月曜が祝日だった…」のミスをゼロに。VBA×WORKDAY関数で営業日計算を完全自動化する方法

【実務で使う】Excel関数
スポンサーリンク

「えーっと、納期は3営業日後だから……木、金……あ、月曜日は祝日か!じゃあ火曜日だよね。よし、カレンダーを見て、と……」

こんな風に、指折り数えて納期を計算していませんか?

現場ではお馴染みの光景ですが、実はこうした手作業による計算には、思わぬリスクが潜んでいます。 

そんな「人間ならではのミス」を根絶し、一瞬で正確な日付を導き出してくれるのが、ExcelのWORKDAY(ワークデイ)関数になります。

今回は、この便利な関数をVBA(マクロ)から呼び出し、業務効率を劇的に向上させる方法を詳しく解説します。

【実務で使う】Excel関数の記事を見る 

【業務効率化】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を記述しておくことで、予期せぬ中断を防ぐことができます。

まずは動くものを作りたい初心者の方にも非常に有効な手法になりますので、ぜひ試してみてください。

【実務で使う】Excel関数の記事を見る

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【実務で使う】Excel関数【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました