更新が失敗した理由
更新ボタンを押して最新の数値が表示されるのを期待したのに、代わりに赤いエラーバーが表示されてしまった。この特定のエラーはデータ処理を完全に停止させます。これは Power Query が厳格であるために起こります。例えば「Revenue」という名前の列を想定しているのに、代わりに「Total Revenue」が見つかった場合、Power Query はどのように処理を進めればよいか判断できなくなります。
DataFormat.Error: The column 'ColumnName' of the table wasn't found.
なぜこれが発生するのか
Power Query(M言語)は、ほぼすべての変換ステップで列名をハードコード(直接記述)します。ソースファイルがわずかに変更されただけでも、クエリは破損します。主な原因は以下の通りです。
- **ヘッダー名の変更:** ソースの CSV で同僚が「ID」を「Customer_ID」に変更した。
- **「変更された型」の罠:** データを最初にインポートすると、Power Query はすべての列名をリスト化するステップを自動的に追加します。後で1つの列が消えると、このステップは失敗します。
- **大文字と小文字の区別:** Power Query にとって、「Date」と「date」は完全に別の列です。
- **見えない文字:** ヘッダーの末尾にスペースがある場合(例:「Total 」)、クエリが「Total」を探すと不一致になります。
修正方法
方法1:「変更された型」ステップを修復する
ほとんどの場合、エラーはデータソースやヘッダーの昇格の直後にある「変更された型」ステップに存在します。
- [データ] タブから **Power Query エディター** を開きます。
- 右側の **[適用したステップ]** ペインを確認します。赤いエラーメッセージが表示されるまでステップを順にクリックします。
- **数式バー** を確認します。おそらく次のようなコードが表示されています。
```
= Table.TransformColumnTypes(Source, {{"Old_Name", type text}, {"Sales", Int64.Type}})
- `"Old_Name"` をソースファイルの現在のヘッダーに合わせて更新します。
- 列が多数あり、1つずつ修正したくない場合は、単に「変更された型」ステップを削除し、実際に必要な列にのみ型を再適用してください。
### 方法2:ソースファイルを合わせる
クエリのロジックが複雑で、見つからない列が10箇所で参照されているような場合は、コードを直すよりもソースファイルを修正する方が早いです。
- ソースの Excel または CSV ファイルを開きます。
- ヘッダーがエラーメッセージの `'ColumnName'` と完全に一致しているか確認します。先頭や末尾のスペースに注意してください。
- ソースを保存し、メインのレポートを更新します。
### 方法3:動的参照で将来のエラーを防ぐ
列がなくなってもエラーにならないように、クエリをよりスマートにすることができます。Mコードに `MissingField.Ignore` を追加することで、列がなくても処理を続行するよう Power Query に指示できます。
標準的な選択ステップを次のように変更します。
= Table.SelectColumns(#"Previous Step", {"Region", "Sales"})
これを次のように変更します:
= Table.SelectColumns(#"Previous Step", {"Region", "Sales"}, MissingField.Ignore)
これにより、致命的なクラッシュを防ぐことができます。クエリは単に見つからない列を無視します。ただし、後のステップがそのデータに依存しているかどうかを確認する必要があるかもしれません。
### 方法4:動的な名前変更
ソースで名前が変わる可能性がある列の名前を変更する場合は、次の構文を使用します:
= Table.RenameColumns(#"Previous Step", {{"OldName", "NewName"}}, MissingField.Ignore)
## 解決策のテスト
データが再び流れるようになったか、以下の手順で確認してください:
- Power Query エディター内で **[プレビューの更新]** をクリックします。データグリッドにエラーなくデータが表示されれば、ローカルの問題は解決しています。
- **[閉じて読み込む]** を選択します。
- メインの Excel シートで、テーブルを右クリックして **[更新]** を選択します。
- **[クエリと接続]** ペインを確認します。緑色のチェックマーク、または「最終更新 10:45 AM」のような成功のタイムスタンプが表示されるはずです。
## 効率的なETLのためのプロのヒント
- **自動検出を停止する:** *[ファイル] > [オプションと設定] > [クエリのオプション] > [データ ロード]* に移動します。「非構造化ソースの列の型とヘッダーを検出する」のチェックを外します。これにより、Power Query が壊れやすい「変更された型」ステップを自動的に作成するのを防げます。
- **位置で参照する:** ソースファイルのヘッダーが毎週変わるが順序は同じである場合、`Table.ColumnNames(Source){0}` を使用して、名前に関係なく最初の列を取得します。
- **早めにヘッダーをクリーニングする:** 最初のステップとして `Table.TransformColumnNames(Source, Text.Trim)` を使用し、エラーの原因になりやすい偶発的なスペースを削除します。

