みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
フィールドA、B、C、Dと4つあります。すべて日付が入力できるようになっております。
フィールドAには必ず日付が入力されています。
フィールドBに日付がある場合はAより後の日付でCにも日付が入力されています。
その場合はBより後の日付です。
フィールドDに日付が入力されている場合はABC全部に日付が入力されていて
日付は 過去 A → B → C → D 未来
の順になっております。
フィールドEに年数を自動計算で入れたいのですが計算式を教えてください。
BCDが未入力の場合は、Aから現在まで
ABCが入力されている場合はAからBまでの年数プラスCから現在までの年数
ABCDが入力されている場合はAからBまでの年数プラスCからDまでの年数
仮にAからBが3年11か月、CからDが2年2か月の場合はEには6年としたいです。
よろしくお願いします。
AとBのみに入力の場合は?
また、
> 仮にAからBが3年11か月、CからDが2年2か月の場合はEには6年
二つの期間の和 - ひと月
ということ?
「日」の大小はどう考えます?
Offline
>AとBのみに入力の場合は?
その場合はAからBの期間でお願いします。
>二つの期間の和 - ひと月
>ということ?
>「日」の大小はどう考えます?
日はすべて切り捨てでお願いしたいです。
よろしくお願いいたします。
Let (
[
YMa = Year ( A ) * 12 + Month ( A ) ;
bb = Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) ;
YMb = Year ( bb ) * 12 + Month ( bb ) ;
YMc = Year ( C ) * 12 + Month ( C ) ;
dd = Case ( IsEmpty ( C ) ; "" ; IsEmpty ( D ) ; Get ( 日付 ) ; D ) ;
YMd = Year ( dd ) * 12 + Month ( dd ) ;
du = YMb - YMa + YMd - YMc
] ;
Div ( du ; 12 ) & "年" & Mod ( du ; 12 ) & "月"
)
月数の数え方で小さな修正が必要になるかも。
Last edited by Shin (2020-12-11 08:52:05)
Offline
ご回答ありがとうございます。
ちなみに今ファイルメーカー Pro 5.0 でやっているのですが
古すぎてうまくいきません。
よろしくお願いします。
考え方は
Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case ( IsEmpty ( D ) ; Get ( 日付 ) ; D ) - C ; 0 )
これでいいでしょう。
実際には、A,B,C.Dはそのままの日付ではなく、
年 * 12 + 月
とした方がいいでしょう。
こうして得られる値は期間の月数です。
ひと月の補正が必要なら、-1を加えます。
FM5!!
20年以上前でしょうね。。
OSとのマッチングは大丈夫でしょうか?
Offline
最初のGet (でエラーがでてしまいます。
>実際には、A,B,C.Dはそのままの日付ではなく、
>年 * 12 + 月
>とした方がいいでしょう。
どういう意味でしょうか?
無知ですいません。
FM5はwin10でも問題なく使えています。
そこまで知識がないのでFM5で困っていないのが現状です。
ああ、、、
Get ( 日付 )
に変えて
Today
か
Status ( 日付 )
のどちらかが使えるはずです。
・・記憶が定かではない・・
> 年 * 12 + 月
フィールドAを例にすると
Year ( A ) * 12 + Month ( A )
とします。
これは月ごとに1ずつ増えるシリアル値になり、
年をまたいでも連続します。
Win10でか、、
あまり信用しない方がいいと思いますよ。。
Offline
Case ( IsEmpty ( B ) ; Today ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case ( IsEmpty ( D ) ; Today ; D ) - C ; 0 )
Case ( IsEmpty ( B ) ; Status ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case ( IsEmpty ( D ) ; Status ( 日付 ) ; D ) - C ; 0 )
これではやはりエラーになってしまいます。
上の式ですと Today ; B
下の式ですと Status (
でエラーになります。
> 年 * 12 + 月
>フィールドAを例にすると
>Year ( A ) * 12 + Month ( A )
フィールドA,B,C,Dは日付をいれているので
そこからそれぞれ計算のフィールドを作成した方がよろしいでしょうか?
よろしくお願いいたします。
ああ、まだ間違っていました。。。
> Case ( IsEmpty ( B ) ; Today ; B ) - A
↑
このセミコロンを全て「,」カンマに変えてください
6か8で変わったんだたかな・・
日付からの変換はフィールドにしてもいいですし、
式の中で計算してもいいです。
やりやすい方でお試しください。
Offline
なかなかうまくいきません。
やはり古いのが原因なんですかね?
Case ( IsEmpty ( B ) , Today , B ) - A + ( Case ( not IsEmpty ( C ) , Case ( IsEmpty ( D ) , Today , D ) - C , 0 )
ですと)が足りないみたいです。
またフィールドAが2020/08/01で
Year ( A ) * 12 + Month ( A )
の計算をすると
24248
でいいんでしょうか?
ごめんなさい、最後が足りていませんでした。
Case ( IsEmpty ( B ) ; Get ( 日付 ) ; B ) - A + ( Case ( not IsEmpty ( C ) ; Case ( IsEmpty ( D ) ; Get ( 日付 ) ; D ) - C ; 0 ) )
2020/08/01は
2020 * 12 + 8 = 24248
で合っていますね。
ちょっと見た目では意味が分からない数字ですが、
これで連続した値になり計算には都合がいいんです。
Offline
フィールドA、B、C、DをそれぞれフィールドAA、BB、CC、DDに変更し
それぞれをYear ( AA ) * 12 + Month ( AA )
にてフィールドA、B、C、Dを作成しました。
そこで
Case( IsEmpty( B ) , Today, B ) - A + ( Case( not IsEmpty( C ) , Case( IsEmpty( D ) , Today, D ) - C , 0 ))
をしたところ
フィールドAAに2019/8/1と入力したところ
結果が713534とでてしまいます。
1年もしくは1と出てほしいのですがどこが間違えていますか?
Today
も他と同様に年月に変えないとダメでしょう。
Offline
>Today
>も他と同様に年月に変えないとダメでしょう。
どのようにしたらいいのですか?
前と全く同じ考えでいいんですよ
Year ( Today ) * 12 + Month ( Today )
Offline
Case( IsEmpty( Year ( B ) * 12 + Month ( B ) ) , Year ( Today ) * 12 + Month ( Today ), Year ( B ) * 12 + Month ( B ) ) - Year ( A ) * 12 + Month ( A ) + ( Case( not IsEmpty( Year ( C ) * 12 + Month ( C ) ) , Case( IsEmpty( Year ( D ) * 12 + Month ( D ) ) , Year ( Today ) * 12 + Month ( Today ), Year ( D ) * 12 + Month ( D ) ) - Year ( C ) * 12 + Month ( C ) , 0 ))
全部を1つにまとめるとこれであっていますか?
> Case( IsEmpty( Year ( B ) * 12 + Month ( B ) )・・・
この条件式は単に
IsEmpty ( B )
でいいでしょう。
以下同様です。
後はいい様ですね。。
Offline
式の途中で適当に改行して、わかりやすく書く習慣にしましょう。
ファイルが開きっぱなしの場合(サーバで共有しているとか)、Todayの計算は日付が変わっても更新されないので要注意。
Today関数はファイルが開かれるたびに評価されます。
Status ( 日付 )関数は、索引非保存にすれば毎日評価されます。
古い話しですが確かこれでいいかと。。
Offline
FM5.5 のマニュアルを確認しましたが、Case() は並べてかけますので、入れ子にしなくても大丈夫ですよ。
Case(
IsEmpty( B ) , Year ( Status( 日付 ) ) * 12 + Month ( Status( 日付 ) ),
Year ( B ) * 12 + Month ( B )
)
- Year ( A ) * 12 + Month ( A )
+ (
Case(
IsEmpty( C ) , Year ( C ) * 12 + Month ( C ) ;
IsEmpty( D ) , Year ( Status( 日付 ) ) * 12 + Month ( Status( 日付 ) ),
Year ( D ) * 12 + Month ( D )
)
- Year ( C ) * 12 + Month ( C )
でいいでしょう。
FM5 が Win10 で動くんですね。標準の機能を標準的に使っている優等生のプログラムということでしょうね。MacOS は、OS 側が機能を変化させてしまっているので、4世代前のバージョンは動きが怪しいです。
Offline
Pages: 1
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 557.18 KiB (Peak: 577.72 KiB) ]