Excel Power Query Table.Combine を用いた複数ブック、複数シートの縦結合
1. 前置き
クリック操作による[フォルダから取得]からの[ファイルの結合]や[展開]では、Table.ExpandTableColumn()やTable.ExpandRecordColumn()が用いられます。これらの処理は、結合展開される前の各テーブルの項目が同じである必要があります。
途中で新項目が追加されるなどして、新旧で異なる項目の表を縦結合する場合は、この方法が使えません。そこで、過去にTable.Combine()を使用する方法をメモしました。
過去の記事
Power QueryでExcelの複数のシートを縦結合する方法:2025/02/21:当ブログ
https://bigarrow.tea-nifty.com/blog/2025/02/post-b425f3.html
Excel Power Query : フォルダ指定でブックとシートを取得しシートを整形結合:2024/08/18:当ブログ
https://bigarrow.tea-nifty.com/blog/2024/08/post-9c6b07.html
これらの記事は、詳細エディタで関数クエリや結合クエリを書くので、保守や業務引継ぎがしにくいです。
本記事では、できるだけクリック操作とヘルパークエリを用いることで、Power Query M言語のコーディングが苦手な人でも保守が可能な方法をメモしました。
なお、本記事の方法では、処理コードが冗長になります。後任者がコーディングできるのであれば、過去記事のように直接詳細エディタでコードを書いた方が良いです。また、各シートの項目を同じにできる場合は、Table.ExpandTableColumn()やTable.ExpandRecordColumn()を用いる方が簡単になります。
制限事項
- 若干のPower Query M言語によるコーディングはあります。
- 本例では日付が横にピボットされているので、日付を判別してピボット解除した方が改変しやすくなります。しかし本記事ではこの点がポイントでは無いので、ピボットしない列名を指定してピボット解除しています。この為、後からピボットしない項目を追加するとエラーになります。
- 素人の記事ですので、使用される場合は、検算を行い自己責任で使用してください。仕組みを理解せずにコピペで使用することは避けてください。
2. 入力
旧ファイル
| ブック名:251220com24.xlsx, シ-ト名:24.1H | |||
|---|---|---|---|
| 商品 | 店舗 | 2024/4/1 | 2024/7/1 |
| 商品A | A店 | 1 | 5 |
| 商品B | A店 | 2 | 6 |
| 商品A | B店 | 3 | 7 |
| 商品B | B店 | 4 | 8 |
| ブック名:251220com24.xlsx, シ-ト名:24.2H | |||
|---|---|---|---|
| 商品 | 店舗 | 2024/10/1 | 2025/1/1 |
| 商品A | A店 | 9 | 13 |
| 商品B | A店 | 10 | 14 |
| 商品A | B店 | 11 | 15 |
| 商品B | B店 | 12 | 16 |
新ファイル
| ブック名:251220com25.xlsx, シ-ト名:25.1H | ||||
|---|---|---|---|---|
| 商品 | 店舗 | 担当 | 2025/4/1 | 2025/7/1 |
| 商品A | A店 | Aさん | 17 | 23 |
| 商品B | A店 | Aさん | 18 | 24 |
| 商品A | B店 | Aさん | 19 | 25 |
| 商品B | B店 | Aさん | 20 | 26 |
| 商品C | A店 | Cさん | 21 | 27 |
| 商品C | A店 | Cさん | 22 | 28 |
特徴
- 新ファイルに担当が追加されている。
- 新ファイルは、日付以外の全ての旧ファイルの項目を含む。本例では日付のピボット解除するための必要条件になります。
- 各シートの2行目が項目見出し行である。
3. 出力
| 商品 | 店舗 | Book | Sheet | 担当 | 日付 | 売上 |
|---|---|---|---|---|---|---|
| 商品A | A店 | 251220com24.xlsx | 24.1H | null | 2024/04/01 月 | 1 |
| 商品A | A店 | 251220com24.xlsx | 24.1H | null | 2024/07/01 月 | 5 |
| 商品B | A店 | 251220com24.xlsx | 24.1H | null | 2024/04/01 月 | 2 |
| 商品B | A店 | 251220com24.xlsx | 24.1H | null | 2024/07/01 月 | 6 |
| 途中省略 | ||||||
| 商品C | A店 | 251220com25.xlsx | 25.1H | Cさん | 2025/04/01 火 | 21 |
| 商品C | A店 | 251220com25.xlsx | 25.1H | Cさん | 2025/07/01 火 | 27 |
| 商品C | A店 | 251220com25.xlsx | 25.1H | Cさん | 2025/04/01 火 | 22 |
| 商品C | A店 | 251220com25.xlsx | 25.1H | Cさん | 2025/07/01 火 | 28 |
[Book]と[Sheet]が不要であれば、処理が簡単になります。
4. 手順
§ サンプルシートの作成
ヘルパークエリのパラメータの初期値となるサンプルシートを作成します。後でこのシートをサンプルにしてヘルパークエリを作成します。
- 集計をファイル名に含む集計ブックを開き、[データ]-[データの取得v]-[ファイルから>]-[Excelブックから]でサンプルにするExcelブックを選択し[インポート]、サンプルにするシートを選択し[データの変換]、右の名前を"サンプルシート"に変更。
- 右のソースとナビゲーション以外のステップの左の×をクリックして削除。ソースとナビゲーションの2ステップだけにする。⇒サンプルシートが完成。
§ パラメータの作成
パラメータにサンプルシートを設定します。
- [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ1"に変更。
- 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
- [ホーム]-[詳細エディタ]で次のように修正し[完了]。⇒ヘルパークエリの"パラメータ1"が完成。
"" meta [IsParameterQuery=true, Type="Any", IsParameterQueryRequired=true]
↓
#"サンプルシート" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート", Type="Table", IsParameterQueryRequired=true]
§ シートの整形ヘルパークエリの作成
パラメータ1に設定したサンプルシートをデータベース形式に変更するヘルパークエリを作成します。最初にパラメータ1をソースに設定します。
- [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"サンプルシートの変換"に変更。
- 数式バーに次の様に入力し、✓をクリックする。⇒サンプルシートが表示される。
= パラメータ1
- 右のソースとナビゲーション以外のステップの左の×をクリックして削除。ソースだけにする。
ここからシートの表を縦結合する前の状態にするステップを追加してください。シートの表の形により手順が異なります。以下の操作は、2.入力表の場合の手順例です。
補足:本例の入力表なら、普通はここで日付をピボット解除した方が良いです。しかし、Table.Combine()を使うと異なる項目の表の縦結合ができるので、ここでは日付が横項目になった状態のままとします。
参考:もし、表の上部に項目にしたい情報があれば、次の記事の4.手順例の9,10,18,19.の店舗と年月を項目にする手順を参考にしてください。
複数ブック、複数シートをPower Queryで1つの表にする方法(1ヘルパークエリ)
https://bigarrow.tea-nifty.com/blog/2025/11/post-d0f322.html
- [ホーム]-[行の削除v]-[上位の行の削除]で行数に1を入力し[OK]。
- [変換]-[1行目をヘッダーとして使用v]-[1行目をヘッダーとして使用]。
- 右の最後の"変更された型"の左の×をクリックして削除。
- 左の"サンプルシートの変換"を右クリックし[関数の作成...]で関数名に"シートの変換"と入力し[OK]。⇒"シートの変換"関数クエリが完成。
- 左のクエリをドラッグして次のように並び替えます。
(集計は次の手順で作ります)
注意:修正をするときは、"サンプルシートの変換"を修正します。ヘルパークエリの機能で"シートの変換"関数クエリが連動して修正されます。直接"シートの変換"クエリを詳細エディタで修正しないでください。
§ 集計クエリの生成
Excelのデータの取得のフォルダから全ブックの全シートを取得し、シートの変換関数クエリで整形してから結合します。
- 左の"その他のクエリ"を選択し、[ホーム]-[新しソースv]-[ファイル>]-[フォルダー]でフォルダを選択し[開く]-[データの変換]、右の名前を"集計"に変更。
- "Name"列の▼-[テキストフィルタ]-[次の値で始まらない]-[詳細設定]で次を入力し[OK]。
および/または:列:演算子 :値
______:Name :次の値で始まらない:~$ // 一時ファイルを除く
および:Name :指定の値を含まない:集計 // 集計ファイルを除く
および:Extension:指定の値に等しい :.xlsx // .xlsxのみ対象とする
- "Content"を選択し、Ctrlを押しながら"Name"を選択、右クリックし[他の列の削除]。
- [列の追加]-[カスタム列]で次のように入力し[OK]。
新しい列名:カスタム
カスタム列の式:= Excel.Workbook([Content], null, true)
解説:Excel.Workbook()は、Excelブックの内容(シート他)を返す関数です。これを次のステップで展開(Table.ExpandTableColumn)することにより、各ブックの内容が行に展開されます。第2引数のnullは1行目をヘッダとしない設定です。第3引数のtrueは型の自動設定をしない設定です。
- "カスタム"列の矢印アイコンをクリックし、"さらに読み込む"をクリックし、"Data"、"Item"、"Kind"のみチェックを残し、"元の列名をプレフィックスとして使用します"のチェックを外し[OK]。
- "Kind"列の▼-[テキストフィルター]-[指定の値に等しい]で値にSheetと入力し[OK]。
- [列の追加]-[カスタム関数の呼び出し]で次のように入力し[OK]。
新しい列名:シートの変換
関数クエリ:シートの変換
パラメータ1:Data
解説:展開したシートの内容を関数クエリで1つずつ整形します。これを後のステップで縦結合(Table.Combine)します。(カスタム列の追加の場合の式:= シートの変換([Data]) )
- "Content"列を選択し、Ctrlを押しながら"Data"と"Kind"列を選択し、右クリックで[列の削除]。
Table.ExpandTableColumn()と異なり、後で行うTable.Combine()では[シートの変換]に無い項目は縦結合されません。なので、この次のステップで[シートの変換]にブック名やシート名などを追加した列を追加します。ブック名やシート名が不要であれば、次のステップをスキップしてください。
- [列の追加]-[カスタム列]で次のように入力し、[OK]。
新しい列名:カスタム
カスタム列の式:
= let
book = [Name],
sheet = [Item]
in
Table.AddColumn(
Table.AddColumn(
[シートの変換],
"Book",
each book
),
"Sheet",
each sheet
)
解説:[シートの変換]には[Name]、[Item]が無いので、[シートの変換]のeachの中で[Name]、[Item]を指定すると「[Name]、[Item]が見つかりません」というエラーになります。そこでTable.AddColumn()の外で、変数に[Name]、[Item]を代入することで、eachの中でその変数を使いブック名とシート名を追加しています。
- 右の最後のステップ"追加されたカスタム"が選択された状態で、数式バーの[fx]アイコンをクリックし、次の式を入力し[✓]アイコンをクリックします。
= Table.Combine(追加されたカスタム1[カスタム])
解説:前のステップである'追加されたカスタム1'の[カスタム]列の中のTableを縦結合するというコードです。各Table内の同じ列名を縦に結合するので、列の順番は関係ありません。列名が無い表のフィールドはnullになります。
余談:このステップはクリック操作で追加できないので、直接数式バーにコードを記述します。[ホーム]-[クエリの追加v]-[クエリの追加]で仮のテーブルを結合し、数式バーで引数を修正しても良いです。
- "シートの変換"列の矢印アイコンをクリックし、"さらに読み込む"をクリックし、"元の列名をプレフィックスとして使用します"のチェックを外し[OK]。
- [Book]列を選択し、Ctrlを押しながら[Sheet]、[商品]、[店舗]、[担当]列を選択し、[変換]-[列のピボット解除v]-[その他の列のピボット解除]。
- 数式バーの"属性","値"を"日付","売上"に書き換える。
- 適当な列を選択し、Ctrl+aで全列選択し、[変換]-[データ型の検出]。適切ではない型を右クリックし[型の変更]で再設定し[現在のものを置換]する。(ここでは[売上]列の型を10進数に変更する。)
- [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"接続の作成のみ"を選択し[OK]でExcelに戻る。
§ Excelシートに読み込む
- 右の"クエリと接続"の"集計"クエリを右クリックし[読み込み先…]で必要な形式を選択し[OK]。
本例では"ピボットテーブル"を選択し[OK]。(3.出力の表を出すなら"テーブル"を選択してください。) - ピボットテーブルを選択し[ピボットテーブルのフィールド]-[ピボットテーブル]-[オプション]-[レイアウトと書式]で"更新時に列幅を自動調整する"のチェックを外す。
- [デザイン]-[レポートのレイアウト]-[表形式で表示]。
- [デザイン]-[小計v]-[すべての小計をグループの末尾に表示する]。§
- [デザイン]-[総計v]-[列のみ集計を行う]。
- "ピボットテーブルのフィールド"で次のように項目をドラッグする。
列:[日付]。行:[商品]、[店舗]、[担当]。Σ値:[売上]。
- 四半期(日付)、日付のチェックを外す。
- [ピボットテーブル分析]-[+/-ボタン]を非選択にする。
- データの変更、追加があれば、[データ]-[すべて更新v]-[すべて更新]で更新される。
5. サンプル
C:\Users\Public\Documents\251220combine の下にファイルを置いてください。
サンプルの見方
-
Power Queryエディタの表示方法
① [データ]-[クエリと接続]で右に"クエリと接続"を表示。表示されない時は、もう一度操作する。
② 適当なクエリを右クリックし、[編集]でPower Query エディタが開く。
③ 右の適用したステップの各ステップをクリックし、各ステップでどのように表が加工されるのかを確認する。
④ 各ステップの右の歯車アイコンで追加した列の式や設定などの確認をする。
⑤ [ホーム]-[詳細エディタ]で選択したクエリのPower Query Mのコードが表示される。各ステップの数式バーでもコードを確認できる。 -
データの更新方法 ★ 自動計算されないので、手動で更新してください。
① 元データを修正したら元データファイルを保存。
② 集計ブックで[データ]-[すべて更新v]-[すべて更新]。
6. 参考情報
表を整形する。ファイルを統合する。両方やらなくっちゃあならないってのがつらいところ、でもない。【Excel Power Query】:2022/10/15:ExcelドカタCH
https://www.youtube.com/watch?v=PCThHqvQKIU 1シートの複数ブックの結合です。
【Excel パワークエリ】これを見ても、まだコピペでいいなんて言うヤツ……いねぇよなぁ:2024/04/13:ExcelドカタCH
https://www.youtube.com/watch?v=UapvFSxv2mE リスト(テータベース)形式の複数シートの複数ブックの結合です。
Power Query:複数のシートのデータを縦結合する(ヘルパークエリ編):2023/11/14:なんでもエクセル(Nandemo Excel)
https://nandemo-xl.hatenablog.com/entry/2023/11/14/161634 1ブックの複数シートの結合です。
7. 関連記事
Power Queryで複数の表を結合する方法(まとめ):2025/11/06:当ブログ
https://bigarrow.tea-nifty.com/blog/2025/11/post-341d5f.html
Power Queryで表をリスト形式に整形する方法(まとめ):2025/11/16:当ブログ
https://bigarrow.tea-nifty.com/blog/2025/11/post-4925ca.html
複数ブック、複数シートをPower Queryで1つの表にする方法(1ヘルパークエリ):2025/11/04:当ブログ
https://app.cocolog-nifty.com/cms/blogs/632678/entries/95705664 本記事のTable.ExpandTableColumn()版です。
8. 余談
Excelのワークシート関数の進歩により、Power Queryのクリック操作では簡単にできないような整形もワークシート関数でできるようになって来ました。Power Queryのクリック操作の機能も増やして欲しいですね。












最近のコメント