Web上の表を直接Power Queryへ取り込み、分析用のテーブルとして整形する手順をご説明いたします。コードは「詳細エディター」にそのまま記述できます。サイトURL、テーブル名、列名はダミーに置き換えております。
目次
基本:最初のテーブルを読み込む
let
// ページの取得
Http = Web.Contents("https://example.org/sample-page"),
// HTMLを表形式に分解
Parsed = Web.Page(Http),
// 一覧の先頭行にある Data フィールド(テーブル群)を取得
DataSet = Parsed{0}[Data],
// その中の最初のテーブルを選択
FirstTbl = DataSet{0}
in
FirstTbl
Parsed
は、ページ内で検出されたテーブルや要素の一覧です。Parsed{0}[Data]
は先頭要素の「Data」テーブルを指します。さらに{0}
でその最初の表を選択しております。
すべてのテーブルを結合して1つにまとめる
ページ内に複数テーブルがあり、同じ列構成で並んでいる場合は、結合して1表にできます。
let
Http = Web.Contents("https://example.org/sample-page"),
Parsed = Web.Page(Http),
// Data列は「各要素の中身のテーブル」を格納している
DataList = Parsed[Data],
// すべてのテーブルを縦方向に結合(列名でアライン)
Combined = Table.Combine(DataList)
in
Combined
条件に合うテーブルだけを選別して結合する
特定の列を含む表だけを対象にできます。列見出しの表記ゆれにご注意ください。
let
Http = Web.Contents("https://example.org/sample-page"),
Parsed = Web.Page(Http),
DataList = Parsed[Data],
// 判定関数:指定列がすべて存在するテーブルだけ残す
HasCols = (t as table, cols as list) as logical =>
List.ContainsAll(Table.ColumnNames(t), cols),
// 例:Date と Amount を持つ表のみ抽出
Picked = List.Select(DataList, each HasCols(_, {"Date", "Amount"})),
// 必要に応じてヘッダー昇格(既に整っていれば不要)
Promoted = List.Transform(Picked, each Table.PromoteHeaders(_, [PromoteAllScalars=true])),
Output = Table.Combine(Promoted)
in
Output
運用上の注意点
- 動的ページ:JavaScriptで後から描画されるサイトは、
Web.Page
で表が取得できない場合があります。その際は、サイト側のCSVやAPIの有無をご確認ください。 - ログイン保護:認証が必要なサイトでは
Web.Contents
のオプション設定が必要となる場合がございます。 - 列型の明示:並べ替えや集計を行う前に
Table.TransformColumnTypes
で日付や数値の型を設定すると安定いたします。