月別の横長表を、更新できる縦長表に変える

LWP | 月別の横長表を、更新できる縦長表に変える

図解1|一行を「商品と月の組合せ」にする

月の見出しと金額を対応させ、商品別の横長表を商品・月・金額の縦長表へ変える

図1|見出しだった月が、各行の値になる。金額と商品の対応は保たれます。

解説1|列の名前に埋まっている「月」を取り出す

月別の売上表は、横に月を並べると見比べやすくなります。一方、月ごとの集計や複数年の連結では、月が増えるたびに列構成が変わることが扱いにくさの原因になります。まず、見た目の向きよりも「一行が何を表すか」を確認しましょう。

入力例|二つの商品、二つの月

商品

2026-08

2026-09

A

3000

1000

B

3200

1600

入力表の一行は「ある商品の複数月の売上」です。これを、出力では「ある商品の、ある月の売上」に変えます。Power Queryの列のピボット解除は、月の列名と、その列にある金額を組にして取り出す操作です。集計して金額を足す操作ではありません。

結果|同じ四つの金額を四行へ

商品

月

金額

A

2026-08

3000

A

2026-09

1000

B

2026-08

3200

B

2026-09

1600

商品Aの8月3000は、商品A・2026-08・3000という一行になります。商品名が繰り返されるのは、別の月の金額にも商品を対応させるためです。この小例では商品と月の組合せが一意ですが、元表に同じ商品の明細が複数あれば、解除後もその明細は別々に残ります。

読むポイント

縦長にすると、翌月を同じ「月」列の値として扱えます。ただし、表を転置するだけではこの3列構成になりません。列名を値へ移し、元の金額と組にするところが、ピボット解除の要点です。

図解2|残す商品列を選び、その他の列を解除する

商品列を残し月列を属性と値へ変換する三段階の操作と結果確認

図2|商品は識別するための列。月の見出しと金額を、新しい2列へ移します。

解説2|商品・月・金額の3列を作る

入力は商品列と月列で役割が異なります。商品列は各金額の所属を示し、月列は変換の対象です。「その他の列のピボット解除」では、残す列を指定することで、その関係をクエリに記録できます。以下はWindows版ExcelのPower Queryを対象にした操作です。

操作|小さなテーブルで試す

新しい練習用ブックのA1:C3へ、解説1の入力表を入れます。月の見出しは文字列として入力してください。範囲内を選び、[挿入]→[テーブル]で先頭行を見出しとしてテーブル化し、テーブル名を「月別売上」にします。

[データ]→[テーブルまたは範囲から]でPower Queryエディターを開きます。「商品」列だけを選び、列見出しの右クリックメニューで[その他の列のピボット解除]を選びます。生成された「属性」を「月」、「値」を「金額」へ変更します。

商品と月のデータ型をテキスト、金額を整数へそろえます。月は元の列名からできた文字列です。「2026-08」という見た目だけで、日付型になったとは判断しません。この例は月をテキストのまま扱います。

結果|読み込む前に四行と合計を確認

確認するもの

期待する結果

列の役割

商品・月・金額の3列

明細の数

4行

商品A

8月3000、9月1000

商品B

8月3200、9月1600

金額の合計

8800

[ホーム]→[閉じて読み込む]で、新しいワークシートへ結果を出します。入力の「月別売上」と出力表は別です。出力側の金額を直接直しても、次の更新で作り直されるため、訂正は入力表へ行います。

読むポイント

値の対応、件数、合計を一緒に確認します。合計が8800でも、商品や月が入れ違っていれば正しくありません。四行の小例なら一行ずつ照合できます。

図解3|翌月は「列の追加」から「行の追加」へ変わる

2026-10列の500と700を追加して更新すると縦長表が6行、合計10000になる

図3|新列が入力テーブルと解除直前の表に届いていれば、追加した月も行へ変わります。

解説3|更新を試して、取り込める範囲を確かめる

元のテーブルに「2026-10」列を追加し、商品Aに500、商品Bに700を入力します。Excelテーブルの範囲に新列が含まれていることを確認してから、[データ]→[すべて更新]を実行します。出力の列は3列のまま、明細は4行から6行へ増え、合計は10000になります。

結果|今回増えるのは、この二行

商品

月

金額

A

2026-10

500

B

2026-10

700

増える条件は、解除する時点の表に新列が存在することです。前のステップで8月・9月だけを選択して新列を落としていれば、その他の列を解除しても10月は取り込めません。結果が変わらないときは、入力テーブル、ソース、解除直前のステップの順に新列を追います。

仕組み|残す列をMで表すと

次は詳細エディターだけで試せる独立した例です。Excelテーブルへの接続は不要で、同じ変換の核を確認できます。

01

let

02

    source = #table(

03

        {"商品", "2026-08", "2026-09", "2026-10"},

04

        {{"A", 3000, 1000, 500},

05

         {"B", 3200, 1600, 700}}),

06

    unpivoted = Table.UnpivotOtherColumns(

07

        source, {"商品"}, "月", "金額")

08

in

09

    unpivoted

第2引数のリストは「残す列」です。商品以外の列名が月へ、各セルの値が金額へ移ります。GUIの表示名だけに頼らず、数式バーの関数と指定列を見れば、何が固定された手順なのかを確かめられます。

読むポイント

この変換は「増えた列が月であるか」を自動では判定しません。更新に対応できることと、入力の内容が正しいことを分けて確認します。

図解4|メモ列とnullは、更新時の確認対象

その他の列に混入するメモ列と、nullでは行が出ず0では行が残る違い

図4|新しい列の意味と欠損の意味を確認してから、集計に使います。

解説4|自動で増えるからこそ、入力の約束を決める

「その他の列」は、商品以外のすべてを指します。入力表へメモ列が増えた場合も、そのままではメモという月と文章の金額が作られます。金額列を整数へ変換すればエラーになる場合があります。エラーを消して済ませず、月列の中に何が混ざったかを調べましょう。

比較|入力が変わると、何を確認するか

入力の変化

確認・対応

月列だけが増えた

入力テーブルに含め、更新後の月・件数・合計を見る

商品の属性列が増えた

残す列に含めるか、解除前に除くかを決める

メモや合計列が混ざった

売上の月列と区別して変換対象から外す

月の値がnullだった

その組合せの行が出ないことを確認する

ピボット解除では、値がnullの組合せは出力されません。数値の0は値なので行が残ります。したがって「商品数×月数が必ず出力行数になる」とは限りません。この例で6行になるのは、6か所すべてに数値が入っているためです。

nullを0へ一律に置換すると、未提出・不明などの状態を売上ゼロと扱ってしまうことがあります。欠損の意味を確かめたうえで、行を残す必要があるか、欠損を別に管理するかを決めます。空文字や空白文字も、nullと同じものとして扱わないでください。

読むポイント|自分の表へ置き換える

残す列は商品コードや店舗コードなど、一行の所属を示す列です。変換する列は月・日付など、同じ種類の値が横に並ぶ列です。この役割を明確にしてから、元表と出力の対応、更新後の増分、欠損と余分な列を確認すると、月が増えても直す場所を判断できます。

出典

『図で見て分かる Power Query』V029_261012、7.2.1〜7.2.3をもとに再構成。小例と確認手順を記事用に独立させました。仕様確認:Microsoft Learn:ピボット解除、Table.UnpivotOtherColumns、nullを含む公式例。2026-10-12確認。