初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2013-12-24 01:03:27

Gajiro
Member

入力方法について

FM11 Win7利用です。

西暦フィールドAで「1980」と入力すると、和暦フィールドBに自動で「S55」と表示し、
和暦フィールドBで「S55」と入力すると、西暦フィールドAに自動で「1980」と表示される方法を教えてください。

よろしくお願い致します。

Offline

#2 2013-12-24 09:42:51

typist
Guest

Re: 入力方法について

年でなく日付にすれば?

#3 2013-12-25 16:31:44

チポ
Member

Re: 入力方法について

入力値の自動化・計算・既存値置換え

西暦→和暦
  Case ( 西暦 >= 1989 ; "H" & 西暦 - 1988 ;
      西暦 >= 1926 ; "S" & 西暦 - 1925 ;
      西暦 >= 1912 ; "T" & 西暦 - 1911
     )

和暦→西暦
   Case ( PatternCount (和暦 ; "T") ; 1911 + GetAsNumber ( 和暦 ) ;
        PatternCount (和暦 ; "S") ; 1925 + GetAsNumber ( 和暦 ) ;
        PatternCount (和暦 ; "H") ; 1988 + GetAsNumber ( 和暦 )
      )

これでいいかな。。

Offline

#4 2013-12-26 09:46:51

Gajiro
Member

Re: 入力方法について

チポさま

ありがとうございます。
上記の物で計算式は問題なさそうですが、
どちらも既存値がある場合でも計算結果を反映させることは出来ますか?

例)
和暦が空白の時、西暦が1980と入力すると和暦がS55と入力されたあと、
和暦をS54に変更したら西暦が1979と変更される

西暦が空白の時、和暦S55と入力すると西暦が1980と入力されたあと、
西暦を1979に変更したら和暦がS54と変更される

どっちかはできるのですが、どっちもの条件を満たすにはどのようにしたら出来ますかね?

Offline

#5 2013-12-26 09:48:48

Gajiro
Member

Re: 入力方法について

typist さま
ありがとうございます。

今回は西暦、和暦、月、日とフィールドを全て分けたいので

Offline

#6 2013-12-26 10:23:55

チポ
Member

Re: 入力方法について

ああ、だめでした

両方でループ状になっちゃうようで、
いろいろ試しましたがうまく行きません。


苦し紛れで、、
スクリプトでフィールド設定して、
スクリプトトリガ OnObjectExit で実行。

これで出来ました。


いい加減なレスはだめですね、
申し訳有りません-_-

Offline

#7 2013-12-26 10:31:00

himaganee
Guest

Re: 入力方法について

和暦(テキスト)の
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は空欄時の処理ですが。

#8 2013-12-26 10:38:00

himaganee
Guest

Re: 入力方法について

わあ失敗。Selfだけでやろうとして月日に入れた時におかしくなってました。
アクティブフィールドが「和暦」の時にだけ「西暦」を再計算する、などのようにしないとだめです。

#9 2013-12-26 11:03:58

himaganee
Guest

Re: 入力方法について

何度もすみません。
和暦は、そこへ入力した時だけそのままにする
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になる、等で大丈夫と思います。

#10 2013-12-26 11:45:16

Traveller
Guest

Re: 入力方法について

例えば西暦フィールドにExitトリガを付けて、チポさんの式の西暦→和暦を変数$和暦に入れて
和暦フィールドを$和暦でフィールド設定する。とか・・・

#11 2013-12-26 11:48:25

Traveller
Guest

Re: 入力方法について

あっ、日付で西暦も連動しないといけないのか・・・没

#12 2013-12-26 11:52:57

Traveller
Guest

Re: 入力方法について

うっ#10は変数使うまでも無いのか・・・トリプル没

#13 2013-12-26 14:20:24

Shin
Member

Re: 入力方法について

日付は、日付として扱ったほうがいいですよ。ファイルの構造変更をお勧めします。
その上で、トリガーまで使ってちょっと大げさかもしれませんが、このような動きが作れます。
https://dl.dropboxusercontent.com/u/926 … 86.fp7.zip

年だけを変更してしまうと、2月29日が困ることになります。

Offline

#14 2013-12-27 01:03:34

Gajiro
Member

Re: 入力方法について

チポさま 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

#15 2013-12-27 14:45:10

Shin
Member

Re: 入力方法について

今の日付フィールドから、計算フィールドでそれらのフィールドを取り出しておけばいいのでは。

ちなみに、今のファイルでは、表示形式でそれらのデータを表示していますが、計算フィールドでも同じことができます。

年齢を求めるためには、どちらにしても年月日に変換する必要がありますので、構成を考えなおしたほうがいいですよ。

Offline

#16 2013-12-27 15:07:38

himaganee
Guest

Re: 入力方法について

月日がない日付を含めた管理かなと思ったんだけど、そうではないのかな。

年齢は、全然別なので新規にした方がいいと思ったけど
Let(N=Get ( ホストのタイムスタンプ );
Int(Year(N)+Month(N)/100+Day(N)/10000 - 西暦-月/100-日/10000 )
)

#17 2013-12-27 23:17:13

Shin
Member

Re: 入力方法について

年月日で矛盾が出る可能性もあり、別フィールドで入力させるのは、そのチェックが面倒じゃないですか。
ちょっとだけ変更したファイルに入れ替えています。これなら目的に合うのでは。

Offline

#18 2013-12-28 23:03:58

Gajiro
Member

Re: 入力方法について

himaganeeさま Shinさま
ありがとうございます。

>Let(N=Get ( ホストのタイムスタンプ );
Int(Year(N)+Month(N)/100+Day(N)/10000 - 西暦-月/100-日/10000 )
)
でとりあえずいけそうなのですが、
この計算式だと、誕生日が来ても年齢が更新されないです。
出来れば自動で更新されてくれるとありがたいです。
難しそうでしょうか?


Shinさまがおっしゃる"矛盾"というのはどういったことでしょうか?

>ちょっとだけ変更したファイルに入れ替えています。
とは?

よろしくお願い致します。

Offline

#19 2013-12-29 00:44:34

Shin
Member

Re: 入力方法について

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

#20 2014-01-03 03:03:51

Gajiro
Member

Re: 入力方法について

ありがとうございます。

出来ました!

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 623.05 KiB (Peak: 639.95 KiB) ]