Power Queryで列のデータ型を変えたり、計算する列を追加したりすると、一部のセルに「Error」と表示されることがあります。ここですぐに「エラーの削除」を実行すると、エラーを含む行が行ごと消えます。その結果、件数や合計がいつの間にか変わってしまいます。
エラーへの対処は、次の順番で進めると安全です。
- どの列に何件エラーがあるかを把握する
- 「エラーの保持」でエラー行だけを抜き出し、原因を見る
- 原因を「データの問題」と「クエリの作りの問題」に分ける
- 原因ごとに「元データを直す」「置き換える」「除外する」を決める
- 処理の前後で行数を比べ、除外した行を記録に残す
この記事で扱うのは、一部のセルや行がエラーになる場合です。更新そのものが止まってクエリ全体を読み込めない場合は、原因の切り分け方が違うため、別に確認してください。
1. エラーの件数と場所を把握する
列の品質で、エラーのある列を見つける
Power Queryエディターの[表示]タブで「列の品質」にチェックを入れると、各列の見出しの下に「有効」「エラー」「空」の割合が表示されます。エラーが0%でない列が確認の対象です。
この割合は、既定では先頭1000行をもとに計算されます。画面下のステータスバーにある「上位 1000 行に基づく列のプロファイル」をクリックし、「データセット全体に基づく列のプロファイル」に切り替えると、全行が対象になります。行数が多いと表示に時間がかかることがあります。表記はバージョンによって異なる場合があるので、画面で確認してください。
エラーのセルをクリックして内容を読む
「Error」と表示されたセルの、文字以外の余白部分をクリックすると、画面下部にエラーの詳細が表示されます。「DataFormat.Error」「Expression.Error」などの種類と説明文、変換できなかった値などが表示されることがあります。
「Error」の文字そのものをクリックすると、そのエラーを表示するステップが追加される場合があります。追加されたステップは、確認が終わったら[適用したステップ]から削除しておきます。
シートに読み込んだ後は「エラー件数」の表示に注意する
エラーのセルは、シートに読み込むと空白のセルとして表示されます。シートだけを見ていると、エラーがあったことに気づきにくくなります。
[データ]→[クエリと接続]ウィンドウで、クエリ名の下に、読み込まれた行数とあわせてエラーの件数が出ていないかを確認します。件数の表示をクリックすると、エラー行を確認するためのクエリが作られる場合があります。
2. 「エラーの保持」でエラー行だけを抜き出す
元のクエリを直接変えず、確認用のクエリを分けて作ります。
- [クエリ]ウィンドウで元のクエリを右クリックし、「参照」を選ぶ
- 新しくできたクエリに「エラー確認」などの名前を付ける
- エラーのある列を選ぶ(複数の列はCtrlキーを押しながらクリック)
- [ホーム]→[行の保持]→「エラーの保持」を選ぶ
数式バーには、次のような式が入ります。
= Table.SelectRowsWithErrors(ソース, {"金額", "日付"})
2つ目の引数は対象の列です。ここを省略すると、どれか1列でもエラーがある行がすべて対象になります。意図した列が入っているかを数式バーで確認してください。
エラーの内容を列にして一覧で見る
エラーが多いと、1件ずつクリックして読むのは手間がかかります。[列の追加]→「カスタム列」で次の式を入れると、エラーの説明文を列として並べられます。
let r = try [金額] in if r[HasError] then r[Error][Message] else null
try を otherwise なしで使うと、結果はレコードになります。このレコードには「HasError(エラーかどうか)」と、成功したときは「Value」、失敗したときは「Error」が入ります。Error の中には、エラーの種類を表す Reason や、説明文の Message があります。種類を見たい場合は、式の Message を Reason に変えます。
元の値もいっしょに見る
型の変更で失敗したセルは「Error」になるため、元の値がそのセルからは見えません。何という値で失敗したかを見たいときは、元のクエリで型を変更するステップより前に、対象の列を右クリック→「列の複製」で写しを作っておきます。複製した列は型が変わらないので、確認用のクエリで元の値と並べて見られます。
原因が分かって処理を決めたら、不要になった複製列は削除します。
3. 原因を分ける
エラーの内容と元の値を見ると、原因はおおむね次のように分けられます。
| 起きていること | 元の値の例 | 考えられる原因 |
|---|---|---|
| 数値に変換できない | 「未定」「-」「1,200円」「※確認中」 | 数値の列に文字・単位・記号が入っている |
| 日付に変換できない | 「4/1頃」「2026/13/01」「令和8年4月1日」 | 存在しない日付、書き方の違い、地域設定の違い |
| 計算列がエラーになる | 単価が「1,000」というテキストのまま | 計算に使う列の型がそろっていない |
| ほぼ全行がエラーになる | どの行も失敗している | 型の指定・地域設定・列名の変更など、クエリ側の問題 |
見分けるときのポイントは、エラーが「一部の行のデータの問題」か、「クエリの作りの問題」かです。数件だけなら元データの値を疑います。大半の行がエラーなら、データより先に型変換のステップや列名の変更を疑います。
4. 処理方法を選ぶ
原因が分かったら、次の表を目安に処理を決めます。
| 状況 | 向いている処理 | 注意点 |
|---|---|---|
| 元データの入力ミスで、直せる | 元データを修正する | 次回も同じ値が入るなら入力ルールも見直す |
| 「未定」など、値がまだ決まっていない | null に置き換える | 0にすると合計や平均が変わる |
| 業務上、0として扱うと決まっている | 0 に置き換える | 誰がそう決めたかを残しておく |
| 注記行や小計行など、集計の対象外 | 除外する | 除外した行を一覧で残す |
| 原因が分からない | まだ処理しない | 確認できるまでエラーのまま残す |
「エラーを消すこと」を目的にすると、原因の分からない行まで消したり0にしたりしがちです。処理の前に、その値が何を意味するのかを決めておきます。
try otherwise で、変換するときに置き換える
型の変更でエラーにしてから置き換えるより、変換するときに「失敗したら別の値にする」と書くほうが、元の列を残したまま扱えます。[列の追加]→「カスタム列」で作るか、数式バーに次のように書きます。
= Table.AddColumn(ソース, "金額_数値", each try Number.From([金額]) otherwise null, type nullable number)
元の「金額」列はそのまま残り、変換できなかった行だけ「金額_数値」が null になります。続けて、変換に失敗したことを示す列も作っておくと、失敗した行だけを後から抜き出せます。
= Table.AddColumn(金額変換, "金額_変換失敗", each [金額] <> null and [金額_数値] = null, type logical)
「金額変換」の部分は、直前のステップ名に合わせてください。
注意したいのは、try otherwise は失敗の理由を区別しない点です。「未定」も「1,200円」も、同じように null になります。意味の違う失敗を同じ値にまとめてよいかを、手順3で確認してから使います。また、「1,200」のような桁区切りや小数点の解釈は地域設定に左右されることがあります。変換後の値を何件か、元の値と見比べてください。
新しいバージョンのPower Queryでは、try ... catch の書き方を使って、エラーの内容に応じて返す値を変えられる場合もあります。使えるかどうかは、お使いのExcelで実際に式を入れて確認してください。
エラーの置換で、エラーになった列を置き換える
すでにエラーになっている列は、列を右クリック→「エラーの置換」で、エラーの代わりに入れる値を指定できます。
= Table.ReplaceErrorValues(変更された型, {{"金額", null}})
置き換えた後は、どこがエラーだったかが見えなくなります。置き換える前に、手順2の確認用クエリで件数と内容を控えておきます。
エラーの削除で、行ごと除外する
集計の対象外と決めた行は、列を選んで[ホーム]→[行の削除]→「エラーの削除」で除外します。数式バーには Table.RemoveRowsWithErrors の式が入ります。
この操作は、選んだ列にエラーがある行を「行ごと」消します。金額だけがエラーの行でも、その行の日付や取引先も集計から消えます。また、列を選ばずに実行すると、どれか1列でもエラーがある行がすべて消えます。
5. 行が黙って消えていないか確かめる
行数を比べる
除外した場合は、次の関係が成り立つかを確認します。
- 処理前の行数 = 処理後の行数 + 除外した行数
行数は、対象のクエリを「参照」して新しいクエリを作り、[変換]→「行のカウント」を選ぶと確認できます。シートへの読み込み後であれば、[クエリと接続]ウィンドウに表示される行数でも確認できます。
除外した行をシートに残す
手順2で作ったエラー確認用のクエリを、別のシートに読み込んでおきます。更新のたびに何件除外されたかが見えるため、元データに新しい種類の誤りが入ったときにも気づけます。エラーがなければ、見出しだけの空の表になります。
置き換えた場合は件数と合計を見る
null や 0 への置き換えでは行数が変わらないため、行数を比べても気づけません。「金額_変換失敗」の列で TRUE になっている件数と、置き換え後の合計金額を控えておきます。前回の更新と比べて、大きく変わっていないかを見ます。
まとめ:処理前に確認すること
- 「列の品質」で、エラーのある列と割合を確認した(必要なら全行を対象に切り替えた)
- 「エラーの保持」で、エラー行だけの確認用クエリを作った
- エラーの内容と元の値を見て、データの問題かクエリの問題かを分けた
- 原因ごとに、修正・置き換え・除外のどれにするかを決めた
- 置き換える値(null か 0 か)の意味を決めた
- 処理前後の行数、または置き換えた件数と合計を確認した
- 除外した行を、後から見られる形で残した
