【Power Query】データクレンジング入門 — null削除・文字列統一・型変換の実践パターン

この記事は約11分で読めます。

この記事で分かること

  • Power Query でよく使うデータクレンジングの操作パターン5つ
  • null・空白行の削除方法
  • 全角・半角の統一方法
  • 文字列に混入したスペースの除去方法
  • 数値・日付の型変換がうまくいかないときの原因と対処
  • 列の分割(区切り文字で分ける)方法

「取り込んだデータが汚くてそのまま集計できない」「VLOOKUPで一致しない」という問題の多くは、データクレンジングで解決できます。


どんな場面で使うか

  • システム出力CSVに空白行や不要なヘッダー行が混入している
  • 型番や品番に全角・半角が混在していて一致しない
  • 「田中 太郎」のように氏名にスペースが混入していてフィルターできない
  • 日付列が「20250401」(8桁の数字)や「2025年4月1日」(テキスト)になっていて計算できない
  • 「東京都新宿区〇〇1-2-3」という住所から都道府県だけ取り出したい

基本説明

データクレンジングとは、取り込んだデータの「汚れ」を取り除いて、集計や参照に使いやすい状態に整える作業です。

Excel の関数(TRIM・SUBSTITUTE・VALUE など)でも同じことはできますが、Power Query のメリットは設定が記録されて再実行できる点です。毎月データを更新するなら Power Query でクレンジングを自動化するほうが、関数を毎回設定するより効率的です。


手順

① null・空白行を削除する

null の削除(特定列)

  1. null を含む列のヘッダーの▼をクリック
  2. 「(null)」のチェックを外す → OK

または、列を右クリック →「値の置換」で null を空文字に置き換えることもできます。

空白行の一括削除

リボンの「ホーム」タブ →「行の削除」→「空白行の削除」を選択します。行全体が空白(すべての列がnull)の行が削除されます。

特定列がnullの行を削除したい場合は、その列でフィルターをかけて null を除外します。

② 全角・半角を統一する

品番やコードに全角・半角が混在していると、VLOOKUP や Power Query の結合で一致しなくなります。

  1. 統一したい列を選択
  2. リボンの「変換」タブ →「書式」をクリック(「小文字」「大文字」「各単語の先頭文字を大文字にする」「トリミング」「クリーン」「プレフィックスの追加」「サフィックスの追加」がこのメニューに並びます)

ただし Power Query のリボン上のボタンでは、全角→半角(または半角→全角)の直接変換は標準メニューにありません。この場合は「カスタム列の追加」から M 言語の関数を使います。

Power Query の M 言語には、全角を半角へ一括変換する標準関数はありません。混在している文字の種類を洗い出して、Text.Replace を必要な数だけ重ねる形になります。

= Text.Replace(Text.Replace([品番], "-", "-"), "A", "A")

この式をカスタム列として追加する操作は次のとおりです。

  1. リボンの「列の追加」タブ →「カスタム列」をクリック
  2. 「新しい列名」に 品番_半角 と入力する(元の列と同じ名前は付けられません)
  3. 「カスタム列の式」の欄に上の式を入力する。[品番] は手入力せず、右の「使用できる列」で 品番 をダブルクリックして挿入する
  4. ダイアログ下部に「構文エラーが検出されませんでした」と出ていることを確認して「OK」をクリック
  5. 追加された 品番_半角 列を選択し、「変換」タブ →「データ型」→「テキスト」を選ぶ(カスタム列は型が未設定のまま作られるため、ここで指定しておきます)
  6. 元の「品番」列の見出しを右クリック →「列の削除」
  7. 品番_半角 の見出しを右クリック →「名前の変更」→ 品番 に変更

内側の Text.Replace から順に適用されるので、置換したい文字が増えるほど入れ子が深くなります。3つ以上になったら、カスタム列ではなく「値の置換」を必要な回数繰り返すほうが読みやすくなります(変換対象の全角文字 → 半角文字を1件ずつ設定する)。ステップ名に置換内容が残るので、後から見たときにどの文字を潰したのかが追えるという利点もあります。

どの文字が混ざっているかは、事前に確認しておきます。 対象列の右にあるフィルターボタンを押すと値の一覧が出るので、見た目が同じでも別扱いされている値(A-001A-001 が別行に並ぶ、など)がここで分かります。この確認を飛ばすと、片方だけ置換して「まだ一致しない」という状態になります。

③ 文字列に混入したスペースを除去する

氏名や住所にスペース(半角・全角)が混入していると、検索や照合でうまくいかないことがあります。

前後のスペースを削除する(Trim)

  1. 対象の列を選択
  2. リボンの「変換」タブ →「書式」→「トリミング」を選択

これで列の値の前後にある空白が削除されます。ただし文字列中間のスペースは削除されません(「田中 太郎」の中間スペースは残ります)。

中間のスペースも含めてすべて削除したい場合は「値の置換」で全角スペース → 空文字、半角スペース → 空文字、の順に置換します。両方やる必要があります。 氏名の区切りは入力した人によって全角・半角が分かれるので、片方だけ置換すると、見た目では気づけないまま一部の行が未処理で残ります。

④ 数値・日付の型変換がうまくいかないときの対処

「テキスト」から「整数」に変換するとエラーが出る

数値に見えても、実際には「1,000」(カンマ入り)や「10円」(単位付き)など数値として解釈できない値が混入していることがあります。

対処:

  • 「値の置換」でカンマや単位を除去してから型変換する
  • 変換後に残った Error 行はフィルター →「エラーの削除」で除外する

日付が「20250401」(8桁数字)になっている

「20250401」のままでは、その列に「日付」型を指定しても変換できません(Error になります)。リボンの「列の追加」タブ →「カスタム列」を選び、開いたダイアログで以下の式を使います([検査日] の部分は、自分のデータの列名に読み替えてください)。

= Date.FromText(Text.From([検査日]), [Format="yyyyMMdd"])

カスタム列の追加ダイアログ

ダイアログは上に「新しい列名」の入力欄、中央に「カスタム列の式」の入力欄、右に「使用できる列」の一覧という構成です。右の一覧で列名をダブルクリックすると、式の中に [列名] の形で挿入されます(手入力すると角かっこの付け忘れでエラーになりやすいので、この方法が確実です)。ダイアログ下部にエラーがあれば赤字で表示されるので、「構文エラーが検出されませんでした」と出ていることを確認してから「OK」を押します。

カスタム列を追加しただけでは日付になりません(型の指定まで必要)

カスタム列は、式の結果が何であってもデータ型が未設定(「任意」)の列として作られます。列見出しの左のアイコンが ABC123 のままで、日付としては扱われていません。この状態だと日付フィルター(年・四半期・月での絞り込み)が使えず、シートに読み込んだときに 45748 のような数値で表示されることがあります。「OK」を押したら、続けて型を指定します。

  1. 追加された列の見出しをクリックして選択する
  2. リボンの「変換」タブ →「データ型」→「日付」を選ぶ(列見出し左の ABC123 アイコンをクリックして「日付」を選んでも同じです)
  3. 見出し左のアイコンがカレンダーの形に変わり、値が 2025/04/01 の表示になったことを確認する

元の8桁数字の列はもう使わないので、見出しを右クリック →「列の削除」で消し、追加した列を右クリック →「名前の変更」で元の列名に付け替えておくと、この後の集計で列名がそのまま使えます。

「2025年4月1日」形式のテキストを日付に変換する

「変換」タブ →「日付」→「解析」を使うか、カスタム列で Date.FromText に適切なフォーマット文字列を渡します。うまくいかない場合は「値の置換」で「年」→「/」「月」→「/」「日」→空文字に置換してから「日付」型に変換する方法がシンプルです。

⑤ 列を区切り文字で分割する

「東京都新宿区〇〇1-2-3」のような住所から都道府県だけ取り出したり、「A-001-2025」のようなコードを分解したりする場合に使います。

  1. 分割したい列を選択
  2. リボンの「ホーム」または「変換」タブ →「列の分割」→「区切り記号による分割」を選択
  3. 区切り文字(-/ など)を入力し、「最も左の区切り記号」または「各出現箇所」など分割方法を選ぶ

分割後は不要になった列を削除し、必要な列だけ残します。


サンプル例

製造現場の検査結果データを整形する例です。

元データ(システム出力そのままの抜粋。  は全角スペース):

品番,ロットNo,検査日,測定値,判定,担当
A-001,L0042,20250401,10.2,OK,田中 太郎
A-002,L0043,20250402,9.8,OK,佐藤 花子
,,,,,
A-001,L0047,20250408,10.3,OK,田中 太郎

問題点:

  • 品番に全角ハイフン が混在(A-001
  • 品番に全角英字 も混在A-001)。ハイフンだけ直しても一致しない
  • 空白行あり
  • 検査日が8桁数字(テキスト)
  • 担当者名にスペースが混入。全角(田中 太郎)と半角(佐藤 花子)の両方がある

品番は見た目がほぼ同じなのに A-001A-001A-001 の3種類に分かれています。この状態で集計すると、同じ品番が別物として3行に分かれます。

Power Query での整形:

  1. 空白行を削除(ホーム →「行の削除」→「空白行の削除」)
  2. 「品番」列の全角ハイフン を半角 - に置換(「値の置換」)
  3. 「品番」列の全角英字 を半角 A に置換(「値の置換」)
  4. 「検査日」列を日付に変換(カスタム列 → データ型を「日付」に変更 → 元の列を削除 → 名前を戻す。操作は下記)
  5. 「担当」列の全角スペース   を空文字に置換(「値の置換」)
  6. 「担当」列の半角スペース を空文字に置換(「値の置換」)

2と3、5と6のように置換を分けているのは、1回の「値の置換」で扱えるのが1組だけだからです。 混在している文字の種類だけステップが増えます。手順3や手順6を飛ばすと、品番は A-001 が、担当は 佐藤 花子鈴木 一郎(半角スペース区切りの名前すべて)が未処理のまま残ります。

手順4の具体的な操作

  1. リボンの「列の追加」タブ →「カスタム列」をクリック
  2. 「新しい列名」に 検査日_日付形式 と入力する
  3. 「カスタム列の式」に = Date.FromText(Text.From([検査日]), [Format="yyyyMMdd"]) と入力する([検査日] は右の「使用できる列」からダブルクリックで挿入)
  4. 「構文エラーが検出されませんでした」を確認して「OK」をクリック
  5. 追加された 検査日_日付形式 列を選択し、「変換」タブ →「データ型」→「日付」を選ぶ
  6. 元の「検査日」列の見出しを右クリック →「列の削除」
  7. 検査日_日付形式 の見出しを右クリック →「名前の変更」→ 検査日 に変更

手順5(型の指定)を飛ばすと、見た目は日付でも列の型は未設定のままです。 日付での絞り込みや月別集計ができず、シートに読み込んだときに 45748 のような数値で出ることがあります。手順6・7(元の列の削除と名前の変更)を飛ばすと、検査日(8桁数字)と 検査日_日付形式(日付)が並んだままシートに出ます。 どちらを使うのか後から分からなくなるので、この時点で片付けておきます。


よくあるエラー

型変換後に「Error」が大量に出る

値に予期しない文字(カンマ・単位・スペース)が含まれているのが原因です。Error のセルをクリックすると原因の値が確認できます。まず「値の置換」で不要な文字を除去してから型変換してください。

「トリミング」しても空白が残る

全角スペース( )は「トリミング」では削除されません。全角スペースを除去するには「値の置換」で全角スペース → 空文字の置換を行います。

日付にしたはずが 45748 のような数値で表示される

カスタム列は型が未設定のまま作られるため、Date.FromText の結果でも日付列としては扱われません。追加した列を選んで「変換」タブ →「データ型」→「日付」を指定してください。Power Query 側で日付型にしてもシート上で数値のままなら、そちらはセルの表示形式です。列を選んで「ホーム」タブ →「数値」グループの表示形式を「短い日付形式」に変えます。

日付の型変換後に日付がずれる

元データのタイムゾーン設定や日付形式の解釈が原因のことがあります。「変換」タブ →「日付と時刻」→「日付のみ」で時刻部分を切り捨てる、またはカスタム列で Date.From([列名]) を使う方法を試してください。


まとめ

Power Query のデータクレンジングでよく使う操作をまとめます。

問題 対処
null・空白行がある 「行の削除」→「空白行の削除」またはフィルター
全角・半角が混在 「値の置換」で統一
前後のスペース 「変換」→「書式」→「トリミング」
数値型に変換できない 不要文字を「値の置換」で除去してから型変換
日付が8桁数字 カスタム列で Date.FromText → 「データ型」で「日付」を指定
1列を分割したい 「列の分割」→「区切り記号による分割」

データが「汚い」状態のまま集計や参照をしても正しい結果が得られません。Power Query でクレンジングをパターン化しておくと、毎月の前処理が大幅に短縮できます。


関連記事


対応バージョン: Excel 2016 以降(Microsoft 365 推奨)

サンプルファイル

記事中で使用しているサンプルデータはこちらからダウンロードできます。

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