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

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

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

You are not logged in.

Announcement

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


#1 2023-12-27 11:12:37

繰り返しフィールドに月水金・火木土の日付を展開

いつもお世話になっております。
FMP19
FMS19

基準日の曜日(月~土)に応じてその後の日付を繰り返しフィールド[10]に展開したいです。
基準日が
(月)ならば 月水金月水金月水金月
(火)ならば 火木土火木土火木土火
(水)ならば 水金月水金月水金月水
といった具合です。
計算式がうまくできません。
アドバイスを頂けると助かります。
よろしくお願いします。

Offline

#2 2023-12-27 12:18:47

Shin
Member

Re: 繰り返しフィールドに月水金・火木土の日付を展開

繰り返しフィールドで運用するのはお薦めしませんが。

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

#3 2023-12-27 14:07:30

Re: 繰り返しフィールドに月水金・火木土の日付を展開

Shinさん
返信ありがとうございます。
すごいです!完璧です!
こういった計算式のアイデアがなかなか身につかなくていつも助かってます。
早速使わせてもらいますね。

Offline

#4 2023-12-28 10:12:37

Shin
Member

Re: 繰り返しフィールドに月水金・火木土の日付を展開

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

#5 2023-12-29 09:30:02

Re: 繰り返しフィールドに月水金・火木土の日付を展開

Shinさん
なるほど~結果を書き出してみると分かりやすいです。
これを見て計算式に反映させるテクニックが必要ですね。
また行き詰まったら試してみます。
ありがとうございます。

Offline

#6 2023-12-30 13:54:50

himadanee
Guest

Re: 繰り返しフィールドに月水金・火木土の日付を展開

別の考え方でやってみました。
・1つめは基準日
・2つ目以降は1つ前の繰り返しの2日後
・ただし、それが日曜か月曜なら1日後にずらす

Let ( n = Get(計算式繰り返し位置番号) ;
Case ( n = 1 ; 基準日[1] ;
Let ( d = 繰り返しフィールド[n - 1] + 2 ; d + ( DayOfWeek ( d ) < 3 ) )
)
)

#7 2024-01-02 09:07:07

Re: 繰り返しフィールドに月水金・火木土の日付を展開

himadaneeさん
ありがとうございます。
こちらも問題なく動作しました。
計算式中で不等号を使って1を返せるのですね。
勉強になります。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 11 queries executed - Memory usage: 515.46 KiB (Peak: 520 KiB) ]