ADVERTISEMENT

【Excel】Power Queryで複数CSVの列数が違う時の結合エラー対処法

【Excel】Power Queryで複数CSVの列数が違う時の結合エラー対処法
🛡️ 超解決

Power Queryを使って複数のCSVファイルを結合しようとしたとき、「列が見つかりません」というエラーで止まってしまうことがあります。これは各CSVの列数や列名が完全に一致していない場合に発生する問題です。特に、異なるシステムから出力されたCSVを一つのテーブルにまとめたいケースではよく起こります。例えば、東日本支店の売上データと西日本支店の顧客データを結合する場合、一方にしかない列があるとエラーになります。この記事では、列数が異なるCSVをPower Queryで正しく結合するための具体的な対処法を、手順を交えて解説します。

【要点】この記事で確認すること

  • 最初に見る場所: エラーメッセージに表示される列名、および各CSVの列構成を確認してください。Power Queryエディターの「ソース」ステップで各ファイルの列数が違っていないか確認できます。
  • 切り分けの軸: 列数が違うのか、列名が違うのか、データ型が違うのかを特定しましょう。エラーの種類によって対処法が変わります。
  • 注意点: 会社PCのPower Query設定を変更する前に、共有フォルダのアクセス権やCSV生成元のルールを管理者へ確認してください。また、元のCSVファイルは変更せず、Power Query上で加工することをおすすめします。

ADVERTISEMENT

1. 結合エラーの原因を理解する

Power Queryは、「フォルダーからデータ取得」機能を使って複数のCSVを自動的に結合します。このとき、最初に読み込んだファイルの構造(列名、データ型)を基に、後続のファイルを変換しようとします。そのため、2つ目以降のファイルに最初のファイルと異なる列が存在すると、エラーが発生します。具体的なエラーメッセージは「Expression.Error: 列 ‘○○’ が見つかりませんでした。」や「DataFormat.Error: 列 ‘△△’ の変換中にエラーが発生しました。」などです。これらのエラーは、Power Queryが暗黙的に列名の一致を前提としているために起こります。

原因は主に次の3つに分類されます。

  • 列数の不一致: あるCSVには存在する列が別のCSVにはない場合。例えば、ファイルAに「住所」列があり、ファイルBにないケースです。
  • 列名の不一致: 同じ内容を指す列でも、スペルや大文字小文字、アンダースコアの有無などが異なる場合。「顧客名」と「CustomerName」などが該当します。
  • データ型の不一致: 同じ列名でも、数値として読み込まれたり文字列として読み込まれたりする場合。Power Queryは最初のファイルのデータ型を基に変換するため、後続のファイルで型変換に失敗するとエラーになります。

これらの原因を特定するには、Power Queryエディターで「ソース」ステップの前に「変換されたファイル」テーブルを展開し、各ファイルの列構成を個別に確認するとよいでしょう。具体的には、クエリの「変換されたファイル」を複製し、展開操作を削除することでファイルごとの列名をリストアップできます。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

2. 列数が異なる場合の3つの対処法

列数が異なるCSVを結合するには、以下の3つの方法が考えられます。それぞれにメリットとデメリットがあるため、状況に応じて選択してください。

対処法 説明 メリット デメリット
共通列のみ抽出して結合 すべてのCSVに存在する列だけを選択してから結合する エラーが起きにくい、手順が簡単 一部のCSVにしかない列の情報が欠落する
列を追加してすべての列を統合 欠損している列をあらかじめ追加(null値で埋める)してから結合する すべての情報を保持できる 列名の事前把握が必要、手順が複雑
列名を統一する前処理 結合前に各CSVの列名をPower Query上で統一する 柔軟性が高い、後続の分析が容易 ファイル数が多いと手間がかかる

最も推奨されるのは「列を追加してすべての列を統合」する方法です。これによりデータの欠損がなく、かつPower Queryのエラーを回避できます。ただし、事前にすべてのCSVにどのような列が存在するかを把握しておく必要があります。次のセクションでは、この方法を具体的に解説します。

3. 具体的なPower Query操作手順

ここでは、あるフォルダ内に2つのCSVファイル(ファイルA: 列「ID」「名前」「年齢」、ファイルB: 列「ID」「名前」「住所」)が存在する場合を例に、すべての列を統合する手順を説明します。この例では、ファイルAには「住所」列がなく、ファイルBには「年齢」列がありません。まず、列構成の違いを確認し、不足している列を追加してから結合します。

手順1: フォルダーからデータを取得する

  1. Excelの「データ」タブから「データの取得」→「ファイルから」→「フォルダー」を選択します。
  2. 対象のフォルダを指定して「開く」をクリックします。表示されたダイアログで、結合するCSVファイルが含まれているフォルダを選択してください。
  3. 表示されたファイル一覧を確認し、「結合」→「データの結合と変換」をクリックします。これでPower Queryエディターが起動します。
  4. Power Queryエディターでは、自動的に最初のファイルをサンプルとしてテーブルが表示されます。この時点では、まだすべてのファイルが結合されていません。

手順2: エラーの発生を確認する

  1. 「ホーム」タブの「データの結合」→「データの結合と変換」をクリックすると、Power Queryが自動的に各ファイルをマージします。多くの場合、この段階でエラーが表示されます。
  2. エラーが発生している列をクリックして、エラーメッセージを確認します。例えば「列 ‘年齢’ が見つかりませんでした。」と表示された場合、一部のCSVに「年齢」列がないことを示しています。

手順3: 各CSVの列構成を確認する

  1. 左側の「クエリ」ペインで「変換されたファイル」というクエリを右クリックし、「複製」を選択します。
  2. 複製したクエリで、「Content」列の展開操作(テーブルアイコン)を削除します。これにより、各ファイルがバイナリの状態になります。
  3. 次に、「ホーム」タブの「列の追加」→「カスタム列」で、各ファイルの列名をリストする式を追加します。例えば、カスタム列の式に「= Table.ColumnNames([Content])」と入力します。これで各ファイルの列名が表示されます。
  4. この結果から、ファイルAとファイルBの列名の違いを把握します。ファイルAには「年齢」があり「住所」がない、ファイルBには「住所」があり「年齢」がないことがわかります。

手順4: 欠損している列を追加する

  1. 元のクエリ(結合前の状態)に戻ります。クエリペインで元のクエリを選択します。
  2. 「列の追加」タブから「カスタム列」を選択します。
  3. 新しい列名に「住所」と入力し、カスタム列の式には「null」を指定します。データ型は「テキスト」に設定します。
  4. 同様に、ファイルBに不足している「年齢」列を追加します。カスタム列名「年齢」、式「null」、データ型は「整数」など適切に設定します。
  5. この操作により、すべてのファイルにすべての列が存在することになります(不足列にはnullが入ります)。

手順5: データ型を統一する

  1. すべての列が揃ったら、各列のデータ型を確認します。「ホーム」タブの「データ型」で、すべてのファイルで共通のデータ型になるように設定します。特に日付や数値列は注意が必要です。
  2. 例えば、「年齢」列が数値として認識されない場合、列の変換で「整数」または「10進数」に統一します。エラーが発生するセルは、「エラーの置換」機能でnullや0に置き換えることもできます。

手順6: エラーの再チェックと適用

  1. 「ホーム」タブの「閉じて読み込む」でデータをExcelに読み込みます。読み込み前に「エラーの表示」がなくなっていることを確認してください。
  2. 読み込み後、Excelシートに結合されたテーブルが表示されます。列数がすべて揃い、データが正しく結合されていることを確認します。

ADVERTISEMENT

4. 失敗しやすいケースと回避策

実際の業務では、次のようなケースで思わぬエラーに遭遇することがあります。事前に把握しておくことで、トラブルを回避できます。

空白行や空の列が含まれている場合

CSVによっては、不要な空白列や空白行が含まれていることがあります。特に、末尾に空の列があると、Power Queryはそれを列として認識するため、列数がずれてしまいます。その場合、事前に「列の削除」で余分な列を取り除くか、「行のフィルター」で空白行を削除してから結合してください。また、Power Queryの「データのクリーンアップ」機能を使うと効率的です。

列名のスペルや大文字小文字が異なる場合

「名前」と「氏名」、「CustomerID」と「Customer_ID」など、似ているが異なる列名があると、別の列として扱われ、結合時にエラーになったり、同じデータが別列に分かれたりします。この場合は、手順4で列名を統一する必要があります。Power Queryの「列の名前の変更」機能を使って、すべての列名を揃えてから結合してください。統一する列名は、最も多くのファイルで使われているものに合わせるとよいでしょう。

ヘッダー行がないCSVの場合

CSVにヘッダー行が含まれていない場合、Power Queryは自動的に列名を「列1」「列2」などと命名します。この場合、各CSVの列数が異なると、異なるインデックスの列が対応しなくなり、エラーが発生します。解決策として、該当CSVにヘッダー行を追加するか、Power Queryの「変換」タブで「先頭行をヘッダーとして使用」を適切に設定してください。また、すべてのCSVにヘッダー行がない場合は、結合前に固定の列名を追加するカスタムステップを挿入する方法もあります。

データ型の自動変換が原因の場合

Power Queryは最初のファイルのデータ型に基づいて列の型を決定します。そのため、別のファイルで数値として読み取れない値(例:文字列の「N/A」や「未入力」)があると、エラーになります。この場合、「列の変換」で「エラーの置換」を使用し、エラーをnullや0に置き換えるとよいでしょう。また、事前にその列のデータ型を「任意」に変更してから結合する方法もあります。

5. 管理者への確認ポイント

会社の共有フォルダにあるCSVをPower Queryで結合する場合、以下の点を管理者に確認しておくと安全です。事前に確認することで、権限やルールに起因する問題を防げます。

  • 共有フォルダのアクセス権: Power Queryがフォルダ内のファイルを読み取れるように、適切な権限が設定されているか確認してください。読み取り専用でも問題ありませんが、アクセスできない場合はエラーになります。
  • CSV生成元の出力仕様: 各CSVがどのようなルールで出力されているか、列数や列名の統一ルールが存在するか確認します。ルールがあればそれに従い、なければ統一手順を提案しましょう。定期的に出力されるCSVの場合は、生成元のシステム担当者と調整することも有効です。
  • Power Queryの使用ポリシー: 会社によってはPower Queryの利用が制限されている場合があります。特に、外部データソースへのアクセスが禁止されていることもあるため、IT部門に問い合わせて使用しても問題ないか確認してください。
  • データの保存場所とバックアップ: 結合したデータを保存する際、元のCSVは変更しないことを徹底します。Power Queryは元データを読み取り専用で扱うため安全ですが、念のため元のCSVファイルのバックアップを取っておくと安心です。

6. よくある質問(FAQ)

Q1. 列数が異なるCSVをPower Queryで結合する方法を教えてください。

A. 本記事の手順4で説明したように、欠損している列をカスタム列で追加し、すべての列を揃えてから結合します。共通列のみで結合する場合は、結合前に不要な列を削除するか、「列の選択」機能で共通列だけを残してください。また、自動結合時にエラーが発生した場合、エラーメッセージを確認して不足列を特定することが重要です。

Q2. 「Expression.Error: 列 ‘年齢’ が見つかりませんでした。」というエラーが出ます。どうすればいいですか?

A. そのエラーは、一部のCSVに「年齢」列が存在しないことを意味します。該当の列を持つCSVと持たないCSVを特定し、持たないCSVに「年齢」列を追加してから結合してください。または、「年齢」列を共通列から除外して結合することも検討してください。エラーの発生した行だけを確認したい場合は、フィルターでエラーのみ表示することもできます。

Q3. Power Queryを使わずにExcel関数で複数CSVを結合することはできますか?

A. 可能ですが、手間がかかります。例えば、各CSVを個別に開いてコピー&ペーストする方法や、VBAマクロを使って自動化する方法があります。ただし、ファイル数が多い場合や頻繁に結合する必要がある場合は、Power Queryの方が圧倒的に効率的です。Power Queryが使えない環境では、Power AutomateやPythonを検討するのも一案です。Excelの「取得と変換」グループはOffice 365およびExcel 2019以降で利用可能です。

Q4. 結合後に列の順番がバラバラになってしまいます。どうすれば並べ替えられますか?

A. Power Queryエディターで列をドラッグして順序を変更できます。また、「列の並べ替え」機能(ホームタブ→列の管理→並べ替え)で、列名の一覧を任意の順序に並べ替えることも可能です。最終的なExcelシートに読み込む前に順序を整えておくと、その後の分析がしやすくなります。

7. まとめ

Power Queryで複数のCSVを結合する際、列数が異なるエラーはよく発生します。その原因は列数の不一致や列名の違い、データ型の不一致であり、それぞれに対処法があります。本記事で紹介した「欠損列を追加してから結合する」方法をマスターしておけば、ほとんどのケースで問題なく結合できるでしょう。また、管理者にCSVの出力ルールを確認し、可能であれば統一してもらうことで、そもそもエラーが起きにくい環境を作ることも重要です。Power Queryは非常に強力なツールですが、元データの品質に依存する部分も大きいです。日頃からデータの整形ルールを整備し、Power Queryの前処理を適切に行うことで、安定したデータ結合を実現してください。


📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】

ADVERTISEMENT