みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
FMP19
FMS19
基準日の曜日(月~土)に応じてその後の日付を繰り返しフィールド[10]に展開したいです。
基準日が
(月)ならば 月水金月水金月水金月
(火)ならば 火木土火木土火木土火
(水)ならば 水金月水金月水金月水
といった具合です。
計算式がうまくできません。
アドバイスを頂けると助かります。
よろしくお願いします。
Offline
繰り返しフィールドで運用するのはお薦めしませんが。
Let (
[
D0 = 基準日[1] ;
DW0 = DayOfWeek ( D0 ) ;
lst = List ( 0 ; 2 ; 4 ; 7 ; 9 ; 11 ; 14 ; 16 ; 18 ; 21 ; 23 ; 25 ) ;
lst = MiddleValues ( lst ; Div ( DW0 ; 2 ) ; 10 )
] ;
D0 - DW0 + GetValue ( lst ; Get ( 計算式繰り返し位置番号 ) ) + 2 + Mod ( DW0 ; 2 )
)
修正しました。
Last edited by Shin (2023-12-28 10:12:01)
Offline
Shinさん
返信ありがとうございます。
すごいです!完璧です!
こういった計算式のアイデアがなかなか身につかなくていつも助かってます。
早速使わせてもらいますね。
Offline
Let (
lst = Cnoose ( DayOfWeek ( 基準日[1] ) ; "" ; "" ;
List ( 0 ; 2 ; 4 ; 7 ; 9 ; 11 ; 14 ; 16 ; 18 ; 21 ; 23 ; 25 ) ;
List ( 0 ; 2 ; 4 ; 7 ; 9 ; 11 ; 14 ; 16 ; 18 ; 21 ; 23 ; 25 ) ;
List ( 0 ; 2 ; 5 ; 7 ; 9 ; 12 ; 14 ; 16 ; 19 ; 21 ; 23 ; 26 ) ;
List ( 0 ; 2 ; 5 ; 7 ; 9 ; 12 ; 14 ; 16 ; 19 ; 21 ; 23 ; 26 ) ;
List ( 0 ; 3 ; 5 ; 7 ; 10 ; 12 ; 14 ; 17 ; 19 ; 21 ; 24 ; 26 ) ;
List ( 0 ; 3 ; 5 ; 7 ; 10 ; 12 ; 14 ; 17 ; 19 ; 21 ; 24 ; 26 )
) ;
基準日[1] + GetValue ( lst ; Get ( 計算式繰り返し位置番号 ) )
)
でいいのですが、その中の規則性を探すと、上の式になります。
これが2行ずつ同じ繰り返しなので、
Let (
lst = Cnoose ( Div ( DayOfWeek ( 基準日[1] ) ; 2 ) - 1 ;
List ( 0 ; 2 ; 4 ; 7 ; 9 ; 11 ; 14 ; 16 ; 18 ; 21 ; 23 ; 25 ) ;
List ( 0 ; 2 ; 5 ; 7 ; 9 ; 12 ; 14 ; 16 ; 19 ; 21 ; 23 ; 26 ) ;
List ( 0 ; 3 ; 5 ; 7 ; 10 ; 12 ; 14 ; 17 ; 19 ; 21 ; 24 ; 26 )
) ;
基準日[1] + GetValue ( lst ; Get ( 計算式繰り返し位置番号 ) )
)
となります。中の数字の規則性をみて、ずらしてあります。これからList() の内容をまとめると、上の式になります。
さらにその数列を生成する凝った式にすると、
Let (
DW0 = Div ( DayOfWeek ( 基準日[1] ) ; 2 ) ;
基準日[1] - DW0 * 2 + Int ( ( DW0 + Get ( 計算式繰り返し位置番号 ) - 1 ) * 7 / 3 )
)
Last edited by Shin (2023-12-30 08:46:04)
Offline
Shinさん
なるほど~結果を書き出してみると分かりやすいです。
これを見て計算式に反映させるテクニックが必要ですね。
また行き詰まったら試してみます。
ありがとうございます。
Offline
別の考え方でやってみました。
・1つめは基準日
・2つ目以降は1つ前の繰り返しの2日後
・ただし、それが日曜か月曜なら1日後にずらす
Let ( n = Get(計算式繰り返し位置番号) ;
Case ( n = 1 ; 基準日[1] ;
Let ( d = 繰り返しフィールド[n - 1] + 2 ; d + ( DayOfWeek ( d ) < 3 ) )
)
)
himadaneeさん
ありがとうございます。
こちらも問題なく動作しました。
計算式中で不等号を使って1を返せるのですね。
勉強になります。
Offline
Pages: 1
[ Generated in 0.009 seconds, 11 queries executed - Memory usage: 515.46 KiB (Peak: 520 KiB) ]