超簡単!Accessのクエリやマクロで年齢計算する方法

コンピューターのお仕事
スポンサーリンク

「生年月日」はデータベースには必ず入っている項目ですが、Accessをつかって実際に年齢を計算するには手間がかかり結構悩みました。

Accessには年齢を計算する関数などはありませんので、複数の関数を組み合わせて計算するのが一般的ですが、その工程をユーザー定義関数として登録しておけば通常の関数と同じように使えます。

年齢を計算するユーザー定義関数「GetAge」を作りましたので、今回はユーザー定義関数「GetAge」のAccessでの使い方を解説しようと思います。

スポンサーリンク

ユーザー定義関数「GetAge」の使い方

まずはどのようなイメージで「年齢計算のユーザー定義関数」が動作するのかを解説します。

「年齢計算のユーザー定義関数」の関数名を「GetAge」と名付けたのでこれ以降は「年齢計算のユーザー定義関数」 = 「GetAge」と呼ぶことにします。

「GetAge」の書式

GetAge(“生年月日”,”計算したい日付”)

第一引数 “西暦の生年月日”

「GetAge」の第一引数には生年月日を入力します。

例題では生年月日を西暦で入力していますが、和暦記号を使っても動作します。

  • 明治3年9月24日 : “M3-9-24”
  • 大正3年9月24日 : “T3-9-24”
  • 昭和3年9月24日 : “S3-9-24”
  • 平成3年9月24日 : “H3-9-24”

日付の区切り記号に-(ハイフン)を使っていますが /(スラッシュ)で区切ってもかまいません。

日付の両端をダブルクォーテーションでくくるのを忘れないでください。

第2引数”計算したい日付”

第2引数には計算したい日の日付を入力します。ちょっと文章では説明しにくいので例を出して説明します。

例1では2021年10月24日時点で、1975年9月24日の人の誕生日を計算します。

例1.】=GetAge(“1975-9-24″,”2021-10-24”)

例2では第2引数に今日の日付を返す「Today関数」を使用していますので、このセルでは常に今日の時点での年齢を計算します。

例2.】=GetAge(“1975-9-24”,Today())

Accessで「GetAge」を実際に使ってみる

ユーザー定義関数「GetAge」はAccessのあらゆるところで使えますが、その一部を実際に使いながら解説します。

クエリで「GetAge」を使う

クエリで「GetAge」を使うにはクエリフィールドに直接書式を書き込みます。

下記の例では「GetAge」の第一引数にデータベースの生年月日が格納されたフィールド「birth」をあてて、第二引数に今日の日付を返すDate関数をあてています。

下記はこのクエリの結果、年齢が一覧になっていることがわかります。

フォームで「GetAge」を使う

ユーザー定義関数「GetAge」はフォームフィールドのコントロールソースに直接書式を書き込んで使えます。

下記 下記の例では「GetAge」の第一引数にデータベースの生年月日が格納されたフィールド「birth」をあてて、第二引数に今日の日付を返すDate関数をあてています。

イミディエイトウインドウで「GetAge」を使う

VBエディタのイミディエイトウインドウでは クエスチョンマーク「?」に続けて関数を入力して開業すると、その結果がすぐに表示されます。

下記では第一引数に1975年9月24日、第2引数に今日の日付を返すDate関数をあてて、46という結果が返っています。

マクロで「GetAge」を使う

「GetAge」関数はマクロ内のどのような使い方にも対応できます。

下記ではAccessフォームからメモ帳を開いてデータベースの生年月日フィールド「birth」から「GetAge」で計算した年齢を書きだしています。

Private Sub コマンド85_Click()
Call Shell("notepad.exe", 1)
SendKeys GetAge(Me.birth, Date) & "歳"
End Sub

ユーザー定義関数「GetAge」の登録方法

  1. 当サイトの「GetAge」スクリプトをコピー
  2. AccessからVBエディタを開く
  3. VBエディタで標準モジュールを開く
  4. 標準モジュールに「GetAge」を貼り付け

「GetAge」のスクリプトをコピー

下記は「GetAge」を動かすためのプログラム(スクリプト)です。

まずは下記を選択してコピーしてください。

右側にうすく表示されているCopyアイコンをクリックするだけでもコピーできます。

Public Function GetAge(ByVal Birthday As Date, ByVal Hiduke As Date) As Long
    GetAge = DateDiff("yyyy", Birthday, Hiduke) + _
             (Format(Birthday, "mm/dd") > Format(Hiduke, "mm/dd"))
End Function

AccessからVBエディタを開く

VBエディタとはVBA (Visual Basic for Applications)というプログラムを書くためのツールのことで、当サイトで公開しているスクリプトやユーザー定義関数はこのツールから登録します。

AccessからVBエディタを開くにはキーボードショートカットを使う方法とリボンメニューのボタンをクリックする方法があります。

キーボードショートカットからVBエディタを開く

キーボードショートからVBエディタを開くにはAccessが起動した状態でキーボードのAltキーとF11キーを同時に押します。

Nvidiaのグラフィックボードを使っているパソコンではAlt+F11のキーボードショートカットが別のアクションに割り振られていてVBエディタが開かない場合があります

Access2019からVBエディタを開く

キーボードショートカットを使わずにVBエディタを開くには2通り方法があります。

ひとつ目の方法はリボンの「データベースツール」からVisual Basicをクリックします。

ふたつ目の方法はリボンの「作成」からVisual Basicをします。

標準モジュールを開く

VBエディタが開いたら、次に標準モジュールを開きます。

方法はVBエディタのメニュー「挿入」→「標準 モジュール 」をクリックします。

標準 モジュール に「GetAge」を貼り付け

標準 モジュール が表示されたら、そこに先ほどコピーした「GetAge」のスクリプトを貼り付けます。

まとめ

今回は顧客や従業員などのデータベースには必ず入っている「生年月日」から年齢を計算するユーザー定義関数「GetAge」の使い方を解説しました。

一度関数に登録してしまえば、フォームやクエリなどAccessのあらゆるところで使えるので便利です。

この記事がどなたかのお役にたてれば幸いです。

AccessVBAを勉強している方におすすめな書籍

今回紹介したテクニックなどは下記の書籍でも紹介されていますので、参考にされてはいかがでしょうか?

コメント

タイトルとURLをコピーしました