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

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

Power Query:西暦から和暦を計算する

Excel上なら、TEXT関数で「"gggee年mm月dd日"」とすれば簡単に済む話なんだけど、Power Queryの Date.TeText関数は和暦には対応していない。

画像のような和暦表示の列を作りたい場合、カスタム列の追加で「= Date.ToText([日付], "gggee/MM/dd"」とすると、下のような表記になってしまう。

なんじゃこりゃ。

対応していなら直接計算するしかない訳で、手間をかければ計算はできる。

日付列がある「テーブル1」が読み込まれているものとして、

    和暦表記列の追加 = Table.AddColumn(テーブル1, "和暦表記", each [
        しきい値 = {18681023, 19120730, 19261226, 19890108, 20190501},
        補正値 = List.Transform(しきい値, each Number.RoundDown(_/1E4)-1),
        年月日 = Number.From(Date.ToText([日付], "yyyyMMdd")),
        件数 = List.Count(List.Select(しきい値, each _<=年月日)),
        元号 = {"明治", "大正", "昭和", "平成", "令和"}{件数-1},
        年 = Number.RoundDown(年月日/1E4)-補正値{件数-1},
        和暦表記 = 元号 & Number.ToText(年, if 年=1 then "元年" else "00年")
    ][和暦表記]),
    列の削除 = Table.RemoveColumns(和暦表記列の追加,{"日付"})

こんな形。せっかくなので初年は元年表記にしてみた。

因みに和暦の文字列から西暦を計算するのは簡単。

予め和暦が「gggee/MM/dd」の形式になるようにしておいて、カスタム列の追加で「= Date.From([和暦文字列])」とするだけ。