数字だけで日付を入力する

こちらは「数字だけで日付入力したい場合」のお話です。

以前書かせていただいた「数字だけで時刻入力させたい場合」の記事が意外と好評で、
その後たびたび「年月はできないの?」というご質問をお受けしました。
「年月は(私には…かもしれないのですが)できない」のです…計算式を仕込むだけでは…。

日付タイプのフィールドの場合、
入力した時点で日付として認識できない値は通らないようで、
日付フィールドのエラーが先に返ってきてどうしようもないんです。。。
が、
計算式で数字を日付に変換するスクリプトをスクリプトトリガで設定するとできます。

-------------------
スクリプト名「FieldSet_日付変換4or8_Ftrg」
-------------------
#設定:変換したい日付フィールドに
   スクリプトトリガ「OnObjectValidate」としてこのスクリプトを設定。
#目的:数字で入力された値を日付に変換。月日入力の場合は当年を年に設定。
   入力は8桁または4桁数字入力後、スクリプトトリガでyyyy/mm/ddに変換。
#条件:FM12以降(11以前のバージョンでは未確認)
#
エラー処理 [ オン ]
変数を設定 [ $Str; 値:Get ( アクティブフィールド内容 ) ]
変数を設定 [ $FieldName; 値:Get ( アクティブフィールドテーブル名 ) & "::" & Get ( アクティブフィールド名 ) ]
If [ IsEmpty ( $Str ) ]
 #空欄の場合
 フィールドを名前で設定 [ $FieldName; GetAsDate ( "" ) ]
 現在のスクリプト終了 [ 結果: 0 ]
Else If [ PatternCount ( $Str ; "/" ) = 1 or PatternCount ( $Str ; "/" ) = 2 ]
 #日付指定している場合
Else If [ Length ( $Str ) = 4 or Length ( $Str ) = 8 ]
 #4桁、8桁の場合
 変数を設定 [ $Year; 値:Case (Length ( $Str ) = 4 ; Year ( Get ( 日付 ) ) ; Length ( $Str ) = 8 ; Left ( $Str ; 4 ) ;"" ) ]
 変数を設定 [ $Month; 値:Case (Length ( $Str ) = 4 ; Left ( $Str ; 2 ) ; Length ( $Str ) = 8 ;Middle ( $Str ; 5 ; 2 ) ; "" ) ]
 変数を設定 [ $Day; 値:Case (Length ( $Str ) = 4 ; Right ( $Str ; 2 ) ; Length ( $Str ) = 8 ;Middle ( $Str ; 7 ; 2 ) ; "" ) ]
 フィールドを名前で設定 [ $FieldName; Date ( $Month ; $Day ; $Year ) ]
 If [ $Year = "0000" or $Year > 4001 ]
  フィールドを名前で設定 [ $FieldName; GetAsDate ( "" ) ]
  カスタムダイアログを表示 [ タイトル: "日付入力"; メッセージ: "FileMakerでは設定できない日付です";
               デフォルトボタン:  「OK」, 確定: 「はい」 ]
  現在のスクリプト終了 [ 結果: 0 ]
 Else If [ ($Year = 4000 and $Month > 12) or
     ($Year = 4000 and $Month = 12 and $Day > 31) ]
  フィールドを名前で設定 [ $FieldName; GetAsDate ( "" ) ]
  カスタムダイアログを表示 [ タイトル: "日付入力"; メッセージ: "FileMakerでは設定できない日付です";
               デフォルトボタン:  「OK」, 確定: 「はい」 ]
  現在のスクリプト終了 [ 結果: 0 ]
 End If
Else
 カスタムダイアログを表示 [ タイトル: "日付入力"; メッセージ: "数字だけで指定する場合は、
              ¶4桁または8桁で指定してくだ さい";
              デフォルトボタン: 「OK」, 確定: 「はい」 ]
 現在のスクリプト終了 [ 結果: 0 ]
End If
-------------------

ここでは閏年の29日や4月など31日のない月に31日を指定した場合、
「翌月の1日が表示され」、
4月35日を指定した場合は「5月5日が表示される」という簡易版を使っていますが、
エラーケースをいくつか加えれば
「存在しない日付を指定した場合はエラーを返す」ということもできます。
(ここではご紹介しませんが…)

こんな感じで作ってみました。
ちょっと作りが甘いです。
スラッシュで日付入力をした場合はそのまま受け入れちゃうけどピリオドの場合は通らない…
(区切りがピリオドの場合などにも対応できるよう、
 文字の置き換えなどを入れればいいのでしょうが、今回はなるべくシンプルに…)

でもまぁそれほど問題なく使えてます。私が使ってる分には…
と言いながら…
実のところお客様に納品させていただくシステムには使っていません。
FileMakerのドロップダウンカレンダーもあるし、
テンキーでの数字入力に慣れている方はスラッシュの入力にも慣れている方が多く、
テンキーがないキーボードからの入力をご希望の場合にのみ有効な気がしてしまって…^^;

それと、あまり使っていない理由の一つとして、
ここ数年、私の作らせていただくシステムの基本姿勢は
「FileMakerの持っている基本的な機能はできる限りそのまま使っていただけるように作る」
というのがあって、ドロップダウンカレンダーもその一つ。
とても簡単に便利な入力方法が備わっているので、
できる限り使いこなしていただければと思っていたりもするのです。

毎回のことで申し訳ございませんが、、、

今回もご紹介した内容についてのご質問などはお受けしておりません<(_ _)>
また、お試しになる場合は、ご自身の責任でお試しくださいますようお願いいたします。

それと、相変わらず打たれ弱いので、ツッコミなどはこっそりメールでお願いします。

今回もおつきあいくださいましてありがとうございました。
どなたかのお役に立つことができればうれしいです(^^)

//---追記---//
この記事は、旧ブログに掲載した記事なのですが、
思ったよりも使えると思ってくださる方が多かったので、
こちらのブログにも計算式や使い方などを掲載させていただくことにしました。


投稿者