みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
フィールド「日付開始日」「日付終了日」 が有りその範囲に特定の曜日、(金土など)が何回あるか、の計算式を教えて頂けないでしょうか?
日付のテーブルを作りリレーションを貼れば良いと思いますが出来れば計算式のみで出したいです。
ご教授宜しくお願い致します。
MacOS FM17
Offline
ループ計算式で求める方法。
たとえば、(※特定曜日は、最大7曜日の内、任意数を順不同指定可能として)
・「日付開始日」日付フィールド:[2019/12/01]
・「日付終了日」 日付フィールド:[2019/12/31]
・「特定曜日」繰り返し[7回]テキストフィールド: [水|日|金| | | | ]
この時、目的の
●「集計結果」繰り返し[7回]計算フィールド: [4|5|4| | | | ]
を得るためのループ計算式は、
(※ この式のループ回数限界は310回のため、期間日数も310日間以下に限定です。)
(※ 310日間を超える場合は、式に限界拡張式が必要となります。)
Let(
[
$str=日付開始日[1] - 1;
$end=日付終了日[1];
$dow=Substitute(特定曜日;["日";1];["月";2];["火";3];["水";4];["木";5];["金";6];["土";7]);
$i=0;
$res="";
$LOOP=
"Case(
$str+$i=$end; If($res; $res);
Let([
$i=$i+1;
$res=Sum($res; (DayOfWeek($str+$i)=$dow))
]; Evaluate($LOOP))
)"
];
Evaluate($LOOP)
)
Last edited by Hiro (2019-12-06 13:07:28)
Offline
開始日 D0 終了日 D1 として、
Div ( D1[1] ; 7 ) - Div ( D0[1] ; 7 ) - 1
+ GetAsBoolean ( Get ( 計算式繰り返し位置番号 ) ≥ DayOfWeek ( D0[1] ) )
+ GetAsBoolean ( Get ( 計算式繰り返し位置番号 ) ≤ DayOfWeek ( D1[1] ) )
という繰り返し7の計算フィールドで求められます。これの任意の位置を参照すればいいでしょう。
または、求める曜日を数値で持たせる繰り返しフィールド DOW を作り、
Div ( D1[1] ; 7 ) - Div ( D0[1] ; 7 ) - 1
+ GetAsBoolean ( DOW ≥ DayOfWeek ( D0[1] ) )
+ GetAsBoolean ( DOW ≤ DayOfWeek ( D1[1] ) )
Last edited by Shin (2019-12-06 15:11:56)
Offline
Hiro様、Shin様、いつも有り難うございます。
どちらの方法でも求める答えを出せました。
式の内容はまだ理解に至りませんが勉強させて頂きます。
ご教授ありがとうございました。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 553.34 KiB (Peak: 581.31 KiB) ]