目次
概要
同一ブックに複数のテーブルが存在する場合、それらを一括で Power Query に取り込み、特定列だけを抽出して一覧化すると後続の集計やクロス集計が容易になります。本記事では、すべてのテーブルを対象に展開する方法と、テーブル名の末尾が “Staff” で終わるものだけを抽出する方法の二通りをご紹介いたします。
1. ブック内の全テーブルを展開する
M コード
let
// ブック内テーブルと名前付き範囲をリスト取得
TblSource = Excel.CurrentWorkbook(),
// 取得した各テーブルの Content 列を展開し
// 必要な列「Employee」「Role」を抽出
TblExpanded = Table.ExpandTableColumn(
TblSource,
"Content",
{"Employee", "Role"}
)
in
TblExpanded
解説
ステップ | 説明 |
---|---|
Excel.CurrentWorkbook() | ブック内に存在するすべてのテーブルと名前付き範囲をリスト形式で取得します。 |
"Content" 列の展開 | 取得したリストには各テーブルの実データが Content 列に格納されているため、それを展開します。 |
列の抽出 | {"Employee", "Role"} で必要列のみ取得し、不要列を削除しています。 |
2. テーブル名の末尾が “Staff” のみを抽出して展開
M コード
let
// ブック内テーブルと名前付き範囲を取得
TblSource = Excel.CurrentWorkbook(),
// テーブル名が "Staff" で終わるものだけを抽出
TblFiltered = Table.SelectRows(
TblSource,
each Text.EndsWith([Name], "Staff")
),
// Content 列を展開し対象列を抽出
TblExpanded = Table.ExpandTableColumn(
TblFiltered,
"Content",
{"Employee", "Role"}
)
in
TblExpanded
解説
ステップ | 説明 |
---|---|
Table.SelectRows | 行フィルターで [Name] 列が "Staff" で終わるものだけを抽出しています。 |
Text.EndsWith | 大文字小文字を区別したくない場合、オプション引数に Comparer.OrdinalIgnoreCase を指定可能です。 |
以降の処理 | 先述の「全テーブル展開」と同様、Table.ExpandTableColumn で列を展開して必要列を抽出します。 |
操作手順
- Power Query エディターの起動
データ タブ →「テーブル/範囲から」→ 任意のテーブルを選択 →「データの変換」をクリックしてエディターを開きます。 - 詳細エディターでコードを置換
ホーム →「詳細エディター」を開き、上記いずれかの M コードを貼り付けます。 - プレビュー確認と読み込み
目的の行が正しく取得できていることを確認し、「閉じて読み込む」を選択します。結果はテーブルとしてシートに配置されます。
応用ポイント
要件 | 実装例 |
---|---|
複数列を追加で抽出 | {"Employee","Role","Amount"} のように列名を追加します。 |
列型の一括変換 | Table.TransformColumnTypes を追加し、数値列や日付列を明示的に設定します。 |
重複行を削除 | 最終ステップに Table.Distinct を挿入すると一意行のみ残せます。 |
まとめ
更新時は Power Query の再読み込みのみで最新状態を反映でき、メンテナンス工数を削減できます。
Excel.CurrentWorkbook()
を利用すると、外部ファイル参照を行わずにブック内テーブルを一括管理できます。
テーブル名フィルターと列抽出を組み合わせることで、必要最小限のデータに整理してから読み込めます。