クエリで生年月日を求めるのは、結構面倒です。
それは、年齢を求めるコードが長いからです。
公式として覚えるのもいいかもしれませんが、覚えるのも結構面倒です。
そんな時に役立つのは、ユーザー定義関数です。
目次
ユーザー定義関数で、年齢を求める
こんにちは。伊川(@naonaoke)です。
前回は、Functionプロシージャについて説明をしました。
理解できると結構、便利で、おもしろいですね。
今回は、ACCESSで生年月日を求めるユーザー定義関数を作ります。
クエリのグリッドに長いSQL文を記載しなくても、一発で、年齢を求めることができます。
このブログはこんな人にお勧め
- ACCESSでクエリを勉強している人
- ユーザー定義関数を勉強している人
- ACCESS利用する際に、どの場面で、ユーザー定義関数を利用するのかわからない人
このブログを、読み終わるころには・・・・
ユーザー定義関数は便利だなと思えるようになります。いちいち、長いSQL文をNETで検索しなくても大丈夫です。
ユーザー定義関数
ユーザー定義関数って便利だと思います。
通常は、ユーザー定義関数を利用しないと、このような長いSQL文を記載します。
しかし、これを公式として理解するのは、少し厳しいと思います。
もっとも、理屈を理解していれば、カンタンに覚えることもできるとは思います。
しかし、記憶はできても、実際に入力する場合は、入力ミスもあるでしょう。
そんな時には、標準モジュールに、ユーザー定義関数を作成しましょう。
クエリで年齢を求める 作業手順 その1 データベース確認
各年齢を、生年月日から求めます。
クエリで年齢を求める 作業手順 その2 DateDiff関数を使う
DateDiff関数は、2つの日時の間隔を求める関数です。
つまり、誕生日は、生まれた日から、今日までの間隔が、年齢です。
年単位で間隔を調べるときは、yyyyを利用してカウントします。
DateDiff関数は、年をまたいだ時に、1カウントします。
2021/01/01~2021/04/20は、年をまたいでいないため、カウントはされません。
本日の「月日」と生年月日の「月日」を比べる
本日の「月日」が生年月日より前ならDateDiff関数の戻り値から「1」を引きます。
走じゃなければ、そのままの戻り値を返します。
クエリで年齢を求める 作業手順 その3 標準モジュールにコードを仕込む
上のコードを参考に、下記のユーザー定義関数を作成します。
この場合、myDay、つまり、私の生年月日のmmddは、0126です。
本日のDateびmmddは、0417です。
0126>0417というように考えます。
この不等号は成り立たないので、myAge = DateDiff(“yyyy”, myDay, Date)となります。
また、2つ目のデータは、
1114>0417の不等号は、成り立つので、DateDiff(“yyyy”, myDay, Date) – 1となります。
クエリで年齢を求める 作業手順 その4 クエリにユーザー定義関数を仕込む
このように記載します。
この式なら、生年月日が、空白でもエラー表示を回避することができます。
クエリで、年齢を求める 作業手順 その5 余談
便利なユーザー定義関数を作成しても、それを、他人に受け入れられなければ、意味がありません。
別に、ユーザー定義関数を、その瞬間から教えるわけでもありません。
このような検索フォーム兼、入力フォームを作成しておけばいいのです。
ユーザー定義関数名と、利用例文を記載しておけば、皆が利用できるようになります。
これが、データベースです。
しかも、検索コードと、保存コードを合わせても、たったの4行です。
検索をするなら、Excelよりも、ACCESSのほうが全然楽なのです。
ここがポイント
今回は、ユーザー定義関数について 説明しました。長い、SQL文を記載するなら、ユーザー定義関数を作成したほうが楽ですよね。最初は、身の丈に合ったコードを記載して、考えていくようになれば、複雑なユーザー定義関数を作成できるようになるでしょう。
まとめ
クエリで年齢を求める動画は、あまり紹介したことがありませんでした。
満年齢は現在の年齢であり誕生日で「年齢」を数える方法です。
数え年は「年齢+1歳」です。現在のように誕生日で歳を数えるのではなく、1月1日(2月4日)で歳を数えます。
大体、満年齢でいうしょうけど、お祝い事などは、数え年で言うかもしれません。
業務内容によっては、DateDiff関数の修正が必要かもしれません。
今回も最後まで読んでいただきありがとうございました。
今回のサンプルファイルは、No220です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。