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

 「/」という区切り記号をいちいち入力せず、数字だけで日付を入力できるようにする設定です。
 方法は簡単で、定型入力であっさりと実現できます。定型入力ウイザードにも候補として出てくるのですが郵便番号の場合と違ってあまり使われていないような気がします。ちょっとした盲点かもしれません。

フィールドが日付型の場合

f:id:accs2014:20180917005248p:plain:right:w400

 定型入力プロパティに次のように入力します。

0000/00/00


f:id:accs2014:20180917005246p:plain:right:w500

 これで「/」は最初から所定の位置に置かれ、あとは数字を入力していくだけとなります。


フィールドがテキスト型の場合

f:id:accs2014:20180917005244p:plain:right:w400

 フィールドがテキスト型の場合は少々注意が必要です。
 入力時には「1972/01/19」のように「/」も込みで記録されているように見えて、実際はそうではない場合があるからです。

「/」込みで記録する場合

 「/」を文字列の一部として記録する場合、定型入力プロパティに次のように入力します。

0000/00/00;0

 「;0」の部分を追加することにより、「/」が文字列の一部として記録されるようになります。


f:id:accs2014:20180917005242p:plain:right:w500

 これにより見たままの値が記録されます。


f:id:accs2014:20180917005239p:plain:right:w550

 実際に「/」込みで記録されていることを確認するため、クエリでYear関数を用いて、生年月日列の「年」を抽出してみます。


f:id:accs2014:20180917005517p:plain:right:w450

 正しく抽出されています。

 なお、この定型入力の設定だけだと「2016/99/99」といった「日付としておかしい値」が記録されることは防げません。
 日付として適当な値かどうかをチェックする場合は、さらに上記の設定画面の「入力規則」欄(定型入力欄の3つ下)に次のように入力してください。

IsDate([生年月日])=True


「/」を含めず記録する場合

f:id:accs2014:20180917005515p:plain:right:w400

 「/」を表示しつつ、値としては含めずに記録する場合です。結果的に「19720119」といった値が記録されますので、計算に活用する場合はFormat関数やMid関数などを用いて加工することとなります。
 設定ですが、定型入力欄に次のように入力します。

0000/00/00

 入力中の画像は省略しますが、同じように「/」が表示されるので一緒に入力されているように見えます。しかし…


f:id:accs2014:20180917005513p:plain:right:w550

 同じように関数を用いてみると…


f:id:accs2014:20180917005511p:plain:right:w450

 エラーとなります。
 実際に記録されている値は「19720119」のように「/」抜きとなっていて、日付とはみなされない文字列であるためこうなります。

 なお、この定型入力の設定だけだとやはり「20169999」といった「日付としておかしい値」が記録されることは防げません。
 日付として適当な値かどうかをチェックする場合は、さらに上記の設定画面の「入力規則」欄(定型入力欄の3つ下)に次のように入力してください。ここでの「\」は省略できません。

IsDate(Format([日付],"0000\/00\/00"))=True

※バックスラッシュは「\」を表しています。


備考

 上記の例では「0000/00/00」といった設定値を用いていますが、本来は「\」(次の1文字(/)をそのまま表示させるための記号)を含めて「0000\/00\/00」とした方が適切かと思います。ただし上記の例ではなくても問題ないので省略しました。
 また、日付型の場合は区切り記号として「/」しか使えず、「0000\-00\-00」(この場合は「\」の省略不可)などとしても入力時にエラーとなります。テキスト型の場合は「0000\-00\-00;0」とすれば「2016-09-15」のような文字列として問題なく記録されます。これは日付とみなされる文字列ですので、上記の例のように関数で扱うこともできます。

 なお、定型入力の詳細については次の記事を併せて参照ください。

www.accessdbstudy.net