なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:生年月日から年齢を計算する

年齢計算は初日を参入するので(年齢計算ニ関スル法律の第一項)、誕生日の前日には歳が繰り上がる必要がある。なので正確に計算する前に、起算日を生年月日の前日にしてしまったほうがいい。Excelでいうと、DATEDIF関数が初日不算入なので「開始日-1」か「終了日+1」するのと同じである。まぁこの関数でこれやると色々不備があるんだけど……

画像のように「生年月日」列があるとすると、カスタム列の追加で「カスタム列の式」に

= let 起算日 = Date.AddDays(Date.From([生年月日]), -1), 本日 = Date.From(DateTime.LocalNow()), 年 = Date.Year(本日)-Date.Year(起算日), 月日 = (d as date)=>Date.ToText(d, "MMdd"), チェック = 月日(本日)<月日(起算日) in 年 - Number.From(チェック)

と入れてやる。エディタに書くなら整理して、

    年齢列の追加 = Table.AddColumn(ソース, "年齢", each
        let
            起算日 = Date.AddDays(Date.From([生年月日]), -1),
            本日 = Date.From(DateTime.LocalNow()),
            年 = Date.Year(本日)-Date.Year(起算日),
            月日 = (d as date)=>Date.ToText(d, "MMdd"),
            チェック = 月日(本日)<月日(起算日)
        in 年 - Number.From(チェック)
    )

こんな感じ。

DATEDIF関数みたいに「YM」とか「MD」とかを求めたいならカスタム関数を作ったほうがいいんじゃないかと。

nandemo-xl.hatenablog.com