
【結論】横方向データ処理の3つのゴールデンルール
Power Queryで横方向データを扱う際、以下の3つの原則を守ることで、大量データでも高速に処理できます。
- ① ピボット解除(Unpivot)で横持ちデータを縦持ちに変換 → 分析・集計に最適な形式に
- ② 処理順序の最適化で速度を劇的改善 → フィルター・列削除を最初に、重い処理は最後に
- ③ 不要なマージを避けることで負荷を削減 → List.Contains関数やリレーションシップを活用
この記事では、実務ですぐに使える具体的手順と、100万行クラスの大量データでも快適に動作させるパフォーマンス改善テクニックを完全解説します。
※時間がない方へ:
「横持ち→縦持ち」だけ知りたい方は【実践編】まで、
処理速度で困っている方は【高速化編】から読むのがおすすめです。
※本記事は ・Excelは日常業務で使っている ・Power Queryは触ったことがあるが「遅い」「難しい」と感じている 方向けに書いています。
Power Queryにおける「横方向データ」とは?
横持ちデータと縦持ちデータの違い
Excelで作成される多くの表は、「横持ちデータ」と呼ばれる形式になっています。これは人間が見やすい形式ですが、データ分析やピボットテーブルには不向きです。
横持ちデータの例(人間にとって見やすい形式)
| 商品名 | 1月 | 2月 | 3月 |
|---|---|---|---|
| 商品A | 100 | 120 | 150 |
| 商品B | 80 | 90 | 110 |
縦持ちデータの例(データベース・分析に最適な形式)
| 商品名 | 月 | 売上 |
|---|---|---|
| 商品A | 1月 | 100 |
| 商品A | 2月 | 120 |
| 商品A | 3月 | 150 |
| 商品B | 1月 | 80 |
| 商品B | 2月 | 90 |
| 商品B | 3月 | 110 |
なぜ縦持ちが重要か?
- Power BI、ピボットテーブルで集計・分析しやすい
- データの追加・削除が容易
- フィルタリングや並べ替えが高速
- スタースキーマ設計(データモデリングのベストプラクティス)に適合
【実践編】横方向データを縦方向に変換する手順
方法①:列のピボット解除(基本)
最も基本的な方法が「列のピボット解除(Unpivot Columns)」です。Power Queryエディターで簡単に実行できます。
具体的な手順
- データを読み込む
- Excelの「データ」タブ → 「データの取得と変換」セクションから対象データを選択
- Power Queryエディターが開きます
- 固定列を選択する
- 変換したくない列(商品名、IDなど)を選択
- 例:「商品名」列を選択した状態にする
- ピボット解除を実行
- 「変換」タブ → 「列のピボット解除」の横にある▼をクリック
- 「その他の列のピボット解除」を選択
- 選択していない列(1月、2月、3月など)が自動的に縦に並びます
- 列名を変更
- デフォルトで「属性」「値」という列名が付きます
- ダブルクリックして「月」「売上」など分かりやすい名前に変更
- データ型を設定
- 「値」列を数値型に変更
- 列ヘッダーの左側のアイコンから適切なデータ型を選択
【重要ポイント】「列のピボット解除」と「その他の列のピボット解除」の違い:
- 列のピボット解除:選択した列を縦に展開
- その他の列のピボット解除:選択していない列を縦に展開(推奨)
固定列(ID、商品名など)を選んで「その他の列のピボット解除」を使う方が、列が後から追加されても自動対応できるため実務では便利です。
方法②:複数の属性がある場合の高度なピボット解除
実務では、以下のような複雑なケースもあります:
| 商品名 | 日付1 | 担当1 | 日付2 | 担当2 | 日付3 | 担当3 |
|---|---|---|---|---|---|---|
| 商品A | 2026-01-01 | 山田 | 2026-01-02 | 佐藤 | 2026-01-03 | 田中 |
このような「複数の属性が横に並んでいるデータ」の処理方法:
- まず「日付1~3」と「担当1~3」をまとめてピボット解除
- 「属性」列から番号を抽出(カスタム列で
Text.End([属性],1)) - 「属性」列から項目名を抽出(「日付」「担当」など)
- 「列のピボット」で再度横展開して最終形に
詳細な手順はこちらの記事で図解されています。
方法③:転置(Transpose)を使うケース
行と列を完全に入れ替える場合は「転置(Transpose)」を使います。
転置とピボット解除の使い分け:
- 転置:表全体の行と列を入れ替える(単純な90度回転)
- ピボット解除:列の見出しを「属性」、データを「値」にした組み合わせを作成
実務ではピボット解除の方が圧倒的に使用頻度が高いです。転置は、集計済みのクロス集計表を元データに戻す特殊なケースで使用します。
【高速化編】大量データでも快適に動作させる7つのテクニック
Power Queryは正しく使えば高速ですが、使い方を間違えると極端に遅くなります。処理が遅い場合にチェックすべきポイントを7つ紹介します。
①データソースはCSV形式を優先
同じデータでも、ExcelファイルよりCSVファイルの方が読み込みが高速です。
- Excel(.xlsx):複雑な構造、数式、書式情報を解析する必要がある
- CSV:純粋なテキストデータで構造がシンプル
実務での対応:
- データソースの提供元に相談してCSV形式で受け取る
- Excelしか選択肢がない場合、一度CSVに変換してからPower Queryで読み込む
②不要な列は”最初の段階”で削除
これは最も重要な高速化テクニックです。大容量ファイルのトラブルシューティングでも最優先事項として挙げられています。
なぜ早期削除が重要か?
- 後続のステップで処理するデータ量が減る
- メモリ使用量が削減される
- ピボット解除やマージなどの重い処理が高速化
ベストプラクティス:
// データ取り込み直後 ソース → 不要な列を削除(最優先) → 不要な行をフィルター → データ型の変更 → ピボット解除などの変換処理
従来のExcel作業では「念のため列を残しておく」文化がありますが、Power Queryでは削除したステップはいつでも復元可能なため、迷わず削除してください。
③フィルタリングもできるだけ早い段階で
100万行のデータのうち、最終的に10万行しか使わないのであれば、可能な限り早い段階でフィルターしてください。
効果的なフィルタリングの順序:
- データソース接続時(SQL ServerなどではWHERE句で絞り込む)
- Power Queryの最初のステップで行をフィルター
- その後に複雑な変換処理
④重い処理(マージ・ソート)は後半に配置
処理の負荷には軽重があります。負荷の軽い処理を前半、重い処理を後半に配置することで速度向上します。
処理の重さランキング(重い順):
- クエリのマージ(結合)← 最も重い
- 行のソート(並べ替え)
- グループ化・集計
- ピボット解除
- データ型の変更
- 列・行のフィルター ← 最も軽い
理想的な処理順序:
データ読み込み → 列削除(軽い) → 行フィルター(軽い) → ピボット解除(中程度) → データ型変更(中程度) → グループ化・集計(重い) → マージ(最も重い)
⑤不要なマージ(結合)を避ける – これが最大の落とし穴
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万行のデータで複雑なクエリを作る場合、作業中だけ行数を制限すると編集が快適になります。
手順:
- フィルター後に「上位の行を保持」で1000行程度に制限
- クエリを完成させる
- 完成後に行数制限のステップを削除
- 最終的な全データ処理を実行
この方法なら、クエリ作成中のプレビュー表示が高速になります。
データ型は適切に設定する
データ型の自動判定に任せず、明示的に正しいデータ型を設定してください。
- 数値列 → 整数または小数点数型
- 日付列 → 日付型または日付時刻型
- テキスト列 → テキスト型
特にマージのキー列は、両方のテーブルで同じデータ型にすることが重要です。型が異なると処理が遅くなります。
バックグラウンド更新を無効化
クエリが複雑になると、バックグラウンド更新が逆に遅くなる場合があります。
設定方法:
- 「データ」タブ → 「クエリと接続」
- 対象クエリを右クリック → 「プロパティ」
- 「バックグラウンドで更新する」のチェックを外す
よくある質問(FAQ)
Q1. ピボット解除後のデータ型がおかしくなる
A. ピボット解除後は「値」列がテキスト型になっていることが多いです。必ずデータ型を数値型に変更してください。データ型が正しくないと、合計が計算されず連結される、並べ替えがおかしくなる、などの問題が発生します。
Q2. 処理を高速化しても遅い場合は?
A. 以下を確認してください:
- PCのメモリ不足(8GB以下なら16GB以上に増設を検討)
- データソースが外部サーバーでネットワークが遅い
- ウイルス対策ソフトがファイルアクセスをブロック
- Excelのバージョンが古い(最新版へのアップデート推奨)
Q3. 「その他の列のピボット解除」と「列のピボット解除」の違いは?
A. どちらも結果は同じですが、「その他の列のピボット解除」の方が実務向きです。理由:
- 固定列(商品名、IDなど)を選択して「その他の列」を解除する方が直感的
- データに列が追加されても自動的に処理対象に含まれる
Q4. 複数のExcelファイルを一度に処理できる?
A. できます。フォルダから複数ファイルをまとめて読み込み、結合できます。
- 「データの取得」→「ファイルから」→「フォルダーから」
- 対象フォルダを指定
- 「データの変換」をクリック
- 「コンテンツ」列を展開して全ファイルを結合
Q5. Power QueryとVBAはどちらが速い?
A. 大量データの場合、Power Queryの方が圧倒的に高速です。理由:
- Power Queryはマルチスレッド処理に対応
- メモリ効率が良い設計
- クエリフォールディング(データソース側での処理)が可能
ただし、10万行以下の小規模データで単純処理ならVBAも十分です。
まとめ:Power Query横方向データ処理の成功法則
本記事で解説した内容をおさらいします。
横方向データを扱う3ステップ
- ピボット解除で縦持ちに変換
- 固定列を選択して「その他の列のピボット解除」
- 列名を分かりやすく変更
- データ型を適切に設定
- 処理順序を最適化
- 列削除・行フィルターを最初に
- 重い処理(マージ・ソート)は最後に
- 不要な処理を削減
- マージではなくリレーションシップやList.Contains関数を検討
- 不要なソートは削除
大量データ高速処理の7つのチェックリスト
- ☑ データソースはCSV形式を優先
- ☑ 不要な列を最初の段階で削除
- ☑ フィルタリングを早期実施
- ☑ 重い処理は後半に配置
- ☑ 不要なマージを避ける(List.Containsやリレーションシップで代替)
- ☑ 不要なソートを削除
- ☑ 必要に応じてTable.Bufferでキャッシュ
最後に:Power Queryは「考え方」の転換が必要
従来のExcel作業の常識をPower Queryに持ち込むと失敗します。特に重要な考え方の転換:
- 全部1つの表にまとめない → テーブルを分割してリレーションシップで結合
- 念のため列を残さない → ステップは復元可能なので迷わず削除
- VLOOKUPの代わりにマージを使わない → 目的に応じて代替手段を選択
この記事で紹介したテクニックを実践すれば、100万行を超える大量データでも快適に処理できるようになります。ぜひ実務で活用してください。












コメント