みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。
環境はWin10FM16になります
登録日
満了日
のフィールドがあり
残り月日 〇ヶ月〇日と表示できるよう計算式を探して
Let (
[
data = 満了日 ;
d1 = Max ( data ; 登録日 ) ;
d0 = Min ( data ; 登録日 ) ;
YM1 = Year ( d1 ) * 12 + Month ( d1 ) + Day ( d1 ) / 100 ;
YM0 = Year ( d0 ) * 12 + Month ( d0 ) + Day ( d0 ) / 100 ;
m = Int ( YM1 - YM0 ) ;
d = Case ( Day ( d1 ) = Day ( d0 ) ; 0 ; Day ( d1 - Day ( d0 ) ) )
] ;
Case (
m = 0 ; d & "日" ;
m < 12 ; Mod ( m ; 12 ) & "ヶ月" & d & "日" ;
Div ( m ; 12 ) & "年" & Mod ( m ; 12 ) & "ヶ月" & d & "日"
) )
と組んでみましたがどうも思ったようにならず困っています
残り1ヶ月の仕様としては
満了日:2018/3/28 の場合、
2018/1/28 では2ヶ月
2018/1/29 では1ヶ月30日
2018/2/28 では1ヶ月
となればいいなと思っております
ご教授お願い致します。
Offline
年、月と日は0で無ければ表示、ということですか。
Let (
[
D0 = Min ( 満了日 ; 登録日 ) ;
D1 = Max ( 満了日 ; 登録日 ) - Day ( D0 ) ;
D0 = D0 - Day ( D0 ) ;
YM1 = Year ( D1 ) * 12 + Month ( D1 ) ;
YM0 = Year ( D0 ) * 12 + Month ( D0 ) ;
ym = Int ( YM1 - YM0 ) ;
y = Div ( ym ; 12 ) ;
m = Mod ( ym ; 12 ) ;
d = Day ( D1 + 1 ) - 1
] ;
Case ( y ; y & "年" ) & Case ( m ; m & "ヶ月" ) & Case ( d ; d & "年" )
)
にすればいかがでしょう。
Last edited by Shin (2018-03-04 14:27:54)
Offline
Shin様
ご返信ありがとうございます。
結果のほうがテキスト・数字・日付など全てにおいて?年?月?日や?と表示されてしまいます
原因が自分では判明できず、何かしら基本的な事がぬけていますでしょうか?
Offline
Haruさんの式で
> m = Int ( YM1 - YM0 )
これは、さらに
d0の日がd1の日より大きければ 1 を引く
を加えないとダメでしょう。
さらに、dは
d0の日がd1の日以下ならその差をとり、
より大きければ
d0の日からその月の月末までの日数をd1の日に加える
と考えればいいのでは。
Offline
チポ様ご返信ありがとうございます。
ご指摘をもとにやってみました
Let (
[
data = 満了日 ;
d1 = Max ( data ; 登録日 ) ;
d0 = Min ( data ; 登録日 ) ;
YM1 = Year ( d1 ) * 12 + Month ( d1 ) + Day ( d1 ) / 100 ;
YM0 = Year ( d0 ) * 12 + Month ( d0 ) + Day ( d0 ) / 100 ;
m = If ( Day ( d0 ) > Day ( d1 ) ;Int ( YM1 - YM0 ) - 1 )
d = Case ( Day ( d1 ) = Day ( d0 ) ; 0 ; Day ( d0 ) < Day ( d1 ) ; Day ( d1 )- Day ( d0 ) ; Day ( d0 ) > Day ( d1 ) ; Day ( d1 )- Day ( d0 ))
] ;
Case (
m = 0 ; d & "日" ;
m < 12 ; Mod ( m ; 12 ) & "ヶ月" & d & "日" ;
Div ( m ; 12 ) & "年" & Mod ( m ; 12 ) & "ヶ月" & d & "日"
) )
結果ですが
> d = Case ( Day ( d1 ) = Day ( d0 ) ; 0 ; Day ( d0 ) < Day ( d1 ) ; Day ( d1 )- Day ( d0 ) ; Day ( d0 ) > Day ( d1 ) ; Day ( d1 )- Day ( d0 ))
の部分のdが指定されたフィールドが見つかりませんとなり、?が頭に飛んでおります
ご指摘よろしくお願いいたします。
Offline
2018/1/29 では1ヶ月30日
の30日は、どこを基準にした30日ですか。2ヶ月未満なので、1ヶ月後の日付から数えると思いますが、さらに2月29日が無いので、3月1日基準で考えると、1ヶ月28日、月末という考え方で2月28日基準にすると1ヶ月29日になります。
それとも同月の同日(3月29日)が基準ですか。
Last edited by Shin (2018-03-05 11:14:57)
Offline
> YM1 = Year ( d1 ) * 12 + Month ( d1 ) + Day ( d1 ) / 100 ;
> YM0 = Year ( d0 ) * 12 + Month ( d0 ) + Day ( d0 ) / 100 ;
これは、「日」を使いませんから
YM1 = Year ( d1 ) * 12 + Month ( d1 ) ;
YM0 = Year ( d0 ) * 12 + Month ( d0 ) ;
でいいでしょう
> m = If ( Day ( d0 ) > Day ( d1 ) ;Int ( YM1 - YM0 ) - 1 )
条件が偽の場合、値を返していませんよ
m = YM1 - YM0 - ( Day ( d0 ) > Day ( d1 ) )
でいいですね。
d0の月末は
Date ( Month ( d0 ) + 1 ; 0 ; Year ( d0 ) )
で求められます。
d = Case ( Day ( d0 ) <= Day ( d1 ) ; Day ( d1 ) - Day ( d0 ) ; ( Date ( Month ( d0 ) + 1 ; 0 ; Year ( d0 ) ) - d0 ) + Day ( d1 ) )
でいいでしょう。
Offline
Shin様
ご返信ありがとうございます。
1ヶ月は何日で判断するのかということですよね
私の設定が甘かったようで大変失礼致しました。
どのように設定するのが適切なのか判断しかねるところですが、満了日が3月28日の場合で本日の日付が1月29日の場合だと、1月は残り2日で、2月と3月はそれぞれ1ヶ月とした考え方もできますか?
ちなみにですが、1ヶ月の扱いが不明瞭な場合残り〇日のみで表示した方が簡単になりますでしょうか?
1ヶ月の扱いが人によって違うとなると、運用するときに不便になりそうな気がしてきまして
Offline
チポ様
ご返信ありがとうございます。
上記内容にありますようにShin様のご指摘で1ヶ月の扱いに関してなかなか一般的なものがなさそうと気づき、苦慮している次第であります
なので〇ヶ月の表示をやめて〇日のみのものも検討していこうと思っております。
私の方でも計算式の見直しを検討していく所存ではありますが、何かアドバイス等ございましたら、ご教授お願い致します。
Offline
どのように設定するのが適切なのかは、運用者が決めればいい事です。それを、運用の中と契約の中に組み込みます。その意味で、
> 満了日が3月28日の場合で本日の日付が1月29日の場合だと、1月は残り2日で、2月と3月はそれぞれ1ヶ月とした考え方もできますか?
でもいいと思いますが、3月は28日ですので、足して1ヶ月30日になるのでしょね。
Let (
[
D0 = Min ( 満了日 ; 登録日 ) ;
D1 = Max ( 満了日 ; 登録日 ) ;
YM0 = Year ( D0 ) * 12 + Month ( D0 ) ;
YM1 = Year ( D1 ) * 12 + Month ( D1 ) ;
d00 = Day ( Date ( Month ( D0 ) + 1 ; 0 ; Year ( D0 ) ) ) ;
d = Mod ( d00 - Day ( D0 ) + Day ( D1 ) ; d00 ) ;
ym = YM1 - YM0 - 1 + Div ( d00 - Day ( D0 ) + Day ( D1 ) ; d00 ) ;
y = Div ( ym ; 12 ) ;
m = Mod ( ym ; 12 )
] ;
Case ( y ; y & "年" ) & Case ( m ; m & "ヶ月" ) & Case ( d ; d & "日" )
)
Last edited by Shin (2018-03-05 15:37:42)
Offline
Shin様、チポ様
お二方の回答をよく読んで再度勉強させていただきます。
動作の方は問題ありませんでした。
この度はありがとうございました。
Offline
チポさん
> YM1 = Year ( d1 ) * 12 + Month ( d1 ) + Day ( d1 ) / 100 ;
> YM0 = Year ( d0 ) * 12 + Month ( d0 ) + Day ( d0 ) / 100
> m = Int ( YM1 - YM0 ) ;
と、
> YM1 = Year ( d1 ) * 12 + Month ( d1 ) ;
> YM0 = Year ( d0 ) * 12 + Month ( d0 ) ;
> m = YM1 - YM0 - ( Day ( d0 ) > Day ( d1 ) )
は、同じ値を換えしますよ。好き好きですが、私は前者が好み。
Offline
また突っ込まれてしまった ^^;;
最後の投稿後気がついたんですが、、
最初に「なんじゃ?」と思ってそのままきてしまいました。
わざわざ式を訂正する必要はなかったですね -_-
Haruさんも言われてますが、
期間に「ヶ月」を入れようとするとその決め方にいろいろでてきますよね。
正確には、「日」として、
ヵ月○日が分かりやすい、と言うなら
およそ程度に考えた方がいいでしょうかね。
Offline
一番シビアに見ているのが小児科の先生かもしれませんね。
聞いた話では、だいたいですが、2ヶ月未満では日齢何日、それを過ぎると2歳くらいまでは年月齢で何歳何月、それ以降は年齢になるそうです。
銀行は、日割りで計算するので、締め日はありますが、月数は関係ない様です。
Offline
Pages: 1
[ Generated in 0.258 seconds, 9 queries executed - Memory usage: 592.48 KiB (Peak: 609.02 KiB) ]