みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
OS:[Windows]
FileMaker Ver:[15]
fileMaker初心者です。以下、ご教授いただけると助かります。
日付から+ 8日後が「○月○日」という結果を出すのではなく、
○曜日から+8日後の計算結果が「○月○日」というようにしたいのですが、
FileMakerで曜日から日付を求める計算がわかりません。
例えば、
10月31日(月)、11月2日(水)、11月4日(金)というデータが下記の注文日フィールドにセットされたならば、
各曜日(月・水・金)の条件にて曜日から自動的に出荷日が下記の結果のように計算されるようにしたいです。
注文日が月曜日の場合 + 8日後の出荷日フィールド →結果 11月8日
注文日が水曜日の場合 + 9日後の出荷日フィールド →結果 11月11日
注文日が金曜日の場合 + 7日後の出荷日フィールド →結果 11月11日
よろしくお願いいたします。
火木土 はどうするんですか?
Offline
指定曜日以外は、日付をそのまま返すものとすると、式は、
・ Case(DayOfWeek(日付)=2;日付+8; DayOfWeek(日付)=4;日付+9; DayOfWeek(日付)=6;日付+7; 日付)
or
・ Choose(Div(DayOfWeek(日付);2)*Mod(DayOfWeek(日付)+1;2); 日付; 日付+8; 日付+9; 日付+7)
Last edited by Hiro (2016-11-01 00:47:34)
Offline
シャチ様
月水金はあくまで例えでして、
火木土の場合でも同様に指定曜日から○日後の結果が○月○日と出るようにしたいです。
Hiro様
ご回答ありがとうございます。
上記計算式を試してみます。少々お時間をください。
> 月水金はあくまで例えでして、火木土の場合でも同様に指定曜日から○日後の結果が○月○日と出るようにしたいです。
それなら「日付」と「○日後配列」を引数とする汎用関数式を組んで求めるのが王道でしょう。
Let([
$lst=List(○;○;○;○;○;○;○); // ←「○日後配列」を引数設定(日曜から順に○後日数を列挙)
$d=日付フィールド; // ←「日付」を引数設定
/////////////
$dw=DayOfWeek($d);
$sub="$d+GetValue($lst;$dw)";
$fnc=Substitute(10^7-1; [9;";Evaluate($sub)"]);
$fnc="Choose($dw;\"\"" & $fnc & ")"
];
Evaluate($fnc)
)
Last edited by Hiro (2016-11-01 13:44:19)
Offline
注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 日 ; 月 ; 火 ; 水 ; 木 ; 金 ; 土 )
//日月火水木金土はその曜日で加算する日数
程度でいいのでは。
Offline
チポさん それがシンプルでいいですネ。
私は式の発想を、
Choose( DayOfWeek(注文日); "" ; 注文日+日 ; 注文日+月 ; 注文日+火 ; 注文日+水 ; 注文日+木 ; 注文日+金 ; 注文日+土 )
としてしまった為、繰り返し処理が多いので変数で式を組んでしまいました。
Last edited by Hiro (2016-11-01 14:50:59)
Offline
Hiro様、チポ様
レスが遅くなり申し訳ございません。下記で出来ました。ありがとうございました。
Case(DayOfWeek(日付)=2;日付+8; DayOfWeek(日付)=4;日付+9; DayOfWeek(日付)=6;日付+7; 日付)
ですがですが、チポ様のシンプルな式を採用することにしました。
もう1歩踏み込んでご教授いただきたいのですが、
例えば あるフィールドにパターン ”1” という数字が登録された場合にはパターン1の式で出荷日が計算され、
パターン ”2” という数字が登録された場合にはパターン2の式で出荷日が計算されるような条件式を作りたいです。
パターン1:注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 5 ; 7 ; 6 ; 7 ; 6 ; 7 )
パターン2:注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 6 ; 9 ; 8 ; 9 ; 8 ; 10 )
よろしくお願いいたします。
Case(あるフィールド=”パターン1”;注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 5 ; 7 ; 6 ; 7 ; 6 ; 7 );あるフィールド=”パターン2”;注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 6 ; 9 ; 8 ; 9 ; 8 ; 10 ))
Offline
必要条件はちょびチョビ後出しせず、すべてを先に提示くださいネ。
この式例は、
Case(
パターン=1; 注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 5 ; 7 ; 6 ; 7 ; 6 ; 7 );
パターン=2; 注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 6 ; 9 ; 8 ; 9 ; 8 ; 10 );
・
・
パターン=n; ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
)
だけど、
繰り返し箇所が多くなったので、今度は#6番式の様に変数で関数式を組む方が、
パターン件数が増えても無改造で即時対応できる利点もあり、良いかも?
Let([
#d=注文日フィールド;
#ptn=パターンフィールド;
#ary=日数配列フィールド;
/////////////
#lst=Substitute(GetValue(#ary;#ptn);[",";¶]);
#dw=DayOfWeek(#d);
#fnc=#d+GetValue(#lst;#dw)
];
Case(ValueCount(#ary)>=#ptn; #fnc)
)
ここで、「日数配列」フィールドはグローバルフィールドとし、
パターン内容を「,」区切りで1行としたパターン番号順の一覧リストにして、入力しておきます。
【パターン内容を必要なだけ列挙】日,月,火,水,木,金,土
2,5,7,6,7,6,7
2,6,9,8,9,8,10
・・・・・・・
・・・・・・・
・・・・・・・
Last edited by Hiro (2016-11-02 00:55:50)
Offline
シャチ様、Hiro様
できました!! ありがとうございました。
FileMakerっていろいろできて面白いですね。
しかし、もっと勉強しなければ!と思ってます。
Hiro様
今後は思いつきではなく、やりたいこと頭の中を整理してから質問しますね。
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 524.72 KiB (Peak: 545.26 KiB) ]