実務で使えるPower Query(M言語)小技・テクニック集:列を削除する
Power Queryで「列を削除する」操作は、一見するととても単純に見えます。しかし実務では、この操作は単なる不要項目の整理では終わりません。必要な列だけを残して処理を軽くしたり、個人情報や機密情報を後続処理から除外したり、集計や結合の前に表構造を整えたりと、非常に重要な役割を持っています。
特に初心者のうちは、「不要そうだから消す」という感覚で列削除を行いがちです。ですが、Power Queryでは後続ステップがその列を参照している場合もあり、安易に削除するとエラーの原因になります。さらに実務では、単に見た目を整えるためではなく、処理の安全性、保守性、データ最小化の観点からも列削除を考える必要があります。
この記事では、Power QueryのM言語で列を削除する考え方を、初心者向けにステップバイステップでかみ砕いて説明します。GUI操作とコードの関係、実務でよくある失敗、壊れにくいテンプレートまで、順を追って丁寧に解説します。
Power Queryで列を削除するとは何か
列を削除するとは、表の中から不要な列を取り除き、必要な情報だけが残るようにすることです。たとえば、売上データに「備考」「更新者」「取込日時」のような分析に不要な列が含まれているなら、それらを削除して見通しを良くできます。
ただし、Power Queryでの列削除は、Excelの画面上で列を消す感覚とは少し違います。Power Queryでは元データそのものを破壊するのではなく、「このクエリではこの列を使わない」という処理手順を追加しているイメージです。つまり、元データを安全に保ったまま、加工済みの表だけを整えることができます。
- 不要な列を除外して見通しを良くする
- 後続の処理対象を絞って軽量化しやすくする
- 個人情報や機密情報を後ろの工程に渡さないようにする
- 必要な列だけに整理してミスを減らす
まず覚えたい基本構文
Power Queryで列を削除するときによく使う関数は Table.RemoveColumns です。基本形は次のようになります。
Table.RemoveColumns(
元のテーブル,
{"削除する列名1", "削除する列名2"}
)Power Queryこの構文はとてもシンプルです。削除したい対象の表を指定し、そのあとに削除したい列名をリスト形式で並べます。
たとえば「備考」列だけを削除するなら次のように書きます。
let
Source = 売上テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"備考"} // 備考列を削除する
)
in
RemovedColumnsPower Query複数列を削除したい場合は、列名を増やします。
let
Source = 売上テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"備考", "更新者", "取込日時"} // 不要な列をまとめて削除する
)
in
RemovedColumnsPower Query初心者の方は、まず「削除対象の列名を波かっこ {} で囲む」という形を覚えると理解しやすいです。
ステップバイステップで考える列削除の流れ
ステップ1:本当に不要な列なのか確認する
列削除で最初に考えるべきことは、「その列は本当に不要なのか」です。ここを曖昧にすると、あとで必要になったときに手戻りが発生します。
たとえば次のように整理すると判断しやすいです。
- 分析や集計に使わない列なのか
- 後で結合や参照に必要な列ではないか
- 監査や検証用に残すべき列ではないか
- 個人情報や機密情報として早めに除外すべき列ではないか
実務では、「見た目では不要そうでも、後で使う可能性がある列」が少なくありません。特に顧客ID、取引ID、更新日時、フラグ系の列は、後続の突合やトラブル調査に必要になることがあります。削除前に、業務上の意味を一度立ち止まって確認することが大切です。
ステップ2:後続ステップがその列を使っていないか確認する
Power Queryでは、処理が段階的に積み重なっています。そのため、ある列を削除しても、その後のステップでその列を参照していたらエラーになります。
たとえば、先に「売上区分」という列を作るために「売上金額」を使っていたのに、その前のステップで「売上金額」列を削除してしまうと、当然ながら後続の判定処理は壊れます。
初心者が特に注意すべきなのは、「今の見た目で不要に見えるか」ではなく、「後ろの処理で必要かどうか」で判断することです。Power Queryは見た目以上に手順依存の世界なので、ステップの順番を意識することがとても重要です。
ステップ3:削除する列を明確に列挙する
削除処理を書くときは、「なんとなく不要なものを消す」のではなく、何を消すのかを明確に列挙します。これは保守性の面でも重要です。
たとえば、削除対象が次のように決まっているなら、そのままコードに表現します。
- 備考
- 更新者
- 取込日時
列名を明示して削除することで、あとからコードを見た人にも意図が伝わります。また、どの列が消えるのかがはっきりするため、レビューしやすくなります。
ステップ4:削除後の表構造を確認する
列削除が終わったら、その結果としてどの列が残っているかを必ず確認してください。初心者は削除できたこと自体で安心しがちですが、実務では「消した後に必要な列だけがきちんと残っているか」が重要です。
特に次の観点で確認すると安全です。
- 必要なキー列が残っているか
- 集計に必要な数値列が残っているか
- 後で結合する列が消えていないか
- 本当に消したかった列だけが消えているか
基本例題:不要な管理列を削除する
よくある業務データの例
たとえば、売上データに次のような列があるとします。
- 受注番号
- 商品名
- 単価
- 数量
- 売上金額
- 備考
- 更新者
- 取込日時
この中で、分析に不要な「備考」「更新者」「取込日時」を削除したいとします。
let
Source = 売上テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"備考", "更新者", "取込日時"} // 分析に不要な管理用列を削除する
)
in
RemovedColumnsPower Queryこのように、列削除そのものは難しくありません。しかし実務では、この前後の考え方が重要です。たとえば「取込日時」は今は不要でも、最新データだけを判定したいときに必要になるかもしれません。そのため、本当に削除してよいかは業務目的で判断します。
最初から必要列だけを残すという考え方
実務では「不要な列を削除する」という発想だけでなく、「必要な列だけを残す」という考え方も非常に有効です。対象列が多いデータでは、この方法のほうが安全な場合があります。
Power Queryでは Table.SelectColumns を使うと、必要な列だけを明示して残せます。
let
Source = 売上テーブル,
SelectedColumns = Table.SelectColumns(
Source,
{"受注番号", "商品名", "単価", "数量", "売上金額"} // 必要な列だけを残す
)
in
SelectedColumnsPower Queryこの方法は、元データに新しい不要列が増えても自動で除外されやすいという利点があります。一方で、必要な列が名前変更された場合はエラーになりやすいため、どちらが向いているかは運用次第です。
実務でよくある列削除の場面
集計前に中間列を削除する
Power Queryでは、途中計算のために一時的な補助列を作ることがあります。たとえば、日付を年と月に分解してから再結合したり、判定用のフラグ列を中間的に作ったりするケースです。
そのような補助列が最終成果物に不要なら、最後に削除して見やすく整えます。
let
Source = 売上テーブル,
AddedYear = Table.AddColumn(
Source,
"年",
each Date.Year([売上日]), // 売上日から年を取り出す
Int64.Type
),
AddedMonth = Table.AddColumn(
AddedYear,
"月",
each Date.Month([売上日]), // 売上日から月を取り出す
Int64.Type
),
RemovedHelperColumns = Table.RemoveColumns(
AddedMonth,
{"年", "月"} // 最終的に不要な補助列を削除する
)
in
RemovedHelperColumnsPower Queryただし、本当に最後まで不要かどうかは確認が必要です。補助列はトラブル調査やロジック説明に役立つこともあるため、見やすさだけで消してしまわないように注意してください。
個人情報や機密情報を早めに除外する
情報セキュリティの観点では、不要な個人情報や機密情報は、使わないと判断した時点で早めに除外するのが基本です。たとえば分析には顧客名が不要で、顧客IDだけで十分なら、氏名や電話番号、メールアドレスなどは後工程に渡さない設計が望ましいです。
これは単に見た目を整理するためではなく、データ最小化の考え方に基づく重要な実務上の判断です。扱う情報量が少ないほど、漏えいや誤利用のリスクも下げやすくなります。
let
Source = 顧客テーブル,
RemovedSensitiveColumns = Table.RemoveColumns(
Source,
{"氏名", "電話番号", "メールアドレス"} // 分析不要な個人情報を削除する
)
in
RemovedSensitiveColumnsPower Query初心者のうちから、「使わない情報は持ち続けない」という意識を持っておくと、より安全なデータ処理設計ができるようになります。
外部システム由来の不要列を整理する
基幹システムやSaaSから出力したCSVには、実務上使わない管理列が大量に含まれていることがあります。たとえば内部ID、更新カウンタ、削除フラグ、同期日時、表示順などです。
このような列は放置すると、必要な列が埋もれて見づらくなり、誤って使うリスクも高まります。不要と判断できるものは早めに整理すると、後続処理がかなり見やすくなります。
重要なので深掘りしたい注意点
列削除は後戻りできるが、安易にしてはいけない
Power Queryは元データを直接壊さないため、列削除しても元ファイルが消えるわけではありません。その意味では後戻りしやすいです。しかし、だからといって安易に削除してよいわけではありません。
削除した列が後続ステップで必要だったり、後日要件変更で必要になったりすると、クエリ修正の手間が増えます。特にチーム運用では、自分には不要でも別の担当者には必要というケースがあります。削除は簡単ですが、判断は慎重に行うべきです。
列名変更に弱いことを理解する
Table.RemoveColumns は列名を指定して削除するため、元データの列名が変わるとエラーになります。たとえば「備考」列が「コメント」に変わっただけで、今まで動いていた処理が壊れることがあります。
そのため実務では、元データの列名がどの程度安定しているかを把握しておくことが重要です。もし列名変更が起こりやすい環境なら、取り込み直後に列名を標準化する設計が有効です。
削除対象が存在しない場合のエラーに注意する
初心者が意外と見落としやすいのが、削除しようとした列が存在しない場合のエラーです。データ出力元によっては、ある月だけ列が存在しないこともあります。その場合、単純な削除コードは失敗します。
こうした変動のあるデータを扱う場合は、存在する列だけを削除する工夫が有効です。たとえば MissingField.Ignore を使う書き方があります。
let
Source = 売上テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"備考", "更新者", "取込日時"},
MissingField.Ignore // 対象列が存在しなくてもエラーにしない
)
in
RemovedColumnsPower Queryこの書き方は非常に実務的です。出力元の仕様が安定しないデータでは、クエリを壊れにくくするために役立ちます。ただし、必要な列が本当に欠けていても見逃す可能性があるため、何でも無条件に無視すればよいわけではありません。どの列は必須で、どの列は任意かを切り分けて考える必要があります。
必要列を残す方式と不要列を削除する方式を使い分ける
実務では次の2つの考え方があります。
- 不要な列を指定して削除する
- 必要な列だけを指定して残す
それぞれに向き不向きがあります。
- 不要列が少ないなら削除方式が分かりやすいです
- 必要列が少なく、元データの列数が多いなら残す方式が安全です
- 元データに新しい列が増えやすいなら残す方式が安定しやすいです
- 必要列の構成が頻繁に変わるなら削除方式のほうが柔軟なこともあります
初心者はまず削除方式から覚えると理解しやすいですが、実務では残す方式も同じくらい重要です。両方を使い分けられるようになると、データ整形の設計力が大きく上がります。
GUI操作とMコードの関係を理解する
画面での削除操作はMコードに変換される
Power Queryエディターで列を右クリックして削除すると、その操作はM言語に変換されて記録されます。初心者の方は、まず画面で削除してみて、そのあと数式バーや詳細エディターでコードを確認すると理解しやすいです。
「GUIでしかできないこと」と「コードでしかできないこと」が完全に分かれているわけではありません。多くの操作はGUIから始めて、必要に応じてコードで微調整する流れが現実的です。
ステップ名も分かりやすくすると保守しやすい
Power Queryでは、ステップ名がそのまま処理意図の説明になります。たとえば RemovedColumns という名前でも意味は通じますが、実務ではもう少し具体的にしてもよいです。
let
Source = 売上テーブル,
RemovedManagementColumns = Table.RemoveColumns(
Source,
{"備考", "更新者", "取込日時"} // 管理用途の不要列を削除する
)
in
RemovedManagementColumnsPower Queryステップ名を少し丁寧にするだけで、あとから読み返したときの理解しやすさが大きく変わります。
すぐ使える実務テンプレート集
テンプレート1:特定の不要列を削除する
let
Source = 元テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"不要列1", "不要列2"} // 不要な列を明示して削除する
)
in
RemovedColumnsPower Queryテンプレート2:列がなくてもエラーにしない安全な削除
let
Source = 元テーブル,
RemovedColumns = Table.RemoveColumns(
Source,
{"不要列1", "不要列2"},
MissingField.Ignore // 削除対象が存在しない場合は無視する
)
in
RemovedColumnsPower Queryテンプレート3:必要な列だけを残す
let
Source = 元テーブル,
SelectedColumns = Table.SelectColumns(
Source,
{"必要列1", "必要列2", "必要列3"} // 必要な列だけを残す
)
in
SelectedColumnsPower Queryテンプレート4:個人情報を除外する
let
Source = 元テーブル,
RemovedSensitiveColumns = Table.RemoveColumns(
Source,
{"氏名", "住所", "電話番号", "メールアドレス"} // 利用しない個人情報を削除する
)
in
RemovedSensitiveColumnsPower Queryテンプレート5:補助列を最後に削除する
let
Source = 元テーブル,
AddedHelperColumn = Table.AddColumn(
Source,
"補助列",
each [数値列1] * [数値列2], // 一時的な計算用列を追加する
type number
),
RemovedHelperColumn = Table.RemoveColumns(
AddedHelperColumn,
{"補助列"} // 最終成果物に不要な補助列を削除する
)
in
RemovedHelperColumnPower Queryまとめ
Power Queryで列を削除する操作は、ただ不要なものを消すだけではありません。表構造を整理し、処理を軽くし、必要な情報だけに絞り込み、場合によっては個人情報や機密情報を後続工程から守るという重要な役割を持っています。
初心者が特に意識したいのは、次のポイントです。
- 本当に不要な列なのかを最初に確認すること
- 後続ステップで使っていないかを確認すること
- 列名ベースの処理なので名前変更に注意すること
- 存在しない列を削除するとエラーになることがあること
- 必要列だけを残す方法も状況に応じて使い分けること
実務では、列削除は見た目の整理よりも、設計判断としての意味が大きいです。だからこそ、単に削除できたかどうかではなく、「なぜその列を削除するのか」「本当に今消してよいのか」を考えながら進めることが大切です。
まずは簡単な不要列の削除から始めて、次に必要列だけを残す方法や、MissingField.Ignore を使った壊れにくい書き方にも慣れていくと、現場で通用するPower Query力がしっかり身についていきます。

