Power Queryで横方向データを扱う方法 – 大量データの高速処理【完全保存版】

Power Queryで横方向データを扱う方法
  1. 【結論】横方向データ処理の3つのゴールデンルール
  2. Power Queryにおける「横方向データ」とは?
    1. 横持ちデータと縦持ちデータの違い
      1. 横持ちデータの例(人間にとって見やすい形式)
      2. 縦持ちデータの例(データベース・分析に最適な形式)
  3. 【実践編】横方向データを縦方向に変換する手順
    1. 方法①:列のピボット解除(基本)
      1. 具体的な手順
    2. 方法②:複数の属性がある場合の高度なピボット解除
    3. 方法③:転置(Transpose)を使うケース
  4. 【高速化編】大量データでも快適に動作させる7つのテクニック
    1. ①データソースはCSV形式を優先
    2. ②不要な列は”最初の段階”で削除
    3. ③フィルタリングもできるだけ早い段階で
    4. ④重い処理(マージ・ソート)は後半に配置
    5. ⑤不要なマージ(結合)を避ける – これが最大の落とし穴
      1. マージが不要なケース①:分析用途ならリレーションシップを使う
      2. マージが不要なケース②:フィルター目的ならList.Contains関数を使う
      3. どうしてもマージが必要な場合:Table.AddKey関数で高速化
    6. ⑥不要なソート(並べ替え)を削除
    7. ⑦Table.Buffer関数でクエリ参照を高速化
  5. 実務で役立つ補足テクニック
    1. 作業中だけデータを制限して快適に編集
    2. データ型は適切に設定する
    3. バックグラウンド更新を無効化
  6. よくある質問(FAQ)
    1. Q1. ピボット解除後のデータ型がおかしくなる
    2. Q2. 処理を高速化しても遅い場合は?
    3. Q3. 「その他の列のピボット解除」と「列のピボット解除」の違いは?
    4. Q4. 複数のExcelファイルを一度に処理できる?
    5. Q5. Power QueryとVBAはどちらが速い?
  7. まとめ:Power Query横方向データ処理の成功法則
    1. 横方向データを扱う3ステップ
    2. 大量データ高速処理の7つのチェックリスト
    3. 最後に:Power Queryは「考え方」の転換が必要
    4. 参考リンク

【結論】横方向データ処理の3つのゴールデンルール

Power Queryで横方向データを扱う際、以下の3つの原則を守ることで、大量データでも高速に処理できます。

  • ① ピボット解除(Unpivot)で横持ちデータを縦持ちに変換 → 分析・集計に最適な形式に
  • ② 処理順序の最適化で速度を劇的改善 → フィルター・列削除を最初に、重い処理は最後に
  • ③ 不要なマージを避けることで負荷を削減 → List.Contains関数やリレーションシップを活用

この記事では、実務ですぐに使える具体的手順と、100万行クラスの大量データでも快適に動作させるパフォーマンス改善テクニックを完全解説します。

※時間がない方へ:
「横持ち→縦持ち」だけ知りたい方は【実践編】まで、
処理速度で困っている方は【高速化編】から読むのがおすすめです。

※本記事は
・Excelは日常業務で使っている
・Power Queryは触ったことがあるが「遅い」「難しい」と感じている
方向けに書いています。

 

Power Queryにおける「横方向データ」とは?

横持ちデータと縦持ちデータの違い

Excelで作成される多くの表は、「横持ちデータ」と呼ばれる形式になっています。これは人間が見やすい形式ですが、データ分析やピボットテーブルには不向きです。

横持ちデータの例(人間にとって見やすい形式)

商品名1月2月3月
商品A100120150
商品B8090110

 

縦持ちデータの例(データベース・分析に最適な形式)

商品名売上
商品A1月100
商品A2月120
商品A3月150
商品B1月80
商品B2月90
商品B3月110

なぜ縦持ちが重要か?

  • Power BI、ピボットテーブルで集計・分析しやすい
  • データの追加・削除が容易
  • フィルタリングや並べ替えが高速
  • スタースキーマ設計(データモデリングのベストプラクティス)に適合

 

【実践編】横方向データを縦方向に変換する手順

方法①:列のピボット解除(基本)

最も基本的な方法が「列のピボット解除(Unpivot Columns)」です。Power Queryエディターで簡単に実行できます。

具体的な手順

  1. データを読み込む
    • Excelの「データ」タブ → 「データの取得と変換」セクションから対象データを選択
    • Power Queryエディターが開きます
  2. 固定列を選択する
    • 変換したくない列(商品名、IDなど)を選択
    • 例:「商品名」列を選択した状態にする
  3. ピボット解除を実行
    • 「変換」タブ → 「列のピボット解除」の横にある▼をクリック
    • 「その他の列のピボット解除」を選択
    • 選択していない列(1月、2月、3月など)が自動的に縦に並びます
  4. 列名を変更
    • デフォルトで「属性」「値」という列名が付きます
    • ダブルクリックして「月」「売上」など分かりやすい名前に変更
  5. データ型を設定
    • 「値」列を数値型に変更
    • 列ヘッダーの左側のアイコンから適切なデータ型を選択

【重要ポイント】「列のピボット解除」と「その他の列のピボット解除」の違い:

  • 列のピボット解除:選択した列を縦に展開
  • その他の列のピボット解除:選択していない列を縦に展開(推奨)

固定列(ID、商品名など)を選んで「その他の列のピボット解除」を使う方が、列が後から追加されても自動対応できるため実務では便利です。

 

方法②:複数の属性がある場合の高度なピボット解除

実務では、以下のような複雑なケースもあります:

商品名日付1担当1日付2担当2日付3担当3
商品A2026-01-01山田2026-01-02佐藤2026-01-03田中

このような「複数の属性が横に並んでいるデータ」の処理方法:

  1. まず「日付1~3」と「担当1~3」をまとめてピボット解除
  2. 「属性」列から番号を抽出(カスタム列でText.End([属性],1)
  3. 「属性」列から項目名を抽出(「日付」「担当」など)
  4. 「列のピボット」で再度横展開して最終形に

詳細な手順はこちらの記事で図解されています。

方法③:転置(Transpose)を使うケース

行と列を完全に入れ替える場合は「転置(Transpose)」を使います。

転置とピボット解除の使い分け:

  • 転置:表全体の行と列を入れ替える(単純な90度回転)
  • ピボット解除:列の見出しを「属性」、データを「値」にした組み合わせを作成

実務ではピボット解除の方が圧倒的に使用頻度が高いです。転置は、集計済みのクロス集計表を元データに戻す特殊なケースで使用します。

 

【高速化編】大量データでも快適に動作させる7つのテクニック

Power Queryは正しく使えば高速ですが、使い方を間違えると極端に遅くなります処理が遅い場合にチェックすべきポイントを7つ紹介します。

 

①データソースはCSV形式を優先

同じデータでも、ExcelファイルよりCSVファイルの方が読み込みが高速です。

  • Excel(.xlsx):複雑な構造、数式、書式情報を解析する必要がある
  • CSV:純粋なテキストデータで構造がシンプル

実務での対応:

  • データソースの提供元に相談してCSV形式で受け取る
  • Excelしか選択肢がない場合、一度CSVに変換してからPower Queryで読み込む

 

②不要な列は”最初の段階”で削除

これは最も重要な高速化テクニックです。大容量ファイルのトラブルシューティングでも最優先事項として挙げられています。

なぜ早期削除が重要か?

  • 後続のステップで処理するデータ量が減る
  • メモリ使用量が削減される
  • ピボット解除やマージなどの重い処理が高速化

ベストプラクティス:

// データ取り込み直後
ソース
→ 不要な列を削除(最優先)
→ 不要な行をフィルター
→ データ型の変更
→ ピボット解除などの変換処理

従来のExcel作業では「念のため列を残しておく」文化がありますが、Power Queryでは削除したステップはいつでも復元可能なため、迷わず削除してください。

 

③フィルタリングもできるだけ早い段階で

100万行のデータのうち、最終的に10万行しか使わないのであれば、可能な限り早い段階でフィルターしてください。

効果的なフィルタリングの順序:

  1. データソース接続時(SQL ServerなどではWHERE句で絞り込む)
  2. Power Queryの最初のステップで行をフィルター
  3. その後に複雑な変換処理

 

④重い処理(マージ・ソート)は後半に配置

処理の負荷には軽重があります。負荷の軽い処理を前半、重い処理を後半に配置することで速度向上します。

処理の重さランキング(重い順):

  1. クエリのマージ(結合)← 最も重い
  2. 行のソート(並べ替え)
  3. グループ化・集計
  4. ピボット解除
  5. データ型の変更
  6. 列・行のフィルター ← 最も軽い

理想的な処理順序:

データ読み込み
→ 列削除(軽い)
→ 行フィルター(軽い)
→ ピボット解除(中程度)
→ データ型変更(中程度)
→ グループ化・集計(重い)
→ マージ(最も重い)

 

⑤不要なマージ(結合)を避ける – これが最大の落とし穴

Excel作業に慣れた方が最もつまずくのが、「VLOOKUPの代わりにマージを使いすぎる」問題です。

マージが不要なケース①:分析用途ならリレーションシップを使う

Power PivotやPower BIで分析する場合、無理に1つのテーブルにまとめる必要はありません

  • 従来のExcel思考:すべてのデータを1つの表に統合
  • Power Query/Power BI思考:テーブルを分割してリレーションシップで結合(スタースキーマ)

推奨アプローチ:

  • 売上明細テーブル(ファクトテーブル)
  • 商品マスタテーブル(ディメンションテーブル)
  • 顧客マスタテーブル(ディメンションテーブル)

これらを別々のテーブルとして読み込み、Power Pivot/Power BIでリレーションシップを設定する方が、処理速度・メンテナンス性ともに優れています

マージが不要なケース②:フィルター目的ならList.Contains関数を使う

「特定のIDリストに含まれるデータだけ抽出したい」という理由でマージを使うケースがありますが、List.Contains関数で代替可能です。

従来の方法(遅い):

1. マージでIDマスタと結合
2. フィルターで必要なデータを絞る
3. 展開して列を追加
4. 不要な列を削除

高速な方法:

1. IDリストをクエリで作成
2. カスタム列でList.Contains関数を使用
   List.Contains(IDリスト[ID], [商品ID])
3. Trueの行だけフィルター

この方法なら、マージの重い処理を完全に回避できます。

どうしてもマージが必要な場合:Table.AddKey関数で高速化

マージが避けられない場合は、Table.AddKey関数を使ってインデックスを設定すると処理が高速化します。

// 高度なエディタで記述
let
    ソース = Excel.CurrentWorkbook(){[Name="商品マスタ"]}[Content],
    // 主キーを設定して検索を高速化
    キー設定 = Table.AddKey(ソース, {"商品ID"}, true)
in
    キー設定

Table.AddKeyの詳細な使い方を参考にしてください。

※Table.AddKeyは「この列で検索する」とPower Queryに教える処理。
SQLのインデックスに近い役割を持ちます。

⑥不要なソート(並べ替え)を削除

Excel作業では頻繁にソートしますが、Power Queryではソートが本当に必要なケースは少ないです。

ソートが不要なケース:

  • Power BIやピボットテーブルで後から並べ替える予定
  • 単に「見やすくするため」だけの目的
  • グループ化前の準備(グループ化は自動で適切に処理される)

ソートが必要なケース:

  • インデックス列を追加する前提で順序が重要
  • 「最初のN行」や「最後のN行」を取得する前

不要なソートステップは削除してください。特に大量データでは速度に顕著な差が出ます。

 

⑦Table.Buffer関数でクエリ参照を高速化

同じクエリを複数回参照する場合、Table.Buffer関数でキャッシュすると高速化します。

Table.Bufferが効果的なケース:

  • マスタデータを複数のクエリから参照している
  • 集計用の中間テーブルを複数箇所で使用

使い方:

// 高度なエディタで最終ステップに追加
let
    ソース = ...,
    変換処理 = ...,
    // 最後にバッファー化
    バッファー = Table.Buffer(変換処理)
in
    バッファー

注意点:

  • メモリに全データを読み込むため、大量データでは逆効果の場合あり
  • 効果は状況次第なので、使用前後で速度を比較すること

 

実務で役立つ補足テクニック

作業中だけデータを制限して快適に編集

100万行のデータで複雑なクエリを作る場合、作業中だけ行数を制限すると編集が快適になります。

手順:

  1. フィルター後に「上位の行を保持」で1000行程度に制限
  2. クエリを完成させる
  3. 完成後に行数制限のステップを削除
  4. 最終的な全データ処理を実行

この方法なら、クエリ作成中のプレビュー表示が高速になります。

データ型は適切に設定する

データ型の自動判定に任せず、明示的に正しいデータ型を設定してください。

  • 数値列 → 整数または小数点数型
  • 日付列 → 日付型または日付時刻型
  • テキスト列 → テキスト型

特にマージのキー列は、両方のテーブルで同じデータ型にすることが重要です。型が異なると処理が遅くなります。

バックグラウンド更新を無効化

クエリが複雑になると、バックグラウンド更新が逆に遅くなる場合があります。

設定方法:

  1. 「データ」タブ → 「クエリと接続」
  2. 対象クエリを右クリック → 「プロパティ」
  3. 「バックグラウンドで更新する」のチェックを外す

 

よくある質問(FAQ)

Q1. ピボット解除後のデータ型がおかしくなる

A. ピボット解除後は「値」列がテキスト型になっていることが多いです。必ずデータ型を数値型に変更してください。データ型が正しくないと、合計が計算されず連結される、並べ替えがおかしくなる、などの問題が発生します。

Q2. 処理を高速化しても遅い場合は?

A. 以下を確認してください:

  • PCのメモリ不足(8GB以下なら16GB以上に増設を検討)
  • データソースが外部サーバーでネットワークが遅い
  • ウイルス対策ソフトがファイルアクセスをブロック
  • Excelのバージョンが古い(最新版へのアップデート推奨)

Q3. 「その他の列のピボット解除」と「列のピボット解除」の違いは?

A. どちらも結果は同じですが、「その他の列のピボット解除」の方が実務向きです。理由:

  • 固定列(商品名、IDなど)を選択して「その他の列」を解除する方が直感的
  • データに列が追加されても自動的に処理対象に含まれる

Q4. 複数のExcelファイルを一度に処理できる?

A. できます。フォルダから複数ファイルをまとめて読み込み、結合できます。

  1. 「データの取得」→「ファイルから」→「フォルダーから」
  2. 対象フォルダを指定
  3. 「データの変換」をクリック
  4. 「コンテンツ」列を展開して全ファイルを結合

Q5. Power QueryとVBAはどちらが速い?

A. 大量データの場合、Power Queryの方が圧倒的に高速です。理由:

  • Power Queryはマルチスレッド処理に対応
  • メモリ効率が良い設計
  • クエリフォールディング(データソース側での処理)が可能

ただし、10万行以下の小規模データで単純処理ならVBAも十分です。

 

 

まとめ:Power Query横方向データ処理の成功法則

本記事で解説した内容をおさらいします。

横方向データを扱う3ステップ

  1. ピボット解除で縦持ちに変換
    • 固定列を選択して「その他の列のピボット解除」
    • 列名を分かりやすく変更
    • データ型を適切に設定
  2. 処理順序を最適化
    • 列削除・行フィルターを最初に
    • 重い処理(マージ・ソート)は最後に
  3. 不要な処理を削減
    • マージではなくリレーションシップやList.Contains関数を検討
    • 不要なソートは削除

大量データ高速処理の7つのチェックリスト

  • ☑ データソースはCSV形式を優先
  • ☑ 不要な列を最初の段階で削除
  • ☑ フィルタリングを早期実施
  • ☑ 重い処理は後半に配置
  • ☑ 不要なマージを避ける(List.Containsやリレーションシップで代替)
  • ☑ 不要なソートを削除
  • ☑ 必要に応じてTable.Bufferでキャッシュ

最後に:Power Queryは「考え方」の転換が必要

従来のExcel作業の常識をPower Queryに持ち込むと失敗します。特に重要な考え方の転換:

  • 全部1つの表にまとめない → テーブルを分割してリレーションシップで結合
  • 念のため列を残さない → ステップは復元可能なので迷わず削除
  • VLOOKUPの代わりにマージを使わない → 目的に応じて代替手段を選択

この記事で紹介したテクニックを実践すれば、100万行を超える大量データでも快適に処理できるようになります。ぜひ実務で活用してください。

参考リンク

著者
古見遊 正

流通業で働きながら、2005年からWindowsを使い続けている80年代生まれのサラリーマン。ExcelとPowerPointを極め、仕事の効率化を追求中。苦手だったWordも克服中!Excelを使いこなせるだけで周囲から『神扱い』されるけれど、そのせいで『システムに詳しい人』だと勘違いされがち。でも、それが新しい知識を得るきっかけになった。そんな経験を活かして、Excel・PowerPoint・Word・Windowsの時短ワザ&仕事術を発信中!

古見遊 正をフォローする
Power Query

コメント

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