LoginSignup
0
1

More than 1 year has passed since last update.

PowerQuery Tips: 全てのシートもしくはテーブルを結合する

Last updated at Posted at 2023-02-08

問題意識

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. 1つ目のステップexcelBookTableは、Excelブックをパスで読み込んで名前を付けただけです。実際に使うときはpathのところに適切なファイルパスを文字列で入れておきます。
  2. 2つ目のステップSheet_or_Tableでは、シートオブジェクトかテーブルオブジェクトかを選択します(ここではデフォルト値として"Sheet"を設定しています)。
  3. 3つ目のステップブックから抽出では、Excelブックが持つオブジェクトのうち、2つ目のステップSheet_or_Tableで指定した形式のオブジェクトのみを抽出しています。
  4. 最後のステップ結合したテーブルで、抽出されたオブジェクトを結合したテーブルを返しています。

必要に応じて一部の定数をパラメータ化するとなお使いやすいかも。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1