みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
下のカスタム関数式をファイルメーカーのカスタム関数サイトから入手したのですが、早生まれの生年月日の子供の学年齢がうまく反映されません(一つ下の学年として表示されてしまいます)
どなたか修繕ポイントを教えていただければ幸いです。宜しくお願いします。
Let ( [
A = Right ( Month ( 生年月日 ) ; 2 ) ;
B = Right ( Day ( 生年月日 ) ; 2 ) ;
C = A & B ;
D = Year ( Get ( 日付 ) ) - Year ( 生年月日 ) ;
E = If ( C ≤ "0402" ; D ; D - 1 )] ;
Case (
E = 6 ; "小1" ;
E = 7 ; "小2" ;
E = 8 ; "小3" ;
E = 9 ; "小4" ;
E = 10 ; "小5" ;
E = 11 ; "小6" ;
E = 12 ; "中1" ;
"" ) )
Offline
If ( C ≤ "0402" ; D ; D - 1 )
不等号の向きが逆では。
また、
A = Right ( Month ( 生年月日 ) ; 2 ) ;
B = Right ( Day ( 生年月日 ) ; 2 ) ;
二桁で返ることを期待しているのでしょうが、
そうとは限りませんよ。
Offline
あー!
Get( 日付 )
を使っているから、
今日が4月1日以降か否か
の調整も必要ですね。
Offline
ああ、
間違っています。
不等号の向きは有っていましたね。
2桁と、本日の問題でしょう。
Offline
添削すると
Let ( [
A = Month ( 生年月日 ) ;
B = Right ( "0" & Day ( 生年月日 ) ; 2 ) ;
C = GetAsNumber ( A & B ) ;
D = Year ( Get ( 日付 ) ) - Year ( 生年月日 ) ;
E = If ( C ≤ 401 ; D ; D - 1 )] ;
Case (
E = 6 ; "小1" ;
E = 7 ; "小2" ;
E = 8 ; "小3" ;
E = 9 ; "小4" ;
E = 10 ; "小5" ;
E = 11 ; "小6" ;
E = 12 ; "中1" ;
"" ) )
一行で済むから以下の式のが良いかも。ただし小学校の学年を数字で表示する式なので、中一は 7 と表示されます。
Year( Get ( 日付 ) + 274 ) - Year( 生年月日 + 274 ) - 6
どちらの式でも Get ( 日付 ) を新学期(正確には4月2日)以降に更新する仕組みを別に用意する必要があります。
>チポさん、AQLさん
アドバイスありがとうございます。参考させてもらって自分なりに試行錯誤したら、
Let ( [
A = Right ( Month ( 生年月日 ) ; 2 ) ;
B = Right ( "0" & Day ( 生年月日 ) ; 2 ) ;
C = GetAsNumber ( A & B ) ;
D = Year ( Get ( 日付 ) + 274 ) - Year ( 生年月日 + 274 ) ;
E = If ( C ≤ "0402" ; D ; D - 1 )] ;
Case (
E = 6 ; "小1" ;
E = 7 ; "小2" ;
E = 8 ; "小3" ;
・・・
で早生まれも正しい学年齢で表示されているようですが、なにか誤りか二重になっている式てありますか?
Offline
前レスでも書いた通り、
A = Right ( Month ( 生年月日 ) ; 2 ) ;
B = Right ( "0" & Day ( 生年月日 ) ; 2 ) ;
C = GetAsNumber ( A & B )
Aの Right関数 は意味が有りません。
Cは
Month ( 生年月日 ) * 100 + Day ( 生年月日 )
で求められます。
Cは数値になりますから
C ≤ "0402"
これは
C ≤ 402
でいいですね。
しかし、早生まれは
4月1日以前ですから、
C ≤ 401
でしょう。
学年を求めるのは
Choose ( E - 6 ; "小1" ; "小2" ; "小3" ;・・・)
こちらの方が簡単かな。
その他の
式の全体のロジックは面倒な考え方ですけど、いい様ですね。
Offline
Let 関数の練習をしてみたけど検証してません、みたいな式でしたね。
書き忘れましたけど、私の二番目の式は4年分の全日付で検証済み
かつ、教えた小学校の先生から10年くらい不具合の報告はありません。
関数の練習に意味を考えるのも良いと思います。
>チポさん、AQLさん
アドバイスありがとうございます。
チポさんの
A = Right ( Month ( 生年月日 ) ; 2 ) ;
B = Right ( "0" & Day ( 生年月日 ) ; 2 ) ;
C = GetAsNumber ( A & B )
Aの Right関数 は意味が有りません。
Cは
Month ( 生年月日 ) * 100 + Day ( 生年月日 )
で求められます。
理解できました。ありがとうございます。その方法でやってみます。4月1日も早生まれとしてカウントされるようで、
ちなみに、学年齢が「0歳児」から「大学4年」まで必要です。その場合は、
Case()で大丈夫ですか?
Offline
Case
でももちろんいいんですが、
Choose ( E ; "0歳児" ; "1歳児" ; ・・・ ; "小1" ; ・・・; "大学4年" ; "「それ以上」" )
こちらの方が簡単でしょう。
Offline
>チポさん
ありがとうございます。早速トライしてみます!
Offline
皆さんのアドバイスのおかげで、無事に学年齢を計算することができました。式はカスタム関数で以下になりました。
Let ( [
A = Month ( 生年月日 ) * 100 + Day ( 生年月日 ) ;
B = Year ( Get ( 日付 ) ) - Year ( 生年月日 ) ;
C = If ( B ≤ "0402" ; D ; D - 1 )] ;
Choose ( E ; "0歳児" ; "1歳児" ; ・・・ ; "小1" ; ・・・; "大学4年" ; "「それ以上」" ) )
フィールド「学年齢」に計算式に入れています。
ここで質問ですが、カスタム関数が入った学年齢から特定の学年を抽出したいと思って変数を使ったスクリプト作成したいです。
ボタンに割り当てて(ボタンのスクリプト引数にカスタム関数で割り出す「学年齢」の値)検索して抽出したいと思っているのですが、なかなかうまくいきません。
試しに検索モードで「学年齢」に ”=小1”と入れると検索できず、演算子を入れないで”小1”と入れると、
1才、小1、中1・・・
と選ばれてしまいます。
これはカスタム関数を使っているからですか?
どなたかご教授いただければ幸いです。
Offline
検索モードで「学年齢」に ”=小1”と入れると検索できず
検索できず
が分りませんが、、
フィールドが数字タイプになっていませんか?
Last edited by チポ (2015-07-03 13:08:44)
Offline
>チポさん
あ、確かにフィールドが数字タイプになっていました。初歩的なミス申し訳ないです。試しに指定のレイアウトで検索モードにして、=="小1"で検索をかけたところ無事に抽出されました。
いつもありがとうございます!
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 532.8 KiB (Peak: 553.34 KiB) ]