毎月のCSVで列名が変わっても止めにくくする ― Power Query Mで列名ゆれを吸収する

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Power Query MのTable.RenameColumns、Table.SelectColumns、MissingField仕様を確認し、既存サンプルも「複数候補を黙って捨てない」安全側の設計へ見直しています。

検証ステータス:📘 Power Query M公式仕様確認済み・サンプル安全性レビュー済み・実データ実行は未確認

毎月のCSVで列名が変わっても止めにくくする ― Power Query Mで列名ゆれを吸収する

毎月届くCSVで 社員コード従業員ID社員ID のように列名だけが変わるなら、Power Query側で複数の別名を1つの標準名へ寄せると後続処理を安定させられます。

ただし、同じCSVに 社員コード社員ID が同時に存在した場合は話が別です。どちらが正しいかは自動で決めず、エラーで止める方を安全側とします。

目標スキーマを先に決める

今回の最終列は次の4つです。

社員ID / 名前 / 部門 / 金額

入力側では次のような別名を許します。

標準名許容する別名
社員ID社員コード / 従業員ID / 社員ID
名前氏名 / 名前 / 社員名
部門所属 / 部署 / 部門

1つだけ見つかったときに名前を寄せる

NormalizeOne = (tbl as table, candidates as list, target as text) as table =>
    let
        names = Table.ColumnNames(tbl),
        matches = List.Select(candidates, each List.Contains(names, _)),
        result =
            if List.Count(matches) = 0 then
                tbl
            else if List.Count(matches) > 1 then
                error Error.Record(
                    "SchemaConflict",
                    "候補列が複数あります。確認してください。",
                    [Target = target]
                )
            else if matches{0} = target then
                tbl
            else
                Table.RenameColumns(tbl, {{matches{0}, target}}, MissingField.Ignore)
    in
        result

Table.RenameColumns は列名を変更する関数です。ここでは存在する候補が1つだけの場合に限って標準名へ変更します。

複数候補を自動採用しない理由

たとえばCSVに次の2列があったとします。

社員コード = A001
社員ID     = B999

「先に見つかった方を採用」という処理なら、もう片方を気付かず落とせます。しかしこれは列名ゆれではなく、入力データの意味が曖昧な状態です。

そのため現在のサンプルは SchemaConflict として止めます。自動化では、正常系を通すだけでなく「自動判断してはいけない境界」を決めることも重要です。

不足列はnullで補う

列名を標準化した後、Table.SelectColumnsMissingField.UseNull で最終列を揃えます。

Table.SelectColumns(
    Step3,
    {"社員ID", "名前", "部門", "金額"},
    MissingField.UseNull
)

たとえば今月だけ 金額 列がなければ、列自体を欠落させず、値が null金額 列を作ります。これにより後続ステップの列構成を一定にしやすくなります。

flowchart LR
    A[毎月のCSV] --> B[候補列を確認]
    B --> C{同義候補が複数?}
    C -- はい --> D[SchemaConflictで停止]
    C -- いいえ --> E[標準列名へrename]
    E --> F[必要列をSelect]
    F --> G[不足列はnull補完]
    G --> H[一定のスキーマ]

「止めない」より「正しく止める」

列が1つ欠けた程度ならnull補完で処理継続できます。一方、どちらが正しいか分からない2列が同時に来たなら止めます。

この区別を入れると、Power Queryが単にエラーを隠す仕組みではなく、予想済みのゆれは吸収し、意味が曖昧な変化は検知する仕組みになります。

GitHubサンプル

公式情報・一次情報

文書情報

記事タイトル
毎月のCSVで列名が変わっても止めにくくする ― Power Query Mで列名ゆれを吸収する
作成日
更新日
Source URL
https://papanda925.com/?p=15319

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました