Excelで営業日の計算をする:Tech TIPS
カレンダー・ベースではなく、営業日ベースで日数計算を行うにはWORKDAY関数やNETWORKDAYS関数を使用すると便利である。WORKDAY関数を使用すると、日数と営業日カレンダーを元にして、目的の営業日付を算出することができる。NETWORKDAYS関数を使用すると、2つの日付と営業日カレンダーを元にして、日付間の営業日数を算出することができる。
対象ソフトウェア:Excel 2000/Excel 2002/Excel 2003
解説
大小問わず、法人や団体では営業日という考え方があるだろう。そして、業務上の処理において営業日ベースで日数を計算する必要性は少なからず存在するはずである。土日や国の定める祝日に限らず、創立記念日や夏季休日など独自に定められた休業日もあるため、一見営業日ベースでの日付計算は非常に難解に思われるかもしれない。
だがExcelには、WORKDAY関数とNETWORKDAYS関数という非常に便利な関数が用意されている。これらは、週末や休日などを除外して日数(稼働日)を計算するための関数である。これらの関数を使用すると、個々の営業日事情に合わせた日付計算を簡単に行えるようになる。
本稿では、例として見積書テンプレート作成を通じてWORKDAY関数の使用方法を紹介し、そして出荷所要日数を分析する表の作成を通じてNETWORKDAYS関数の使用方法を紹介する。
操作方法
●手順1―Excelのアドインを設定する
本TIPSで紹介するExcelの関数は、「分析ツール」というExcelのアドインを利用している。「分析ツール」アドインはExcelに標準でインストールされているが、利用のためには初期設定が必要になる。初期設定を行わないとExcelが関数を識別できず、「#NAME?」というエラーが返されることになる。
初期設定のためには、[ツール]メニューから[アドイン]を選択し、[アドイン]ダイアログを表示する。[アドイン]ダイアログの[有効なアドイン]欄から[分析ツール]のチェック・ボックスをオンにし、[OK]ボタンをクリックする。
Excelの[アドイン]ダイアログ
分析ツールを有効にするためには、あらかじめExcelの分析ツール・アドインを有効にしておく必要がある。
(1)[分析ツール]のチェック・ボックスをオンにし、[OK]をクリックする。
「アドイン」ダイアログで[OK]ボタンをクリックすると、環境によっては次のようなメッセージが表示されるので、[はい]ボタンをクリックする。その後、環境によりExcel(Office)のセットアップ媒体を要求するメッセージが表示された場合は指示どおりにインストール媒体をセットする。
●手順2―見積書のテンプレートを作成する(WORKDAY関数の利用)
まずはExcelで見積書のテンプレートを作成してみよう。なおこのテンプレートは別稿のTIPSで作成したものを流用するため、テンプレート内で利用しているVLOOKUP関数については「TIPS―VLOOKUP関数でExcel帳票への自動入力を可能にする」を参照していただきたい。
作成した見積書のテンプレート
作成する見積書のテンプレート。コードを入力すると、それに対応する商品名、単価、出荷所要標準日数、出荷予定日の欄が自動的に補完入力される。そしてさらに数量を入力すると、金額と合計が自動的に計算される。2枚目のproductsシートには、コードと商品名、単価、そして出荷所要標準日数を入力する。3枚目のholidaysシートには、土日以外の休業日を入力する。
(1)発行日の日付を指定する。
(2)キーとなる商品コードを指定する。
(3)(2)で商品コードを指定すると、自動的に対応する商品名が入力される。
(4)商品の数量を指定する。
(5)(2)で商品コードを指定すると、自動的に対応する商品単価が入力される。
(6)(4)と(5)を積算した小計が自動計算される。
(7)(2)で商品コードを指定すると、自動的に対応する出荷所要標準日数が入力される。
(8)(2)で商品コードを指定すると、自動的に対応する出荷予定日が入力される。
- サンプル・ファイルのダウンロード
(注:サンプル・ファイルinquiry.xlsをダウンロードするには、上のリンクを右クリックして、inquiry.xlsというファイル名で保存してください)
(8)の列には出荷予定日を算出するための計算式を指定する。例えば、セルI5ならば、以下のような計算式となる。
=IF(B5<>"",WORKDAY($I$2,$H5,holidays!$B$3:$B$36),"")
IF関数を使わずに単に「=WORKDAY($I$2,$H5,holidays!$B$3:$B$36))」とすると、セルB5(商品コード欄)が入力されていない場合、エラー「!#VALUE」が表示されてしまう。そのため対策として、セルB5が空文字の場合はセルI5も空文字をセットするようにしている。
WORKDAY関数は、ある日付から、指定された日数だけ前後した日付を返す関数である(週末や指定された日付を休日として除外し、営業日だけで計算する)。その書式は「=WORKDAY(開始日,日数,祝日)」であり、各引数の意味は次の表のとおりとなっている。
引数 | 概要 |
---|---|
開始日 | 起算日の日付を指定する |
日数 | 開始日から起算した所要日数を指定する。0なら開始日、正なら将来の日付(例:1なら次の営業日)、負なら過去の日付を返す |
祝日(省略可) | 祝日や創立記念日などの独自休日など、営業日日数計算の対象から外す日付のリストを指定する。指定を省略した場合は土日のみが計算の対象外となる |
WORKDAY関数の引数 WORKDAY関数は、ある日付から、指定された日数だけ前後した日付を返す関数である(週末や指定された日付を休日として除外し、営業日だけで計算する)。 |
NETWORKDAYS関数は、指定された2つの日付の期間に含まれる稼働日(週末や指定された日付を休日として除外した営業日)の日数を返す関数である。例えば同じ日付を指定すると結果は1、次の営業日を指定すると結果は2となる。終了日より開始日が後の場合は負の数となる。
最後に、WORKDAY関数で算出した結果は1900年1月1日を起算日としたシリアル値となっているため、I列全体に対する表示形式を[標準]から[日付]へと変更する。I列全体を選択した状態で書式メニューから[セル]を選択し、[表示形式]タブ内の「分類」として[日付]を選択すれば良い。
holidaysシートには、営業日日数計算の対象外とするリスト(祝日や独自の休日などのリスト)を入力する。
holidaysシートに入力した祝日リスト
営業日日数計算の対象外とする祝日のリストを入力する。NETWORKDAYS関数で使用するのはB列の日付部分のみであり、C列の「内容」はあくまでリストの視認性をよくするためだけのメモである。
●手順3―出荷所要日数分析表を作成する(NETWORKDAYS関数の利用)
続いて、出荷所要日数の分析表を作成してみよう。この分析表では2つの日付の差(所要日数と出荷所要標準日数)を営業日ベースで計算する。
作成した出荷所要日数分析表
作成する出荷所要日数の分析表。商品を受注して実際に出荷した実績を標準日数と比較して差異を自動的に計算する。2枚目のproductsシートと3枚目のholidaysシートは、先の見積書テンプレートと同一内容とする。
(1)商品コードに対応する出荷所要標準日数が自動的に入力される。
(2)受注日と出荷実績を元に、実際の所要日数が自動的に計算される。
(3)(1)と(2)の差の日数が自動計算される。
- サンプル・ファイルのダウンロード
(注:サンプル・ファイルanalysis.xlsをダウンロードするには、上のリンクを右クリックして、analysis.xlsというファイル名で保存してください)
(2)の列には実際に受注してから出荷するまでに要した日数を営業日ベースで算出するための計算式を指定する。例えば、セルF5ならば、以下のような計算式となる。
=NETWORKDAYS(B5,D5,holidays!$B$3:$B$36)-1
NETWORKDAYS関数は、指定された2つの日付の期間に含まれる稼働日の日数を返す関数である(週末や指定された日付を休日として除外し、営業日だけで計算する)。その書式は「=NETWORKDAYS(開始日,終了日,祝日)」であり、各引数の意味は次の表のとおりとなっている。
引数 | 概要 |
---|---|
開始日 | 起算日の日付を指定する |
終了日 | 終了日の日付を指定する |
祝日(省略可) | 祝日や創立記念日などの独自休日など、営業日日数計算の対象から外す日付のリストを指定する。指定を省略した場合は土日のみが計算対象外となる |
NETWORKDAYS関数の引数 NETWORKDAYS関数は、指定された2つの日付の期間に含まれる稼働日(週末や指定された日付を休日として除外した営業日)の日数を返す関数である。例えば同じ日付を指定すると結果は1、次の営業日を指定すると結果は2となる。終了日より開始日が後の場合は結果は負の数となる。NETWORKDAYSは、NET(正味)のWORKDAYS(営業日数)を計算する関数という意味。 |
注意すべきは、式の末尾で「-1」と指定している点である。NETWORKDAYS関数では開始日も終了日も計算結果に含まれるため、例えば開始日と終了日が同日の場合は結果が「1」となる。差異を計算するなら、同日の場合は「0」として処理するのが望ましいため、この場合は計算結果に対して一律1日減算している。
■この記事と関連性の高い別の記事
- Excelで日付や曜日を自動的に表示するように設定する際の注意(TIPS)
- Outlookの予定表でn日後やn週間後などを素早く入力する方法(TIPS)
- Excelでユーザー定義のワークシート関数を追加する(TIPS)
- ユーザー定義関数で任意のセル範囲の値を取得する(TIPS)
- Excelのユーザー定義関数で既存のワークシート関数を利用する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.