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

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

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

You are not logged in.

Announcement

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


#1 2021-08-23 18:04:31

nakayama.c
Guest

2つのフィールドの中から当月よりも後の月を選択したい。

素人です。わかりにくいタイトルおよびメッセージ記載ですがよろしくお願いします。

年に2回、患者さんの定期検査をしないといけません。
その2回を ①生年月日の月と ②生年月日の月+6 (※生年月日の半年後)にしたいと考えています。
※つまり、 1月生まれなら検査実施日は1月と7月)

定期検査の時期を期間順にリストで作成するときに
今日の日付(月)から  ①生年月日の月 と ②生年月日から半年後 のどちらが最短の月なのかを判別する式がわかりません。

E  X)生年月日の月が2月で 今日が8月の場合、 検査は、2月と10月になります。
  ※2つのフィールドのうち、今日の月が8月であることから、 次の検査日は10月にならないといけません。 

同様に 生年月日の月が9月で 今日が10月の場合、 検査は、9月と3月になります。
  ※2つのフィールドのうち、今日の月が10月であることから、 次の検査日は3月にならないといけません。

#2 2021-08-23 21:50:03

ブランコ
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

こんなのはいかがでしょう?
非保存計算フィールド:日付形式

Let 
( 
  [
    $TDY = Month ( Get ( 日付 ) ) ;
    $BTD = Month ( 生年月日 ) ;
    $DST = Case ( $BTD - $TDY ≥ 6 ; -6 ; $TDY > $BTD ; 6 ; 0 ) 
  ]

;

  Date ( Month ( 生年月日 ) + $DST ; 1 ; Year ( Get ( 日付 ) ) )
)

この場合、生年月日から半年後のフィールドは不要になります。

Last edited by ブランコ (2021-08-24 06:37:30)

Offline

#3 2021-08-24 08:12:15

nakayama.c
Guest

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

ブランコ様

早々のご助言ありがとうございます。
ちなみに初心者過ぎて
$TDY =
$BTD =
$DST =
この3つの意味はまったくわかりませんでしたが・・・

さっそく式を張り付けるとこちらが求める値が表示されました。
本当にありがとうございます。

#4 2021-08-24 08:20:30

ブランコ
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

すみません。誕生日の半年後以降を考慮してませんでした。

Let 
( 
  [
    $TDY = Month ( Get ( 日付 ) ) ;
    $BTD = Month ( 生年月日 ) ;
    $DST = Case ( $BTD - $TDY ≥ 6 ; -6 ; $TDY - $BTD > 6 ; 12 ; $TDY > $BTD ; 6 ; 0 ) 
  ]

;

  Date ( Month ( 生年月日 ) + $DST ; 1 ; Year ( Get ( 日付 ) ) )
)

こちらでどうでしょう。

Offline

#5 2021-08-24 08:33:21

nakayama.c
Guest

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

ブランコ様

間違っていることにも気づきませんでしたが新しくいただきました方で、
問題なく使用できています。

本当にありがとうございました。

#6 2021-08-24 09:02:55

Shin
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

Let
(
    m = Mod ( Month ( 誕生日 ) - Month  ( Get ( 日付 ) ) + 11 ; 6 ) + 1  ;
    Date ( Month ( Get ( 日付 ) ) + m ; 1 ; Year ( Get ( 日付 ) ) )
)
とか、
Let
(
    m = Div ( Year ( Get ( 日付 ) ) * 12  + Month ( Get ( 日付 ) ) - Year ( 誕生日 ) * 12  - Month  ( 誕生日 ) ; 6 )  ;
    date ( Month ( 誕生日 ) + m * 6 + 6 ; 1 ; Year ( 誕生日 ) )
)
でもいいですよ。

Last edited by Shin (2021-08-24 17:21:59)

Offline

#7 2021-08-24 13:33:56

ブランコ
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

使用したのはlet関数と云いまして、これを使用すると計算式の前に変数を宣言することが出来るんです。
式内で繰り返し使われる値や、計算結果等を変数に代入してやることで記述をシンプルにすることを目的として使用しています。

$TDY←ここに今月(今なら8月)
を代入しています。$マークは不要ですが、私はなんとなく入れています。

私の場合、能力不足のためcase関数で場合分けをしていますが、shinさんのように普遍的な式に落とし込む方がよりエレガントだと思います。(個人的感想)

あと、出来れば式のベタ移植ではなく、どういう意図で式が書かれているかを理解しながら使用すると、ご自身の力になるのでオススメですよ。

Offline

#8 2021-08-24 17:29:06

Shin
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

let() 内だけで使うローカル変数は、$ にしないようがいいですよ。
$ をつけると、スクリプト内のローカル変数になるので、意図せずに別の let() へ影響したり、スクリプト内のステップで設定した変数を書き換える可能性が出てきます。(意図的に使うこともあります)
記号をつけたいのでしたら、$, $$ 以外の、# とか _ などがいいかもしれません。

Offline

#9 2021-08-24 21:13:43

ブランコ
Member

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

ですよね。
最初に習った人(プロではないです)に、そう教わったため、なんとなく惰性で付けていました。
これからは#等を付けるようにします。

Offline

#10 2021-08-27 07:25:51

nakayama.c
Guest

Re: 2つのフィールドの中から当月よりも後の月を選択したい。

返信が遅くなってしまい、大変申し訳ありません。
皆様、いろいろな方法およびご説明ありがとうございました。

これからも精進していきますが、また解決できないことがありましたら、
よろしくお願いいたします。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 566.1 KiB (Peak: 581.63 KiB) ]