Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Microsoft 365)
パワークエリ_年齢計算で何年何ヶ月表記をしたい
投稿日時: 24/04/08 08:48:50
投稿者: chibikko

Number.ToText(if (Date.Month(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9)))<Date.Month([生年月日])) then
(Date.Year(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Year([生年月日]))-1
else Date.Year(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Year([生年月日]))&"歳"&
Text.PadStart(Number.ToText
    (if (Date.Month(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Month([生年月日]))>0 then(Date.Month(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Month([生年月日]))
else if (Date.Month(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Month([生年月日]))+12=12 then 0
else (Date.Month(DateTime.Date(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(),9))) - Date.Month([生年月日]))+12), 2, "0")&"ヶ月"
 
と式を作ったのですが、
今日の月日が誕生日の月日を過ぎていないのに、実際の経過月数より1多くなります。
どのような式を追加(どの式のどの部分を修正)すればよいのでしょうか。

回答
投稿日時: 24/04/08 11:55:07
投稿者: sk

引用:
年齢計算で何年何ヶ月表記をしたい

(詳細エディター)
-------------------------------------------------------
let GetText = (birthday as date) =>
    let
        CurrentDate = Date.From(DateTimeZone.SwitchZone(DateTimeZone.UtcNow(), 9)),
        YearDiff = Date.Year(CurrentDate) - Date.Year(birthday),
        MonthDiff = Date.Month(CurrentDate) - Date.Month(birthday),
        IsNotBirthdayComing = if Date.Day(birthday) > Date.Day(CurrentDate)
                              then -1
                              else 0,
        MonthsCount = (YearDiff * 12) + MonthDiff + IsNotBirthdayComing,
        GetYearMonth = if MonthsCount < 0
                       then null
                       else Number.ToText(Number.IntegerDivide(MonthsCount, 12)) & "歳" &
                            Number.ToText(Number.Mod(MonthsCount, 12)) & "ヶ月"
    in
        GetYearMonth
in
    GetText
-------------------------------------------------------
 
とりあえず、以上のようなカスタム関数を作成なさればよろしいのではないかと。

投稿日時: 24/04/08 12:51:34
投稿者: chibikko

>sk様
ありがとうございます。
 
else Number.ToText(Number.IntegerDivide(MonthsCount, 12)) & "歳" &
     Number.ToText(Number.Mod(MonthsCount, 12)) & "ヶ月"

の部分を
else Text.PadStart(Number.ToText(Number.IntegerDivide(MonthsCount, 12)), 2, "0") & "歳" &
     Text.PadStart(Number.ToText(Number.Mod(MonthsCount, 12)), 2, "0") & "ヶ月"

に修正した所、望み通りの表示結果となりました。
 
 
>んなっと様
=DATEDIF( ,TODAY(),"y") & "歳" & DATEDIF( ,TODAY(),"ym") & "ヶ月"
のようなことをPowerQueryで実現したいということでしょうか。

 
その通りです。
 
今回は、>sk様の方法を使わせていただきます。