これまでに解説してきたコマンドを使って「生年月日」から「現在の年齢」を自動計算する方法を紹介しておこう。ここで紹介する処理手順はWebにもよく掲載されている手法であるが、ある程度の誤差が残ってしまうことに注意しなければならない。あくまで「簡易的な年齢の算出方法」と捉えておくのが基本だ。

年齢を手軽に求める方法

前回の連載では、「日付」や「時刻」、「期間」といったコマンドの使い方を紹介した。その実践的な例として、「生年月日」から「現在の年齢」を自動計算する方法を紹介していこう。日時データを処理するときの一例として参考にして頂ければ幸いだ。

また、「合計年数」の誤差についても補足しておく。こちらも重要なポイントになるので、あわせて覚えておく必要がある。

  • 生年月日から年齢を自動計算(簡易版)

以下の図は、あるサービスの会員名簿を記録したデータ表だ。このデータ表に記録されている「生年月日」をもとに「現在の年齢」を算出してみよう。

  • 会員名簿に記録されている「生年月日」

「生年月日」の列を選択し、「列の追加」タブにある「日付」コマンドをクリックする。続いて、処理方法に「期間」を選択する。

  • 現在までの「期間」を求める処理

すると、各行で「今日の日付」と「生年月日」の差が計算され、その結果が期間型のデータとして追加される。つまり、生まれてから今日までの日数が「日.時:分:秒」という形で追加されることになる。なお、今回の例では「日付」のデータを計算しているため、「時:分:秒」の部分はすべて「00:00:00」になる。

  • 求められた期間(生まれてから今日までの日数)

続いて、この期間型のデータを「年単位の数値」に換算する。「期間」の列を選択し、「期間」コマンドから「合計年数」を選択する。

  • 期間を「年数」に換算する処理

新しい列が追加され、「生まれてから今日までの年数」が数値として表示される。

  • 年単位に換算された期間(合計年数)

あとは、小数点以下を切り捨てて整数にするだけ。「合計年数」の列を選択し、「丸め」コマンドから「切り捨て」を選択する。これで「現在の年齢」を整数として示すことができる。

  • 端数を「切り捨て」する処理

  • 端数を切り捨てた結果

列名が「切り捨て」のままでは紛らわしいので、この時点で列名を「年齢」に変更しておこう。

  • 列名を「年齢」に変更

以上で「年齢」の算出は完了だ。計算の過程で使用した「期間」や「合計年数」の列はもう必要ないので削除しておこう。

  • 不要な列を削除したデータ表

最後に、このデータ表をExcelに出力する。「ホーム」タブにある「閉じて読み込む」をクリックすると、以下の図のような結果が得られる。

  • Excelに出力したデータ表

もちろん、後日に「すべて更新」をクリックしてクエリを再実行することも可能だ。すると、その時点における「今日の日付」で年齢を再計算することができる。つまり、クリックひとつで「現在の年齢」を自動計算できる訳だ。

なお、今回の例では「列の追加」タブにあるコマンドを使って年齢を計算したが、「変換」タブにあるコマンドで処理を進めても構わない。処理の流れを理解しやすいように、それぞれの処理結果を「新しい列」として追加したが、後から列を削除することを考えると「変換」タブを使った方が効率的だ。

また、ここで紹介した「年齢」の計算方法は、手軽である反面、ある程度の誤差が残ることを覚えておく必要がある。もっと簡単な例を使って、「合計年数」の誤差について補足しておこう。

「合計年数」で年齢を求めるときの注意点

今度は、以下の図に示した例を使って「年齢」を計算してみよう。A~Gさんの誕生日は、いずれも「2月10日」で、生まれた年だけが1年ずつ変化している。また、今日の日付を「2025年2月9日」と仮定して話を進めていく。

  • 動作確認用のデータ表

まずは「生年月日」と「今日の日付」の差を計算していこう。今回の例では、今日の日付を列として作成してあるので、両者の差は =[今日の日付]-[生年月日] の数式で計算できる。この計算結果が「生まれてからの日数」(期間)となる。

  • 日数を計算する「カスタム列」

  • 算出された日数(期間)

「カスタム列」を使って計算した場合は、データ型が「指定なし」になっている。念のため、データ型に「期間」に変更しておこう。

  • データ型に「期間」を指定

続いて、「生まれてからの日数」を年単位の数値に変換する。「期間」コマンドから「合計年数」を選択する。

  • 期間を「年数」に換算する処理

結果は、以下の図に示した通り。これが「2025年2月9日」の時点における「年齢」になると考えられる。今回は、小数点以下を切り捨てしないで、そのままの形で解説を進めていこう。

  • 年単位に換算された期間(合計年数)

数値が見やすくなるように、Excelに出力したデータ表を使って計算結果を検証していく。なお、「生まれてからの日数」の表示形式には「数値」を指定してある。

  • Excelに出力したデータ表

上図をよく見ると、「合計年数」(年齢)が微妙にズレていることを確認できると思う。たとえば、Aさんの誕生日は2月10日で、まだ最初の誕生日を迎えていないのに「合計年数」が「1」と表示されている。Bさん以降も同様だ。いずれも、本当の年齢より1歳だけ大きな数値になっている。

一方、「生まれてからの日数」は365日になっており、「1年が経過している」とも考えられる。ここで忘れてはならないのが閏年(うるうどし)の存在だ。2024年は閏年になるため、2月29日が存在する。よって、1年は366日になる。

「合計年数」として表示される数値は、閏年を無視して計算したものであり、単純に1年=365日として換算した数値に過ぎない。このことは「合計年数」を求める処理のM言語からも確認できる。つまり、かなり大雑把な換算方法といえる。

  • 期間を「年数」に換算する処理(合計年数)のM言語

ちなみに、「期間」コマンドには「合計月数」という処理が用意されていない。これは「1ヵ月は何日に相当するか?」を決めるのが難しいからだと思われる。1ヵ月の日数は30日や31日が多く、28日や29日の場合もある。にも拘わらず、「180日を月数に換算して」と言われても、コンピュータは回答に困ってしまう(人間なら約6ヵ月と答えられるが……)。

話を元に戻して、もういちど先ほどの処理結果を見てみよう。生年月日が2020年以前のE~Gさんは、2020年と2024年の計2回、閏年(2月29日)を過ごしている。

  • 閏年を2回含む場合の日数と年数

このため、2日分の誤差が生じてしまっている。3人とも、まだ誕生日(2月10日)を迎えていないのに、合計年数(年齢)はプラス1年になっており、さらに0.0027397……の端数が生じている。この端数は1/365に相当する。つまり、まだ誕生日の前日なのに、2日後の年齢が「合計年数」として表示されてしまっている訳だ。

このように「期間」コマンドの「合計年数」は、ある程度の誤差を含む換算方法となる。閏年が4年に1回あることを考えると、これは無視できないレベルの誤差といえるだろう。100歳まで生きれば閏年を約25回も経験することになるため、約25日もの誤差が生じてしまう。

よって、今回の連載で示した手法は「大雑把な年齢」を求める場合にしか使えない。「年代別に分けてアンケート結果を集計する」などの用途であれば、この程度の誤差は許容範囲内かもしれない。一方、正確な年齢を求めたいときは、もっと別の方法で処理を進めていく必要がある。

ということで、次回は「正確な年齢」をパワークエリで求める方法を紹介していこう。用途に合わせて(簡易版)と(正確版)を使い分けるとよいだろう。