初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2016-10-31 20:10:07

coni
Guest

<曜日からプラス何日後の日付を求めたい>

OS:[Windows]
FileMaker Ver:[15]

fileMaker初心者です。以下、ご教授いただけると助かります。

日付から+ 8日後が「○月○日」という結果を出すのではなく、
○曜日から+8日後の計算結果が「○月○日」というようにしたいのですが、
FileMakerで曜日から日付を求める計算がわかりません。

例えば、
10月31日(月)、11月2日(水)、11月4日(金)というデータが下記の注文日フィールドにセットされたならば、
各曜日(月・水・金)の条件にて曜日から自動的に出荷日が下記の結果のように計算されるようにしたいです。

注文日が月曜日の場合 + 8日後の出荷日フィールド →結果 11月8日

注文日が水曜日の場合 + 9日後の出荷日フィールド →結果 11月11日

注文日が金曜日の場合 + 7日後の出荷日フィールド →結果 11月11日

よろしくお願いいたします。

#2 2016-10-31 20:48:35

シャチ
Member

Re: <曜日からプラス何日後の日付を求めたい>

火木土 はどうするんですか?

Offline

#3 2016-10-31 22:06:52

Hiro
Member

Re: <曜日からプラス何日後の日付を求めたい>

指定曜日以外は、日付をそのまま返すものとすると、式は、

・ 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

#4 2016-11-01 09:42:42

coni
Guest

Re: <曜日からプラス何日後の日付を求めたい>

シャチ様
月水金はあくまで例えでして、
火木土の場合でも同様に指定曜日から○日後の結果が○月○日と出るようにしたいです。

#5 2016-11-01 09:46:16

coni
Guest

Re: <曜日からプラス何日後の日付を求めたい>

Hiro様
ご回答ありがとうございます。
上記計算式を試してみます。少々お時間をください。

#6 2016-11-01 12:34:08

Hiro
Member

Re: <曜日からプラス何日後の日付を求めたい>

> 月水金はあくまで例えでして、火木土の場合でも同様に指定曜日から○日後の結果が○月○日と出るようにしたいです。
それなら「日付」と「○日後配列」を引数とする汎用関数式を組んで求めるのが王道でしょう。

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

#7 2016-11-01 14:01:58

チポ
Member

Re: <曜日からプラス何日後の日付を求めたい>

注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 日 ; 月 ; 火 ; 水 ; 木 ; 金 ; 土 )
//日月火水木金土はその曜日で加算する日数

程度でいいのでは。

Offline

#8 2016-11-01 14:37:24

Hiro
Member

Re: <曜日からプラス何日後の日付を求めたい>

チポさん それがシンプルでいいですネ。

私は式の発想を、
Choose( DayOfWeek(注文日); "" ; 注文日+日 ; 注文日+月 ; 注文日+火 ; 注文日+水 ; 注文日+木 ; 注文日+金 ; 注文日+土 )
としてしまった為、繰り返し処理が多いので変数で式を組んでしまいました。

Last edited by Hiro (2016-11-01 14:50:59)

Offline

#9 2016-11-01 21:08:23

coni
Guest

Re: <曜日からプラス何日後の日付を求めたい>

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 )

よろしくお願いいたします。

#10 2016-11-01 23:22:17

シャチ
Member

Re: <曜日からプラス何日後の日付を求めたい>

Case(あるフィールド=”パターン1”;注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 5 ; 7 ; 6 ; 7 ; 6 ; 7 );あるフィールド=”パターン2”;注文日 + Choose ( DayOfWeek ( 注文日 ) ; "" ; 2 ; 6 ; 9 ; 8 ; 9 ; 8 ; 10 ))

Offline

#11 2016-11-01 23:41:34

Hiro
Member

Re: <曜日からプラス何日後の日付を求めたい>

必要条件はちょびチョビ後出しせず、すべてを先に提示くださいネ。

この式例は、
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

#12 2016-11-02 17:48:55

coni
Guest

Re: <曜日からプラス何日後の日付を求めたい>

シャチ様、Hiro様
できました!! ありがとうございました。
FileMakerっていろいろできて面白いですね。
しかし、もっと勉強しなければ!と思ってます。

Hiro様
今後は思いつきではなく、やりたいこと頭の中を整理してから質問しますね。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 524.72 KiB (Peak: 545.26 KiB) ]