みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
日付フィールド(グローバル):2014/06/01 と入力されています。
*次月ボタン:
1:『次月』ボタンを押すと、2014/07/01 と日付フィールド内容を変更したい。
2:もちろん、2014/07/01時点で『次月』ボタンを押すと、次は2014/08/01・・・
3:2014/12/01時点で『次月』ボタンを押すと、2015/01/01 としたい。
*前月ボタン:
1:『前月』ボタンを押すと、2014/05/01 と日付フィールド内容を変更したい。
2:もちろん、2014/05/01時点で『前月』ボタンを押すと、次は2014/04/01・・・
3:2014/01/01時点で『次月』ボタンを押すと、2013/12/01 としたい。
次月ボタンにスクリプト引数:1
前月ボタンにスクリプト引数:2
1なら次月計算式、2なら前月計算式 という形でスクリプト引数で分岐して
一つのスクリプト内で出来ると思ってたのですが、
計算式をどうすれば良いのか?解らず困っております。
FMの勉強を始めた初心者なのですが、計算式がちんぷんかんぷんで
可能ならば、答えとなぜそれで出来るのか?お教え頂けますと助かります。
次月ボタンにスクリプト引数:1
前月ボタンにスクリプト引数:-1
としましょう。その方が自然でしょ。
次の式でOKデス。
Date ( Month ( 日付フィールド ) + Get ( スクリプト引数 ) ; Day ( 日付フィールド ) ; Year ( 日付フィールド ) )
しかも、スクリプト引数に任意の数字を入れると、123ヶ月後、45ヶ月前などもそのまま計算できますので、引数を12にすれば次年、-12にすれば前年になります。
Date ( 13 ; 1 ; 2014 ) 、Date ( 0 ; 1 ; 2014 ) は、それぞれ、2015/1/1、2013/12/1 に変換され返されます。便利な関数です。
ただし、日が29以降のとき、月によってずれが生じますが、それは同処理する規則ですか。(例えば、2014/1/31 の1月後は、2014/2/31 は無いので、2014/3/3 になってしまいます)
Last edited by Shin (2014-05-28 23:18:09)
Offline
Shin様、遅くなりました。
DATE関数や日付に関する関数の使い道がしたことなかったので、大変勉強になりました。ありがとうございます。
>>ただし、日が29以降のとき、月によってずれが生じますが、それは同処理する規則ですか。(例えば、2014/1/31 の1月後は、2014/2/31 は無いので、2014/3/3 になってしまいます)
今回処理している日付フィールド(グローバル)は、2014/06/01 のように
1日以外の数字は入らない形です。
その為、1ヶ月後も問題ないのかな?と思うのですが、いかがでしょうか?
また質問で申し訳ないですが、
・2014/1/31 の1月後は2014/2/31 は無いので2014/3/3となるが
・規則:1ヶ月後は、1/31の一ヶ月後は、2/28:つまり翌月末としたい
この場合、以下のような考え方で行った所上手く行きましたが、
上記値を出す場合、どのような形がベストなのでしょうか?
if (
Date ( 1; Day ( 日付フィールド ) ; Year ( 日付フィールド ) ) > Date ( 1; 28; Year ( 日付フィールド ) );
Date ( Month ( 日付フィールド ) + 2 ; 0; Year ( 日付フィールド ) );
Date ( Month ( 日付フィールド ) + Get ( スクリプト引数 ) ; Day ( 日付フィールド ) ; Year ( 日付フィールド ) )
)
条件をより広範事例で適用できる汎用化式、
Let([
#y=Year(日付フィールド);
#m=Month(日付フィールド)+Get(スクリプト引数);
#d=Day(日付フィールド)
];
Min(Date(#m;#d;#y);Date(#m+1;0;#y))
)
Offline
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 510.72 KiB (Peak: 517.83 KiB) ]