http://FMPro.info  FileMaker Pro 関連総合ポータルサイト

BusinessDays 関数

カテゴリー : 日付
計算結果のデータタイプ : 数字
対応FileMakerバージョン : 対応 7  対応 8  対応 8.5  対応 9  対応 10  対応 11  未対応 12  未対応 13  未対応 14  未対応 15
作者 : 社本修司 株式会社ジェネコム

概要

開始日から終了日の間の祝日を考慮した営業日数を返します。

構文

BusinessDays ( 開始日 ; 終了日 )

引数

引数名タイプ備考
開始日日付 2005.01.07
終了日日付 2005.01.11

別のウィンドウで、引数の値を変更してテストすることが出来ます

BusinessDays ( "2005.01.07" ; "2005.01.11" )

結果

3

/*==============================================================

  カスタム関数    BusinessDays ( 開始日 ; 終了日 )

  CopyRight©2004,SHAMOTO Syuji
  <http://www.FMPro.jp>

  開始日と終了日を指定することで日・祝日を除く営業日数を計算します。

  BusinessDays ( "2005/1/7" ; "2005/1/11") の形で指定します。

  開始日 > 終了日の場合は計算しません。
  開始日・終了日ともに日数に加えるようになっています。
  例えば2005/1/7から1/11までの場合
  2005/1/7(金)・1/8(土)・1/9(日)・1/10(祝)・1/11(火)なので、結果は
  1/9(日)・1/10(祝)を抜いた"3"営業日となります。

  このカスタム関数を引用するに当たっては、必ずコメントも一緒に引用してください。

=============================================================*/


//-------------------------------------------------------------------------
// 祝日の判定に HolidayJ 関数(カスタム関数)を使用
// HolidayJ 関数は <http://www.FMPro.jp> を参照のこと
//-------------------------------------------------------------------------

Let
(

    [  // === Let_Start ==================================


    START_DATE = 開始日 ;
    END_DATE = 終了日 ;
    END_NUM = END_DATE - START_DATE ;

    //----------------------------------------------------------------------
    // 後に再起呼出しで開始日を1増させていく
    //----------------------------------------------------------------------

    theDate = START_DATE ;

    //----------------------------------------------------------------------
    // 上で定義した theDate を休日判定する
    // 休みの基準を変える場合は以下の式を変更すること
    // HappyMonday 関数(カスタム関数)を利用すると第2第4土曜日は休みとかいう条件も
    // シンプルな式で計算できる
    // HappyMonday 関数は <http://www.FMPro.jp> を参照のこと
    //----------------------------------------------------------------------
    
    //----------------------------------------------------------------------
    // 1.日曜日・祝日の場合を休みとする場合
    //----------------------------------------------------------------------

    BD =
    not (
    ( not IsEmpty ( HolidayJ ( theDate ) ) )         // 祝日
    or ( DayOfWeek ( theDate ) = 1 )             // 日曜日
    )
    
    //----------------------------------------------------------------------
    // 2.日曜日・祝日に加え、第2第4土曜日も休みの場合のサンプル計算式
    //----------------------------------------------------------------------
    /*
    Y = Year ( theDate ) ;
    M = Month ( theDate ) ;
    BD =
    not (
    ( not IsEmpty ( HolidayJ ( theDate ) ) )         // 祝日
    or ( DayOfWeek ( theDate ) = 1 )             // 日曜日
    or ( theDate = HappyMonday ( 2 ; "土" ; M ; Y ) )     // 第2土曜日
    or ( theDate = HappyMonday ( 4 ; "土" ; M ; Y ) )     // 第4土曜日
    )
    */


    //----------------------------------------------------------------------
    // 3. 銀行休日の場合のサンプル計算式 (土日祝と年末・年始の12/31〜1/3)
    //----------------------------------------------------------------------
    /*
    Y = Year ( theDate ) ;
    BD =
    not (
    ( not IsEmpty ( HolidayJ ( theDate ) ) )         // 祝日
    or ( DayOfWeek ( theDate ) = 1 )             // 日曜日
    or ( DayOfWeek ( theDate ) = 7 )             // 土曜日
    or ( theDate = Date ( 12 ; 31 ; Y )             // 年末
    or ( theDate = Date ( 1 ; 2 ; Y )             // 年始 1月1日はHolidayJで判定済み
    or ( theDate = Date ( 1 ; 3 ; Y )             //
    )
    */

    
    ] ; // === Let_End ==================================



   Case (
        //===========================================
        // Caseの条件
        //===========================================

        //---------------------------------------------------------------
        // END_NUM が 0 になるまで計算
        // (FileMakerの仕様上10,000回の上限ありなので、終了日と開始日の間が
        // 10,000日以上の計算はできない。)
        // ついでに開始日・終了日ともに指定されていない時も計算しないようにしている。
        //---------------------------------------------------------------

        not ( IsEmpty ( START_DATE ) or IsEmpty ( END_DATE ) ) and
        ( 0 ≤ END_NUM ) ;

            BD
            + BusinessDays ( START_DATE + 1 ; END_DATE )
    )
)

// ©2004,SHAMOTO Syuji <http://www.FMPro.jp>

エンコードは Unicode (UTF-8)、改行タイプは LF (Unix) 形式のテキストとして保存します。
テキストエディタで正常に開かない場合は、エンコードを指定してファイルを開くようにしてください。

詳細説明

開始日と終了日を指定することで日・祝日を除く営業日数を計算します。
祝日の判定にHolidayJ関数(カスタム関数)を使用しています。
BusinessDays ( "2005/1/7" ; "2005/1/11" ) の形で指定します。
開始日 > 終了日の場合は計算しません。
開始日・終了日ともに日数に加えるようになっています。
例えば2005/1/7から1/11までの場合
2005/1/7(金)・1/8(土)・1/9(日)・1/10(祝)・1/11(火)なので、結果は
1/9(日)・1/10(祝)を抜いた"3"営業日となります。

この関数が使用する他のカスタム関数

この関数を使用する他のカスタム関数

注意:ここで紹介されているカスタム関数をご自分のシステムに組み込んだ場合に発生した問題についてはFMPro.infoは責任を負いません。

Copyright © 2004-2009 FMPro.info All Rights Reserved.