- ベストアンサー
FileMaker Ver.7で2つの日付間から特定の曜日を除いた日数を求めたいのですが…
FileMaker Ver.7を使用して、質問のタイトルのように2つのフィールドは開始日と終了日を使用して特定の曜日を除いた日数を求めたいのですが皆様教えていただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>特定の曜日を除いた日数を求めたい 特定の曜日は複数(土・日など)の場合もあるかも知れませんが、ここでは例えば日曜だけというように単数の場合に限定してお答えします。 複数の場合があるときは、下記にならい、フィールドを複数設けて計算してください。 次のとおり入力フィールド及び計算フィールドを作ります。 1、開始日(タイプ「日付」)……入力フィールドです。 2、終了日(タイプ「日付」)……入力フィールドです。 3、期間日数(タイプ「計算」計算結果「数字」) 計算式………終了日-開始日+1 4、開始日の曜(タイプ「計算」計算結果「数字」) 計算式………DayofWeek(開始日) 5、曜日(タイプ「テキスト」)……除きたい「特定の曜日」を入力するフィールドです。 なお、入力に当たっては値一覧で定義し、ポップアップメニューで入力する方が便利でしょう。 7、曜日順(タイプ「計算」計算結果「数字」)」 計算式……Case(曜日 ="日曜日",1,曜日="月曜日",2,曜日="火曜日",3,曜日="水曜日",4,曜日="木曜日",5,曜日="金曜日",6,曜日="土曜日",7) 7、期間中の曜日数(タイプ「計算」計算結果「数字」) 計算式………If((0>曜日順 - 開始日の曜)or(曜日順-開始日の曜>=Mod(期間日数,7)),Int(期間日数/7),Int(期間日数/7)+1) 8、特定の曜日を除いた日数(タイプ「計算」計算結果「数字」) 計算式………期間日数 - 期間中の曜日数 以上で答えが出ると思います。(自信ありとしたのは、テストの結果一応正解が出たという意味です。) なお、「一応」という意味は、ご存知かも知れませんが、ファイルメーカーの場合はエクセルと違って「DATEDIF」のような関数がないため、期間計算や年齢計算の場合、極めて複雑な計算をしないと閏年の関係で2年おきに1日の誤差が生じることがあります。したがって前記の場合も計算期間が長期間(例えば1年以上)になると誤差が生じる可能性がないとはいえません。しかしそこまで考慮して計算式に引用すると式が極めて複雑になるため、今回は省いておりすのであらかじめご了承ください。 (お暇があれば下記URLをご参照ください。) http://okwave.jp/kotaeru.php3?q=1739838
その他の回答 (2)
- 7marine
- ベストアンサー率36% (59/160)
ANo1です。 訂正あり。 基本営業日 = (週 * 5) + Case ( 曜日1 = "日曜日" ; 0; 曜日1 = "月曜日" ; 5; 曜日1 = "火曜日" ; 4; 曜日1 = "水曜日" ; 3; 曜日1 = "木曜日" ; 2; 曜日1 = "金曜日" ; 1; 曜日1 = "土曜日" ; 0) + Case ( 次の日曜日1 > 前の日曜日2 ; 0; <<=====この行削除 曜日2 = "日曜日" ; 0; 曜日2 = "月曜日" ; 1; 曜日2 = "火曜日" ; 2; 曜日2 = "水曜日" ; 3; 曜日2 = "木曜日" ; 4; 曜日2 = "金曜日" ; 5; 曜日2 = "土曜日" ; 5);
- 7marine
- ベストアンサー率36% (59/160)
似たようなフィールドを作成してますが 参考になれば営業日数を計算するものです 営業日数 = Let( [曜日1 = DayNameJ ( 日付1 ) ; 曜日2 = DayNameJ ( 日付2 ) ; 次の日曜日1 = Case( 曜日1 = "日曜日" ; 日付1; 曜日1 = "月曜日" ; 日付1 + 6; 曜日1 = "火曜日" ; 日付1 + 5; 曜日1 = "水曜日" ; 日付1 + 4; 曜日1 = "木曜日" ; 日付1 + 3; 曜日1 = "金曜日" ; 日付1 + 2; 曜日1 = "土曜日" ; 日付1 + 1); 前の日曜日2 = Case( 曜日2 = "日曜日" ; 日付2 ; 曜日2 = "月曜日" ; 日付2 - 1; 曜日2 = "火曜日" ; 日付2 - 2; 曜日2 = "水曜日" ; 日付2 - 3; 曜日2 = "木曜日" ; 日付2 - 4; 曜日2 = "金曜日" ; 日付2 - 5; 曜日2 = "土曜日" ; 日付2 - 6); 週 = (前の日曜日2 - 次の日曜日1) / 7; 基本営業日 = (週 * 5) + Case ( 曜日1 = "日曜日" ; 0; 曜日1 = "月曜日" ; 5; 曜日1 = "火曜日" ; 4; 曜日1 = "水曜日" ; 3; 曜日1 = "木曜日" ; 2; 曜日1 = "金曜日" ; 1; 曜日1 = "土曜日" ; 0) + Case ( 次の日曜日1 > 前の日曜日2 ; 0; 曜日2 = "日曜日" ; 0; 曜日2 = "月曜日" ; 1; 曜日2 = "火曜日" ; 2; 曜日2 = "水曜日" ; 3; 曜日2 = "木曜日" ; 4; 曜日2 = "金曜日" ; 5; 曜日2 = "土曜日" ; 5); 祝日日数 = If ( 日付1 <= Date(1;3;2005) and 日付2 >= Date(1;3;2005) ; 1 ; 0) + If ( 日付1 <= Date(1;10;2005) and 日付2 >= Date(1;10;2005) ; 1 ; 0) + If ( 日付1 <= Date(2;11;2005) and 日付2 >= Date(2;11;2005) ; 1 ; 0) + If ( 日付1 <= Date(3;21;2005) and 日付2 >= Date(3;21;2005) ; 1 ; 0) + If ( 日付1 <= Date(4;29;2005) and 日付2 >= Date(4;29;2005) ; 1 ; 0) + If ( 日付1 <= Date(5;3;2005) and 日付2 >= Date(5;3;2005) ; 1 ; 0) + If ( 日付1 <= Date(5;4;2005) and 日付2 >= Date(5;4;2005) ; 1 ; 0) + If ( 日付1 <= Date(5;5;2005) and 日付2 >= Date(5;5;2005) ; 1 ; 0) + If ( 日付1 <= Date(7;18;2005) and 日付2 >= Date(7;18;2005) ; 1 ; 0) + If ( 日付1 <= Date(10;10;2005) and 日付2 >= Date(10;10;2005) ; 1 ; 0) + If ( 日付1 <= Date(11;3;2005) and 日付2 >= Date(11;3;2005) ; 1 ; 0) + If ( 日付1 <= Date(11;23;2005) and 日付2 >= Date(11;23;2005) ; 1 ; 0) + If ( 日付1 <= Date(12;23;2005) and 日付2 >= Date(12;23;2005) ; 1 ; 0) + If ( 日付1 <= Date(12;30;2005) and 日付2 >= Date(12;30;2005) ; 1 ; 0) ]; 基本営業日 - 祝日日数 )