Excelで作成された表をデータソースとして扱う際、厄介な問題の一つが「セルの結合」です。
特にヘッダー行(見出し行)が2行以上にまたがって結合されているケースは、日本の実務現場では「あるある」ではないでしょうか。例えば、今回取り上げるサンプルのように「寸法」という大項目の下に「幅」「高さ」「奥行」という小項目があるようなケースです。

人間が見る分には分かりやすいですが、システムからは扱いにくいです。そのまま読み込むと、セル結合した部分がnullになったりします。

本記事では、添付の「商品マスタ」を例に、セル結合された2行のヘッダー行を、Power Queryを使ってきれいに1行のヘッダーとして読み込むテクニックを解説します。
サンプルデータ
次の商品マスタをサンプルデータとして使用します。

サンプルデータはこちらからダウンロードしてください。
ポイント:
- 1行目に「商品マスタ」というタイトルがある(不要な行)。
- 2行目と3行目がヘッダーになっている。
- 2行目のE列「寸法」は、Excel上ではE・F・G列に結合されていた。
- 3行目に「幅」「高さ」「奥行」の詳細項目がある。
目指すゴール:
これらを以下のような1行のヘッダーを持つテーブルに変換します。
商品コード | 商品名 | 商品分類 | 寸法_幅 | 寸法_高さ | 寸法_奥行 | 単価
実際の手順
それでは、Power Queryエディタでの操作手順をステップバイステップで解説します。
手順1:加工されていない状態に戻す
まず、データを読み込んだ直後の状態を確認します。「昇格されたヘッダー行」、「変更された型」というステップが自動的に作成されていることがあります。

加工されていない状態から始めたいので、「昇格されたヘッダー行」、「変更された型」のステップが作成されている場合は、右側の「適用したステップ」から削除します。

加工されていない状態になりました。

手順2:不要な上位行を削除する
今回のデータでは、1行目の「商品マスタ」タイトルは不要です。行削除します。
「ホーム」タブー「行の削除」ー「上位の行の削除」をクリックします。

「行数」に「1」を入力し、OKをクリックします。

これで、1行目に商品コード、2行目に幅、高さ、奥行が来る状態になりました。

手順3:行と列を入れ替える
Power Queryには「下方向へコピー(フィル)」する機能はありますが、「右方向へコピー」する機能はありません。
そこで、一度テーブル全体を回転させて、列を行に変換します。
「変換」タブー「入れ替え」をクリックします。

すると、データの向きが90度回転します。
これまで「ヘッダー行」だったものが、現在は「Column1」「Column2」という「列」になっているはずです。

手順4:null値を埋める(下方向へコピー)
行列を回転させたことで、Excelのセル結合によって発生していた null(空欄)が縦に並びました。これで下方向へコピーするフィルが使えます。
「変換」タブー「フィル」ー「下へ」をクリックします。

これで、「寸法」の下にあった null が「寸法」で埋まりました。
寸法, 寸法, 寸法 と3つ並んだ状態になります。

手順5:2つの列を結合して新しいヘッダー名を作る
次に、ヘッダー行の大項目(Column1)と小項目(Column2)を合体させます。
「Column1」、「Column2」を列選択(クリック)し、「変換」タブー「列のマージ」をクリックします。

「区切り記号」を「カスタム」に選択し、「_」を入力します。※_はアンダースコア
OKをクリックします。

これで 寸法_幅、寸法_高さ といった、新しい列名が1つの列に完成しました。

手順6:不要なアンダースコアを削除する
商品コード_ のように、小項目がないものは後ろに記号がつきますので、削除した方がキレイです。
適用したステップで新たにステップを作成します。
「結合された列」を右クリックし、「後にステップの挿入」をクリックします。

作成したステップの式を入力します。

Table.TransformColumns関数を使って、列の値を変更します。
if文で条件分岐させています。文字の最後にアンダースコアがついている場合は、アンダースコアを除外し、それ以外はそのままの値にしています。
= Table.TransformColumns(
結合された列,
{"結合済み", each if Text.EndsWith(_, "_")
then Text.Start(_, Text.Length(_) - 1)
else _}
)
手順7:行と列を元に戻す
ヘッダー名の準備が整ったので、テーブルの向きを元に戻します。
「変換」タブー「入れ替え」をクリックします。

これで、1行目に整形されたヘッダー名が並んだ状態に戻りました。

手順8:ヘッダーに昇格させる
最後に、作成した1行目をヘッダーとして使用します。
「ホーム」タブー「1行目をヘッダーとして使用」をクリックします。

これで完成です。

手順9:Excelにデータ出力する
これまでデータ加工した結果をExcelにデータ出力します。
「ホーム」タブー「閉じて読み込む」をクリックします。

セル結合したヘッダー行を1行に整形したデータに出力できました。

補足と注意点:パフォーマンスについて
今回紹介した「入れ替え」を使う方法は、視覚的に分かりやすく、ステップごとの変化が理解しやすいため、最も推奨される方法です。
ただし、「入れ替え」はデータ量が多い場合、処理負荷が高いという弱点があります。
データ行数が多い場合のアプローチ
もし、読み込むデータが何十万行もある場合、データ部分まで含めてすべて「入れ替え」を行うと、プレビューや更新に時間がかかる可能性があります。
その場合は、以下のように工夫することで回避できます。
- 上位の行を保持: 最初に「上位の行を保持」でヘッダー部分だけを残したクエリを作成し、そこで「入れ替え」等のヘッダー作成処理を行う。
- データ部分の分離: 別のクエリでデータ部分(ヘッダー行を除去したもの)を作成する。
- ヘッダーの適用:
Table.DemoteHeadersやTable.RenameColumns等の関数を使い、1で作ったヘッダーリストを2のデータに適用する。
とはいえ、通常の商品マスタ(数千〜数万行程度)であれば、今回紹介した手順で全く問題ありません。まずは「入れ替え&フィル」のパターンをマスターしましょう。
まとめ
Power Queryで「セル結合されたヘッダー」を扱う手順をおさらいします。
- 加工されていない状態に戻す
- 不要な行を削除し、ヘッダー行を最上部に持ってくる。
- 入れ替えで、列を行にする。
- フィル(下)で、結合によって生じた
nullを埋める。 - 列のマージで、大項目と小項目を繋ぐ。
- 再び入れ替えで元に戻す。
- ヘッダーに昇格させる。

