複数シートに分散したデータを集計する際、Power Query でシートごとに読み込む手間を削減し、一括で縦方向に結合すると作業効率が大幅に向上いたします。本記事では、外部ブック内のシートをまとめて取得し、特定のシート(例: Summary
)を除外したうえで結合する M コードの例をご紹介いたします。
目次
前提条件
項目 | 内容 |
---|
対象ブック | C:\Data\ReportSheets.xlsx |
除外シート | Summary |
シート構成 | すべて同一列構造(例: Date, SlipNo, Amount など) |
対応 Excel | Microsoft 365/2019/2016(Power Query 搭載版) |
M コード(詳細エディターに貼り付け)
let
// 対象ブックをバイナリとして読み込み
BinaryFile = File.Contents("C:\Data\ReportSheets.xlsx"),
// ブック内のシート・テーブル一覧を取得
AllObjects = Excel.Workbook(BinaryFile, true),
// Kind 列が "Sheet" かつ Name 列が "Summary" 以外を抽出
SheetOnly = Table.SelectRows(
AllObjects,
each ([Kind] = "Sheet" and [Name] <> "Summary")
),
// 各シートの Data 列(テーブル本体)だけを取り出し、リスト化
SheetTables = Table.Column(SheetOnly, "Data"),
// 最初のシートから列名を取得し、他シートと合わせて結合
ColHeaders = Table.ColumnNames(SheetTables{0}),
CombinedTbl = Table.Combine(SheetTables, ColHeaders)
in
CombinedTbl
コードのポイント
ステップ | 説明 |
---|
File.Contents | 外部 Excel ブックをバイナリ形式で読み込みます。ネットワークパスも同様に扱えます。 |
Excel.Workbook | ブック内のシート・テーブル・名前付き範囲の一覧をテーブル形式で返します。第 2 引数 true は列型を自動推定するオプションです。 |
シート抽出 | Table.SelectRows で [Kind]="Sheet" を条件にシートのみ取得し、さらに [Name]<>"Summary" で除外シートを設定いたします。 |
列ヘッダーの統一 | 結合前に Table.ColumnNames で最初のシートの列名を取得し、Table.Combine の第 2 引数に渡すことで列順を強制的にそろえています。 |
操作手順
- Power Query エディターを開く
- Excel メニュー「データ」タブ →「データの取得」→「ファイル」→「Excel ブック」を選択し、
ReportSheets.xlsx
を指定いたします。
- ナビゲーターで任意のシートを一つ選択し、右下の「データの変換」をクリックしてエディターを起動いたします。
- 詳細エディターに M コードを貼り付ける
- エディター上部「ホーム」リボン →「詳細エディター」を開き、既存コードをすべて削除して上記 M コードを貼り付けます。
- 「完了」を押すと、プレビューに対象シートがすべて縦方向に連結された結果が表示されます。
- 読み込み方法を選択する
- プレビューを確認後、「閉じて読み込む」をクリックし、シートの指定セルまたは接続のみとして保存します。
応用例
要件 | 実装例 |
---|
複数シートを動的にフィルター | Text.StartsWith([Name], "2025") で年ごとに絞り込むなど、Text.* 関数を組み合わせます。 |
数値列を一括で型変換 | Table.TransformColumnTypes を追加し、{"Amount", type number} のように列と型を指定します。 |
重複行の削除 | 結合後に Table.Distinct を適用し、一意行のみ残します。 |
まとめ
Excel.Workbook
と Table.Combine
を組み合わせることで、シートをまたいだデータを簡単に一括集計できます。
- 除外条件や列型変換を M コードに含めておくと、Power Query の更新ボタンを押すだけで常に最新データへ更新可能です。
- 年度ごとや部署ごとにシートを分けているブックでも、この方法を用いればレポート作成や分析作業を効率化できます。