Accessのフォームに非連結のテキストボックスを追加して、そこに生年月日の日付から[DateDiff関数]を使って年齢を求めて表示します。Excelでは、簡単に求められることでも、Accessでは少し工夫しなければならないこともあります。
また、生年月日の書式を和暦表示にする方法や、生年月日を入力するときにミスなく入力できるようにする設定も解説します。
参考ここでは[ドキュメントウィンドウオプション]で[ウィンドウを重ねて表示する]を選択しています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
この記事の目次
テーブルの確認
フォームの元になるテーブルは、以下で作成したものと同じです。
以下の記事では、タブ付きフォームの作成方法を解説しています。
-
タブコントロールを使用したタブ付きフォームの作成
Accessでは、タブコントロールを使ってタブ付きのフォームを簡単に作成できます。 例えば、テーブルにフィールドが多く、それを1つのフォーム ...
[生年月日]のフィールドを追加します。データ型は、[日付/時刻型]です。
フォームに[生年月日]コントロールを追加
作成済みのフォームをデザインビューで開いて、[生年月日]コントロールを追加します。
[デザイン]タブの[ツール]グループにある[既存のフィールドの追加]をクリックして、[生年月日]をドラッグで追加します。
フォームビューに切り替えて、生年月日の書式を確認します。
日付の書式を変更
日付の書式を変更したい場合は、[生年月日]のテキストボックスを選択して、[デザイン]タブの[プロパティシート]をクリックして、プロパティを開きます。
プロパティは、[F4]キーを押しても表示できます。
[書式]タブの[書式]の▼ボタンをクリックすると、7つの選択肢がありますので、目的のものを選択します。
ここでは、[日付(L)]を選択します。
フォームビューに切り替えると、以下のように生年月日の書式が変更されたことが確認できます。
参考日付の書式は、テーブルで設定することもできます。先にテーブルで書式を設定してフォームを作成すると、テーブルの書式を継承しますが、フォームでは別の書式にすることもできます。
以下は、テーブルをデザインビューで開いて、[生年月日]フィールドを選択しています。フィールドプロパティの[書式]から設定できます。
日付の書式は、テーブルをデータシートビューに切り替えても変更できます。
日付の書式
日付の書式は、プルダウンメニューから選択できる書式以外に、以下の文字を使って指定することもできます。以下は、一部です。
文字 | 意味 | サンプル |
yyyy | 4ケタの西暦 | 2020 |
yy | 2ケタの西暦 | 20 |
ggg | 年号 | 令和 |
gg | 漢字一字の年号 | 令 |
e | 和暦 | 1 |
mm | 2ケタの月 | 05 |
m | 月 | 5 |
dd | 2ケタの日 | 07 |
d | 日 | 7 |
aaa | 曜日1文字 | 火 |
aaaa | 曜日 | 火曜日 |
非連結のテキストボックスに和暦を表示
例えばフォームに生年月日の和暦表示も追加したいのであれば、非連結のテキストボックスを追加して和暦を表示します。
[デザイン]タブの[コントロール]グループにある[テキストボックス]を選択して、[Ctrl]キーを押しながらドラッグします。
[テキストボックスウィザード]が表示されたら、[キャンセル]ボタンを押して閉じます。
参考[Ctrl]キーを押しながらドラッグすると、ラベルは挿入されず、テキストボックスのみが挿入されます。
テキストボックスを選択してプロパティを開きます。
[データ]タブの[コントロールソース]に[生年月日]を選択します。
[書式]タブの[書式]に以下のように入力します。入力するときは、\は省いても構いません。
ggge\年m\月d\日
フォームビューに切り替えると以下のように表示されます。
テキストボックスに年齢を表示
フォームのデザインビューに非連結のテキストボックスを表示します。
ここでは、ラベルも表示したいので、そのままドラッグします。
[テキストボックスウィザード]が表示されたら、[キャンセル]ボタンを押して閉じます。
ラベルは、[年齢]と表示します。
非連結のテキストボックスを選択して、プロパティの[データ]タブを表示します。
[コントロールソース]の[...]ボタンをクリックします。
以下のように式ビルダーが表示されます。
そして、以下の計算式を入力します。入力したら、[OK]ボタンをクリックします。
=DateDiff("yyyy",[生年月日],Date())-IIf(DateSerial(Year(Date()),Month([生年月日]),Day([生年月日]))>Date(),1,0)
フォームのコントロールソースに数式が表示されています。
参考テキストボックスの名前は、プロパティの[その他]タブの[名前]で変更できます。ここでは、[年齢]としています。
フォームビューに切り替えると、年齢が表示されます。
参考Excelでは、DATEDIF関数を使って簡単に求められるのですが、AccessのDateDiff関数で満年齢の表示にするのは、ちょっと面倒ですね。
[年齢]テキストボックスに[歳]を表示したい場合の書式設定
もし、年齢のテキストボックスに以下のように[歳]も表示したい場合は、プロパティで書式を変更します。
テキストボックスのプロパティを表示して、[書式]タブの[書式]に[0\歳]と入力します。入力するときは、\は省いても構いません。
クエリで年齢を表示したい時
もし、クエリで年齢を表示したい場合は、以下のようにします。
テーブルをもとにクエリを作成して、[生年月日]のとなりのフィールドで右クリックして、[ビルド]をクリックします。
[式ビルダー]が表示されます。
ここに以下のように入力します。計算式は、フォームのテキストボックスで入力したものと同じです。[OK]ボタンをクリックします。
年齢: DateDiff("yyyy",[生年月日],Date())-IIf(DateSerial(Year(Date()),Month([生年月日]),Day([生年月日]))>Date(),1,0)
[年齢]フィル―ドのセルに、計算式が表示されています。
直接入力してもいいのですが、数式が長い場合は[式ビルダー]を表示すると入力しやすいと思います。
クエリを実行して確認してみると、以下のように表示されます。
クエリで年齢フィールドを追加した場合は、フォームではクエリをもとに作成します。
計算式(DateDiff・IIF・DateSerial)について
計算式の3つの関数について解説します。
DateDiff関数
DateDiff関数は、2つの日付の差を求めます。
DateDiff(単位,日時1,日時2)
DateDiff 関数 - Microsoft サポート(Microsoft)
DateDiff("yyyy",[生年月日],Date())
上記は、[生年月日]と今日の日付[Date()]の差を求めて、年["yyyy"]で表示するという意味です。
DateSerial関数
DateSerial関数は、年月日から日付を返す関数です。
DateSerial(year, month, day)
DateSerial 関数 - Microsoft サポート(Microsoft)
DateSerial(Year(Date()),Month([生年月日]),Day([生年月日])
上記は、今年の誕生日を求めています。
IIF関数
IIF関数は、条件を判断して値を返します。
IIF(条件,条件が合う場合,条件が合わない場合)
IIf 関数 - Microsoft サポート(Microsoft)
IIf(DateSerial(Year(Date()),Month([生年月日]),Day([生年月日]))>Date(),1,0)
今年の誕生日が今日の日付より大きければ1を返して、そうでなければ0を返します。
新規入力フォームで[#Type!]と表示されないように修正
上記の計算式のまま、新規入力フォームを開くと、年齢のテキストボックスは、[#Type!]と表示されてしまいます。
これは、[生年月日]が入力されていないためです。
このエラーを表示しないようにするには、計算式を以下のように変更します。これで、[生年月日]がNullならばNullを返します。
IsNull 関数 - Microsoft サポート(Microsoft)
=IIf(IsNull([生年月日]),Null,DateDiff("yyyy",[生年月日],Date())-IIf(DateSerial(Year(Date()),Month([生年月日]),Day([生年月日]))>Date(),1,0))
入力のミスを防ぐために[定型入力]を使用
フォームで生年月日を入力するのであれば、以下のように[生年月日]のテキストボックスにカーソルを置いたときに、以下のように表示されると桁を間違えることがなくなります。
[生年月日]のテキストボックスのプロパティを開いて、[データ]タブの[定型入力]にある[...]ボタンをクリックします。
[定型入力ウィザード]が表示されます。
ここでは、[日付(S)]を選択します。[次へ]ボタンをクリックします。
[テスト]ボックスでテストもできますので、いろいろ試してみてください。
ここでは、[代替文字]も選択できます。テストで確認して問題がなければ、[OK]ボタンをクリックします。
[完了]ボタンをクリックします。
プロパティには、以下のように表示されます。
0000/00/00;0;_
入力を間違えると、エラーメッセージが表示されます。
参考データ型で[日付/時刻型]を選択した場合、既定で[日付選択カレンダー]が表示されるようになっています。
便利な場合もありますが、不要な場合は、プロパティの[書式]タブにある[日付選択カレンダーの表示]で[なし]を選択すると非表示になります。
また、[定型入力]などで設定すると、カレンダーは非表示になります。
フォーカス取得時に日付選択カレンダーを表示することもできます。今日の日付に近い日付を入力する場合は、自動表示にしておくと便利です。
-
日付選択カレンダーをフォーカス取得時に自動表示するには
Accessで[日付/時刻型]のデータ型を選択すると、既定で日付選択カレンダーが表示されます。 Access2007からの機能です。 日付/ ...
定型入力ウィザードについては、以下の記事で解説しています。定型入力プロパティの設定値の意味についても解説しています。
-
定型入力ウィザードを使用して簡単に入力パターンを設定
Accessでは、[定型入力]を使用して入力パターンを設定できます。 フィールドのデータ型が[数値型][通貨型][短いテキスト][日付/時刻 ...
入力規則に違反した時はエラーメッセージを出す
もし、生年月日に今日の先の日付を入力されたら、メッセージを出して修正してもらうようにしたいと思います。
[生年月日]のプロパティを表示します。
[データ]タブの[入力規則]にある[...]ボタンをクリックして、[式ビルダー]を表示して入力してもいいですが、短い場合は直接入力しても構いません。
ここでは、以下のように直接入力しています。今日の日付以下でなければいけませんよ、という意味ですね。
<=Date()
[エラーメッセージ]には、入力規則に違反したときに表示したい内容を入力します。
ここでは、[日付を確認してください。]と入力します。
フォームに切り替えて、エラーメッセージが出るかどうかを確認してみます。
参考[定型入力]や[入力規則]などの設定は、テーブルでも行うことができます。
テーブルで入力されることが多いのであれば、テーブルで設定されることをお勧めします。テーブルで設定したものは、フォームを作成した時もそのまま継承されます。
テーブルでの定型入力については、以下の記事で解説しています。
-
定型入力ウィザードを使用して簡単に入力パターンを設定
Accessでは、[定型入力]を使用して入力パターンを設定できます。 フィールドのデータ型が[数値型][通貨型][短いテキスト][日付/時刻 ...