みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
現在、設備台帳を作成しています。ソフトはFileMakerPro11です。
もともとはエクセルで作成していた物をFileMakerに移行しています。
製造年月から今日までの経過年数を〇〇年〇〇ヶ月という感じで表示させたいです。
ただ、元データの製造年月の表示が「20××年」という表示と、「20××年××月」という表示に分かれている状況です。
「20××年」と「20××年××月」の両方の入力形式でも、〇〇年〇〇ヶ月という形式で経過年数を表示させるような
計算式をご教授ください。
以上宜しくお願い致します。
※現在「製造年月」と「今日の日付」というフィールドがある状況です。
Offline
> 「20××年」
これをどう考えるか決めないと。
20xx年1月?
20xx年12月?
また、
「今日」
の月は、
「日」を考えずに単にその月を考えればいいのでしょうか?
Offline
> 「20××年」
これをどう考えるか決めないと。
20xx年1月?
20xx年12月?やはり「20xx年」表記のものはとりあえず20xx年1月とか適当な月を設定してやる必要があるのでしょうか?
また、
「今日」
の月は、
「日」を考えずに単にその月を考えればいいのでしょうか?
基準となる「製造年月」が「20××年××月」という表示なので、「今日」の「日」は考えずに単にその月を
考えるだけで構いません。
以上よろしくお願いいたします。
Offline
> > 「20××年」
これへの回答がありませんが、、
年 * 12 + 月
これを求めて、それで減算し、
その解から、
年 = Int ( 解 / 12 )
月 = Mod ( 解 ; 12 )
と求められます。
Offline
製造「月」データがない場合は、便宜的に中間月=6と仮定した式例です。
Let([
#set=
Let([
#ym=Substitute(製造年月フィールド; ["年";¶];["月";¶]);
#y=GetValue(#ym; 1);
#m=GetValue(#ym; 2);
#m=Choose(IsEmpty(#m);#m; 6)
];
#y*12 + #m
);
#now=Year(Get(日付))*12 + Month(Get(日付));
#pas=#now - #set
];
Div(#pas; 12) & "年" & Mod(#pas; 12) & "月"
)
Offline
早速の回答ありがとうございます。
> > 「20××年」
これへの回答がありませんが、、
申し訳ございません。
ミスってしまいました。
やはり「20xx年」表記のものは、とりあえず20xx年1月とか適当な月を設定してやる必要があるのでしょうか?
またこの場合、フィールドはテキストで大丈夫でしょうか?
日付にした場合、20××年××月という表示が出来ませんでした。
月と同じように「20××年××月」という元データに対して、「20××年××月01日」のように適当な値を設定してやる必要があるのでしょうか?
> > 年 * 12 + 月
これを求めて、それで減算し、
その解から、
年 = Int ( 解 / 12 )
月 = Mod ( 解 ; 12 )
と求められます。
上記より、「経過月数」というフィールドを作成し、
=Year(今日の日付)-Year(製造年月)*12+Month(今日の日付)
という計算式を入力。
「経過年数」のフィールドに
= Date(Int ( 経過月数/ 12 ) & "年"; Mod ( 経過月数 ; 12 )& "ヵ月")
という計算式でよろしいでしょうか。
独学で軽く勉強した程度なのであいまいだと思いますが
アドバイスをお願いいたします。
Offline
製造「月」データがない場合は、便宜的に中間月=6と仮定した式例です。
Let([
#set=
Let([
#ym=Substitute(製造年月フィールド; ["年";¶];["月";¶]);
#y=GetValue(#ym; 1);
#m=GetValue(#ym; 2);
#m=Choose(IsEmpty(#m);#m; 6)
];
#y*12 + #m
);
#now=Year(Get(日付))*12 + Month(Get(日付));
#pas=#now - #set
];
Div(#pas; 12) & "年" & Mod(#pas; 12) & "月"
)
ありがとうございます。
早速試してみます。
Offline
製造「月」データがない場合は、便宜的に中間月=6と仮定した式例です。
Let([
#set=
Let([
#ym=Substitute(製造年月フィールド; ["年";¶];["月";¶]);
#y=GetValue(#ym; 1);
#m=GetValue(#ym; 2);
#m=Choose(IsEmpty(#m);#m; 6)
];
#y*12 + #m
);
#now=Year(Get(日付))*12 + Month(Get(日付));
#pas=#now - #set
];
Div(#pas; 12) & "年" & Mod(#pas; 12) & "月"
)
ありがとうございました。
要望通りの動きになりました。
Hiro様、大変感謝いたします。
Offline
Hiro wrote:製造「月」データがない場合は、便宜的に中間月=6と仮定した式例です。
Let([
#set=
Let([
#ym=Substitute(製造年月フィールド; ["年";¶];["月";¶]);
#y=GetValue(#ym; 1);
#m=GetValue(#ym; 2);
#m=Choose(IsEmpty(#m);#m; 6)
];
#y*12 + #m
);
#now=Year(Get(日付))*12 + Month(Get(日付));
#pas=#now - #set
];
Div(#pas; 12) & "年" & Mod(#pas; 12) & "月"
)ありがとうございました。
要望通りの動きになりました。
Hiro様、大変感謝いたします。
先ほどはありがとうございました。
おかげさまで希望通りのDBに近づくことができました。
もう少しだけ質問があります。
先ほどの計算式を入力した場合に、新しいレコードを作成すると、製造年月フィールドは空欄なのに
「経過年数」というフィールドに「2017年2ヶ月」と表示されてしまいます。
これを修正したいです。
製造年月フィールドが空欄ならば、先ほどの計算式を行わずに「経過年数」フィールドを空欄に保ちたいです。
製造年月フィールドに入力されたときにはじめて計算されて、「経過年数」フィールドに計算により導かれた答えが
出力されるようにできないでしょうか?
ちなみに、計算式の指定ウインドウの(式内の全フィールドの値が空欄の時、計算しない)チェックボックスにチェックを入れてもやはり計算されてしまいます。
ご教授の程、宜しくお願い致します。
Offline
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 527.73 KiB (Peak: 548.27 KiB) ]