みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM11 Win7利用です。
西暦フィールドAで「1980」と入力すると、和暦フィールドBに自動で「S55」と表示し、
和暦フィールドBで「S55」と入力すると、西暦フィールドAに自動で「1980」と表示される方法を教えてください。
よろしくお願い致します。
Offline
年でなく日付にすれば?
入力値の自動化・計算・既存値置換え
で
西暦→和暦
Case ( 西暦 >= 1989 ; "H" & 西暦 - 1988 ;
西暦 >= 1926 ; "S" & 西暦 - 1925 ;
西暦 >= 1912 ; "T" & 西暦 - 1911
)
和暦→西暦
Case ( PatternCount (和暦 ; "T") ; 1911 + GetAsNumber ( 和暦 ) ;
PatternCount (和暦 ; "S") ; 1925 + GetAsNumber ( 和暦 ) ;
PatternCount (和暦 ; "H") ; 1988 + GetAsNumber ( 和暦 )
)
これでいいかな。。
Offline
チポさま
ありがとうございます。
上記の物で計算式は問題なさそうですが、
どちらも既存値がある場合でも計算結果を反映させることは出来ますか?
例)
和暦が空白の時、西暦が1980と入力すると和暦がS55と入力されたあと、
和暦をS54に変更したら西暦が1979と変更される
西暦が空白の時、和暦S55と入力すると西暦が1980と入力されたあと、
西暦を1979に変更したら和暦がS54と変更される
どっちかはできるのですが、どっちもの条件を満たすにはどのようにしたら出来ますかね?
Offline
typist さま
ありがとうございます。
今回は西暦、和暦、月、日とフィールドを全て分けたいので
Offline
ああ、だめでした
両方でループ状になっちゃうようで、
いろいろ試しましたがうまく行きません。
苦し紛れで、、
スクリプトでフィールド設定して、
スクリプトトリガ OnObjectExit で実行。
これで出来ました。
いい加減なレスはだめですね、
申し訳有りません-_-
Offline
和暦(テキスト)の
Case ( Get ( アクティブフィールドテーブル名 ) & "::" & Get ( アクティブフィールド名 ) = GetFieldName ( Self ) ; Self ;
西暦 ; YearName ( Date ( Max ( 1 ; 月 ) ; Max ( 1 ; 日 ) ; Max ( 1 ; 西暦 ) ) ; 2 )
)
西暦(数字)は
Case ( Get ( アクティブフィールドテーブル名 ) & "::" & Get ( アクティブフィールド名 ) = GetFieldName ( Self ) ; Self ;
和暦 ; Year ( 和暦 & "/" & Max ( 1 ; 日 ) & "/" & Max ( 1 ; 月 ) )
)
改元年の場合は月日も反映されます。
Max ( 1 ; 西暦 )はやめて、フィールド値の制限でチェックした方がいいか...
月と日のMaxは空欄時の処理ですが。
わあ失敗。Selfだけでやろうとして月日に入れた時におかしくなってました。
アクティブフィールドが「和暦」の時にだけ「西暦」を再計算する、などのようにしないとだめです。
何度もすみません。
和暦は、そこへ入力した時だけそのままにする
Case ( Get ( アクティブフィールド名 ) = "和暦" ; Self ;
西暦 ; YearName ( Date ( Max ( 1 ; 月 ) ; Max ( 1 ; 日 ) ; Max ( 1 ; 西暦 ) ) ; 2 )
)
西暦は、和暦以外に入力した時はそのままにする
Case ( Get ( アクティブフィールド名 ) ≠ "和暦" ; Self ;
和暦 ; Year ( 和暦 & "/" & Max ( 1 ; 月 ) & "/" & Max ( 1 ; 日 ) )
)
これで、1989/1/1はS64だけど2月に変えるとH1になる、等で大丈夫と思います。
例えば西暦フィールドにExitトリガを付けて、チポさんの式の西暦→和暦を変数$和暦に入れて
和暦フィールドを$和暦でフィールド設定する。とか・・・
あっ、日付で西暦も連動しないといけないのか・・・没
うっ#10は変数使うまでも無いのか・・・トリプル没
日付は、日付として扱ったほうがいいですよ。ファイルの構造変更をお勧めします。
その上で、トリガーまで使ってちょっと大げさかもしれませんが、このような動きが作れます。
https://dl.dropboxusercontent.com/u/926 … 86.fp7.zip
年だけを変更してしまうと、2月29日が困ることになります。
Offline
チポさま himaganeeさま Travellerさま Shinさま
ありがとうございます。
Shinさま
今回は、「西暦」「和暦」「月」「日」とフィールドをわけたいというのがありまして、せっかく作って頂いたサンプルは私の思っていたのと少し違うなというのがあります。
でも、そういう考え方が全く思いつかなかったので、よいヒントになりました。
himaganee
>和暦は、そこへ入力した時だけそのままにする
Case ( Get ( アクティブフィールド名 ) = "和暦" ; Self ;
西暦 ; YearName ( Date ( Max ( 1 ; 月 ) ; Max ( 1 ; 日 ) ; Max ( 1 ; 西暦 ) ) ; 2 )
)
西暦は、和暦以外に入力した時はそのままにする
Case ( Get ( アクティブフィールド名 ) ≠ "和暦" ; Self ;
和暦 ; Year ( 和暦 & "/" & Max ( 1 ; 月 ) & "/" & Max ( 1 ; 日 ) )
でいけました!
ありがとうございます。
崩御の兼ね合いも細かく出来ていて感動です!
で、追加質問なのですが、
西暦、和暦、月、日フィールドの他に年齢フィールドを追加して
現在の日付(Get ( ホストのタイムスタンプ )に対して
現在の年齢を計算する方法を教えてください。
Offline
今の日付フィールドから、計算フィールドでそれらのフィールドを取り出しておけばいいのでは。
ちなみに、今のファイルでは、表示形式でそれらのデータを表示していますが、計算フィールドでも同じことができます。
年齢を求めるためには、どちらにしても年月日に変換する必要がありますので、構成を考えなおしたほうがいいですよ。
Offline
月日がない日付を含めた管理かなと思ったんだけど、そうではないのかな。
年齢は、全然別なので新規にした方がいいと思ったけど
Let(N=Get ( ホストのタイムスタンプ );
Int(Year(N)+Month(N)/100+Day(N)/10000 - 西暦-月/100-日/10000 )
)
年月日で矛盾が出る可能性もあり、別フィールドで入力させるのは、そのチェックが面倒じゃないですか。
ちょっとだけ変更したファイルに入れ替えています。これなら目的に合うのでは。
Offline
himaganeeさま Shinさま
ありがとうございます。
>Let(N=Get ( ホストのタイムスタンプ );
Int(Year(N)+Month(N)/100+Day(N)/10000 - 西暦-月/100-日/10000 )
)
でとりあえずいけそうなのですが、
この計算式だと、誕生日が来ても年齢が更新されないです。
出来れば自動で更新されてくれるとありがたいです。
難しそうでしょうか?
Shinさまがおっしゃる"矛盾"というのはどういったことでしょうか?
>ちょっとだけ変更したファイルに入れ替えています。
とは?
よろしくお願い致します。
Offline
2012/2/29 が設定してあって、年を2011へ変更されたらどうされるのですか。
また、1/31 で2月に変更されたら?? などこの動きは別フィールドで持たせると、日付データに持ってこないと非常に面倒でしょう。
ファイルの入れ替えは、上のリンクのファイルを新バージョンに入れ替えています。
https://dl.dropboxusercontent.com/u/926 … 86.fp7.zip
年齢の計算は、その式をもたせた計算フィールドを作り、結果を保存させずに、都度計算させればいいです。
Last edited by Shin (2013-12-30 12:14:18)
Offline
ありがとうございます。
出来ました!
Offline
Pages: 1
[ Generated in 0.009 seconds, 10 queries executed - Memory usage: 622.99 KiB (Peak: 639.9 KiB) ]