ADVERTISEMENT

【Excel】Power Queryで列名が毎月変わるデータを扱う時の設計ポイント

【Excel】Power Queryで列名が毎月変わるデータを扱う時の設計ポイント
🛡️ 超解決

毎月の売上データや月次報告のファイルを取り込む際、列名が変わってしまう経験はないでしょうか。Power Queryは定型処理の自動化に優れていますが、列名が毎月変わるデータではクエリがエラーになり、手作業の修正が発生しがちです。本記事では、列名が変化するデータに対してPower Queryをどのように設計すれば、毎月の更新作業を自動化できるのか、具体的な設計ポイントを解説します。

【要点】この記事で確認すること

  • 最初に見る場所: Power Queryエディタの「適用したステップ」でエラー発生箇所を確認します。
  • 切り分けの軸: 列名の変化パターン(完全置き換え、プレフィックス/サフィックスの変化、日付列名など)を把握します。
  • 注意点: 会社PCでは列名の固定や高度なM関数の使用は管理者承認が必要な場合があります。勝手に変更しないでください。

ADVERTISEMENT

なぜ列名が変わるデータはPower Queryで問題になるのか

Power Queryは、既定では列名を固定のテキストとして扱います。列名を参照するステップ(列の選択、名前の変更、値の抽出など)はすべてそのテキストに依存しているため、翌月に列名が異なると「列が見つかりません」というエラーが発生します。たとえば、先月は「売上_202501」という列があったのに、今月は「売上_202502」に変わっている場合、クエリは列名の不一致で停止します。この問題を解決するには、列名を動的に扱う設計が必要です。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

事前準備:元データの列名パターンを把握する

設計に入る前に、まずは毎月のデータで列名がどのように変化するのかを確認しましょう。パターンによって最適な対処方法が異なります。主なパターンは以下の通りです。

パターンA:列名が完全に異なる

毎月、列名がまったく別の名前に置き換わるケースです。たとえば、1月は「製品名」「数量」「金額」、2月は「商品名」「個数」「売上」というように、同じ意味の列でも名称が変わります。この場合、列名を固定で指定するとエラーになります。

パターンB:プレフィックスやサフィックスに月次情報が入る

列名の先頭や末尾に年月が付与されるケースです。例:「売上_202501」「売上_202502」「費用_202501」「費用_202502」。年月部分だけが変わり、基本部分は固定です。

パターンC:列名が日付や連番になる

列名が「2025/01/01」「2025/02/01」のような日付、または「1月」「2月」のような月名で構成されるケースです。横持ちデータに多く見られます。

設計パターン1:列名をインデックスで参照する方法

列名が毎回完全に変わってしまう場合、列の位置(インデックス)で参照する方法が有効です。Power Queryでは、Table.ColumnNames関数で列名一覧を取得し、Table.ColumnTable.SelectColumnsで位置指定できます。

具体的な手順は以下の通りです。

  1. Power Queryエディタで「列の選択」ステップを削除します。
  2. 「カスタム列」の追加で、= Table.ColumnNames(ソース)と入力し、列名一覧をリストとして取得します。
  3. リストから目的の列の位置を計算します(例:List.PositionOf(列名リスト, "売上")
  4. 位置が決まったら、Table.SelectColumns(テーブル, {位置})で列を選択します。
  5. この方法は列の順序が変わらないことが前提です。列の並び順が毎月固定であれば安定して動作します。

注意点:列の順序が変わるとエラー

インデックス参照は列の並び順に依存します。もし元データの列順が月によって異なる(例:3列目だった売上列が4列目に移動)と、誤ったデータを取得する危険があります。そのため、列順が固定されているデータに限定して使いましょう。

ADVERTISEMENT

設計パターン2:列名をパラメーター化して動的に変更する方法

プレフィックスやサフィックスが変化するパターンBに適した方法です。列名の共通部分を基準に、年月部分だけをパラメーターとして外部から与えることで、クエリを毎月修正せずに済ませます。

手順の一例を示します。

  1. Excelワークシートにパラメーター用のセルを用意し、対象の年月(例:202502)を入力します。
  2. Power Queryで「パラメーター」を作成し、そのセルを参照します。
  3. 列名を指定する際に、="売上_" & Text.From(パラメーター)のように文字列結合で動的に生成します。
  4. 同様に他の列もパラメーターを使って生成します。
  5. クエリを実行するたびにパラメーターセルの値を変更するだけで、正しい列名が参照されます。

利点と限界

この方法は、列名の変化パターンが規則的であれば非常に強力です。しかし、列名の基本部分自体が変わる場合や、列そのものが増減する場合には対応できません。また、パラメーターの管理が別途必要になります。

設計パターン3:列名をピボット解除して縦持ちに変換する方法

日付や連番が列名になるパターンCでは、列名そのものをデータの一部として扱う「ピボット解除」が有効です。横持ちのデータを縦持ちに変換することで、列名に依存しない分析が可能になります。

具体的な手順は以下の通りです。

  1. Power Queryでデータを読み込みます。
  2. 変換タブから「ピボット解除」を選択します。
  3. ピボット解除したい列を選択します。通常は日付列や月名列をすべて選択します。
  4. ピボット解除後、「属性」列に元の列名が、「値」列に数値が格納されます。
  5. 属性列の値を日付型に変換するなど、必要なデータクレンジングを行います。

ピボット解除の注意点

ピボット解除を行うと行数が増えるため、データ量によっては処理が重くなる可能性があります。また、元の列名をデータとして保持するため、列名に含まれる情報(年月など)をうまく切り出す必要があります。

設計パターン別の比較表

比較項目 インデックス参照 パラメーター化 ピボット解除
対象パターン 列名完全変更(順序固定) プレフィックス/サフィックス変化 日付や連名列名
列順の依存性 高い 低い(列名ベース) 低い(すべての列を対象)
毎月の修正 不要 パラメーターの値変更のみ 不要
データ構造の変換 なし なし 横持ち→縦持ち
適用難易度 やや高
エラー時の原因特定 列順変更で誤データ パラメーター誤り 列名の変換ミス

失敗しやすいポイントと管理者への確認事項

実際の運用で陥りがちな失敗と、会社の管理者に確認すべき点を挙げます。

失敗パターン1:M関数の誤用

インデックス参照やパラメーター化でM関数を記述する際、Table.ColumnNamesの戻り値がリストであることを忘れてエラーになるケースがあります。また、List.PositionOfで-1が返った場合の例外処理を入れないと、列が見つからない時に停止します。

失敗パターン2:データソースの変更に気づかない

毎月のデータ形式が突然変更され、列数が増減したり、列順が変わったりすることがあります。設計時にそのような変化が起こり得るかを想定しておきませんと、クエリが破綻します。

管理者へ確認する情報

  • 元データの列名や構造を変更する権限が自分にあるかどうか。システムから出力されるCSVなどは変更できない場合があります。
  • Power QueryのM関数を使用する際、会社のポリシーで外部スクリプトや関数の使用が制限されていないかの確認。
  • パラメーターシートを共有フォルダに置く場合、他のユーザーのアクセス権限に注意が必要です。

よくある質問(Q&A)

Q1. 列名が毎月変わるデータでも、Power Queryの「クエリの結合」は使えますか?

はい、結合キーとなる列の名前が変わらないことが前提です。もし結合キーの列名も変わる場合は、上記の設計パターンを適用して結合前に列名を統一する必要があります。

Q2. パラメーター化の方法で、列名の一部だけが変わる場合に有効な関数はありますか?

Text.ContainsText.StartsWithを使って列名をフィルターする方法が有効です。たとえば、Table.SelectColumns(テーブル, List.Select(Table.ColumnNames(テーブル), each Text.StartsWith(_, "売上_")))とすれば、「売上_」で始まる列だけを抽出できます。

Q3. ピボット解除した後、元の列名から年月を抽出したいのですが、どうすればよいですか?

属性列に対してText.AfterDelimiterDate.Fromなどの関数を使って必要な部分文字列を抽出できます。たとえば、列名が「2025/01/01」の形式であれば、Date.From([属性])で日付型に変換できます。

まとめ

列名が毎月変わるデータにPower Queryを適用するには、変化パターンを把握した上で適切な設計パターンを選ぶことが重要です。インデックス参照、パラメーター化、ピボット解除の3つの方法を状況に応じて使い分けてください。いずれの方法でも、元データの構造変化に備えた例外処理や管理者との事前確認を忘れずに行いましょう。定期的なメンテナンスを最小限に抑え、安定した自動化を実現してください。


📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】

ADVERTISEMENT