Power Appsで入力フォームを作るとき、生年月日を入力すると勝手に年齢を計算してくれると楽だな~と思い、満年齢の求め方を考えてみた。
ExcelだとDATEDIFだけでいけるんだけど。。。
Excelで満年齢を求める場合は、DATEDIF関数を使って単位をYにするだけでいけるのだけれど、Power Appsは単純にDateDiffを使うだけじゃだめっぽい。
単純にDateDiffでYears指定するとその年にいくつになるか?が出てしまう。僕はまだ33。
日付での計算はうるう年がめんどくさいので、DateDiffの月指定を12で割って切り捨ててやればいけそうだったけど、
誕生月の人は、誕生日が来なくても老けてしまう。。。
ということで、色々と試してみた。
方法1:「誕生月と今日の月が同じときは日付も計算する」方式
単純に考えるとこの方法で、式はこんな感じ。
If( Month(誕生日)=Month(Today()) && Day(誕生日) > Day(Today()), RoundDown(DateDiff(誕生日,Today(),Months) / 12, 0) - 1, RoundDown(DateDiff(誕生日,Today(),Months) / 12, 0) )
※誕生日はDate型で
誕生日を変えると満年齢がいい感じに動くので、間違ってなさそう。
方法2:計算で求める方法
こちらのページに満年齢の面白い求め方があったので、こちらの計算式を参考にさせていただいた。
基準日時点の満年齢の求め方。
すごく久しぶりにそんな計算式の説明をしたので、せっかくなのでメモ。 ある基準日時点での満年齢の計算方法のTip…
式はこんな感じ。
RoundDown((Value(Text(Today(),"[$-ja]yyyymmdd")) - Value(Text(誕生日,"[$-ja]yyyymmdd")))/10000, 0)
※誕生日はDate型で
するといい感じで動作する。
正直、動けばOKだと思うのでどちらの式でもよいと思うのだけれど、方法2の参考サイトに書いてある通り、もし厳密な満年齢を必要とするアプリに組み込む場合は、「満年齢は誕生日の前日に加算される」ことや、「年齢が加算されるタイミングは誕生日の前日終わる瞬間(前日の24:00)」であることを念頭に入れて処理に組み込む必要がある。
学年の始めが4/2生まれの人の(4/1生まれは前年の最後)となる理由がこれらとのこと。
コメント