問題意識
PowerQueryでExcelファイルの全てのシート、もしくは全てのテーブルを読み込んで、結合したい、というニーズは割とよくあることだと思います。
GUIでその操作が可能なことはわかります。しかし一回ならまだしも、頻繁にそういう作業が発生するとしたら、毎回毎回GUIでその操作をするのは手間です。
もしその操作をM言語で記述しておけば、クエリをテンプレートに保存するなりM言語をコピペするなりすれば、読み込み・結合までが一発で終わります。
というわけで読み込み・結合までをM言語で書いてみたらどうなるか、というサンプルです。
M言語のコード
読み込み・結合1.pqm
let
// Excelブックを展開したtable
excelBookTable = Excel.Workbook(Web.Contents(path), null, true),
// シートならSheet、テーブルならTableを指定
Sheet_or_Table = "Sheet",
ブックから抽出 = if(not List.Contains({"Sheet","Table"},Sheet_or_Table))
then error Error.Record("KindError","Kindの指定が不正です。Sheet_or_Table で Sheet か Table のどちらかを指定してください。")
else Table.SelectRows(excelBookTable, each [Kind]=Sheet_or_Table),
結合したテーブル = Table.Combine(ブックから抽出[Data])
in
結合したテーブル
一応簡単に説明すると次のような流れになっています。
- 1つ目のステップ
excelBookTable
は、Excelブックをパスで読み込んで名前を付けただけです。実際に使うときはpath
のところに適切なファイルパスを文字列で入れておきます。 - 2つ目のステップ
Sheet_or_Table
では、シートオブジェクトかテーブルオブジェクトかを選択します(ここではデフォルト値として"Sheet"を設定しています)。 - 3つ目のステップ
ブックから抽出
では、Excelブックが持つオブジェクトのうち、2つ目のステップSheet_or_Table
で指定した形式のオブジェクトのみを抽出しています。 - 最後のステップ
結合したテーブル
で、抽出されたオブジェクトを結合したテーブルを返しています。
必要に応じて一部の定数をパラメータ化するとなお使いやすいかも。