何かしらの項目を基準にして集計する際、「A」「B」「C」……とある項目の内、「B」のデータが一つもないと、集計結果のテーブルは「A」「C」……と、歯抜け状態になってしまいます。そういう場合は、予め用意した「A」「B」「C」……テーブルに、集計結果を入れ込んでやればいいですね。その集計する項目が「月」だった場合、「月毎の月初テーブル」が必要になります。
というわけで、今回は「月ごとの月初テーブル」を作ってみます。
月初テーブル
![月初のみのテーブル](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240614/20240614100358.jpg)
let
年 = 2024,
月初リスト = List.Transform(
{0..11},
each Date.AddMonths(#date(年, 1, 1), _)
),
テーブル変換 = Table.FromColumns(
{月初リスト},
type table[月初=date]
)
in
テーブル変換
このようになります。ここで「年」はセルから読み込んでも問題ありません。
もし「4月~翌3月」を表示させたい場合は、月初リストの「{0..11}」を「{3..14}」に変更すればいいです。
「M言語、わかんないよっ!」って人は次の手順でやってください。
![新規クエリの作成](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240614/20240614103356.jpg)
「Alt + F12(Windows)」で Power Queryエディタを開き
左ペインで右クリック[新しいクエリ]→[その他のソース]→[空のクエリ]
![リストの作成](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240617/20240617130931.jpg)
数式バーに「= {1..12}」と入力
![テーブルへの変換](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240617/20240617131137.jpg)
[変換]→[テーブルへの変換]→[OK]
出来上がったテーブルにカスタム列を追加します。
![カスタム列の追加](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240617/20240617131556.jpg)
[列の追加]→[カスタム列]をクリック
![カスタム列の式](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240617/20240617132041.jpg)
新しい列名:日付
カスタム列:= Date.AddMonths(#date(2024, 1, 1), [Column1]-1)
→[OK]
「Date.AddMonths」は「月数(Column1列の値-1) を加算した日付を返す関数です。
カスタム列が追加できたら、「Column1」列を削除すればおしまいです。4月開始にしたい時は「[Column1]-1」を「[Column1]+2」に変更してください。
learn.microsoft.com
続いて、月末列を追加したバージョンです。
月末追加バージョン
![月末を追加したテーブル](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240614/20240614100828.jpg)
let
年 = 2024,
月初リスト = List.Transform(
{0..11},
each Date.AddMonths(#date(年, 1, 1), _)
),
月末リスト = List.Transform(
月初リスト,
Date.EndOfMonth
),
テーブル変換 = Table.FromColumns(
{月初リスト, 月末リスト},
type table[月初=date, 月末=date]
)
in
テーブル変換
これだけです。Date.EndOfMonth関数は引数省略したので「each」もいりません。
最初の表に戻りますが、これらの2つのテーブルを作成すると、あとはマージ……ではなくテーブルを縦結合してグループ化してあげましょう。そのほうが読み込みの負荷が少ないですし、何もない月に「0」を表示させるのも簡単だからです。
![縦結合してグループ化](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20240614/20240614101533.jpg)
ソース = 月テーブル & 集計結果,
行のグループ化 = Table.Group(ソース, {"日付"}, {"個数", each List.Sum([個数]&{0}), Int64.Type})
以上です。