Quantcast
Channel: なんでもエクセル(Nandemo Excel)
Viewing all articles
Browse latest Browse all 52

Power Query:複数ブックの複数シートを結合して読み込む

$
0
0

今回は「複数ブックの複数シートを結合して読み込む」クエリの作り方を説明します。最初にこれだけ。このクエリはマウス操作だけではできません。Power Query エディタを開いて編集する必要があります。

「複数ブックを読み込んで縦に結合する」とか「複数シートを読み込んで縦に結合する」とかなら、ネットを検索すれば記事や動画を見つけられると思います。

ただ、この2つを加工して組み合わせるのは、マウスでポチポチというわけにはいきません。これは普段、「データの結合と変換」からしか操作したことがない(普段はエディタを開いて操作しない)人には、少しハードルが高いかもしれません。

というのも、上記の操作の場合「ヘルパクエリ」が生成されますので、仮に覚悟を決めてエディタを開いたとしても、何をどう編集すればいいか分からなくなることが予想されるからです。

今回の方法は、「どうせエディタを開いて編集するのなら、なるべく作る手数の少ない方法にしてみよう」というコンセプトで考えました。なのでヘルパクエリは敢えて作りませんでした。お勧めの方法というわけでもありません。M言語をしっかり勉強して、自分で対処できる人はそっちの方向で頑張ってください。あくまでどうすればいいか全然わからない人のために書いています。

まずはファイルを保存するフォルダを用意して、そこに読み込みたいファイルを保存します。今回は「Book1.xlsx」「Book2.xlsx」「Book3.xlsx」を用意しました。

それぞれのファイルには「Sheet1」「Sheet2」「Sheet3」があり、A~C列に「列1」「列2」「列3」が作られているものとします。

ではまず、Power Queryエディタを開きます。

[データ]→[データの取得]→[Power Query エディターの起動]
もしくは「Ctrl + F12」を押して Power Queryエディタを開く 

エディタを起動したら、新規のクエリを作成します。

左ペイン上で右クリック
[新しいクエリ]→[その他のソース]→[空のクエリ] 

これで新規クエリが作成され、右ペインの「適用したステップ」の欄に、「ソース」が表示されます。

数式バーに下記を入力
= Folder.Files("C:\……\……")

「C:\……\……」のところに読み込みファイルを保存したフォルダパス(アドレス)を入力してください。パスが合っていれば、下の画像のようなテーブルが表示されます。

「Folder.Files」を使うことで(「フォルダコネクタ」といいます)、簡単にファイル情報に接続することができます。パワークエリには、他にも色んな種類のコネクタが用意されています。

では続いて次のステップに入ります。


右ペインの「適用したステップ」の「ソース」を右クリック [後にステップの挿入]

すると「カスタム1」という新規ステップが追加されます。

パワークエリでは、ひとつひとつの操作が「ステップ」という単位で区切られています。これを追加したり遡って削除したりすることで、自由に編集することができます。

ここから先は意味不明かもしれませんが、数式バーに下記のコードを貼り付けます。枠内を選択して「Ctrl + A・C」で全選択コピーができます。

= (nm1 as text, nm2 as text, dt as table, sr as number, sc as number)=> Table.PromoteHeaders(Table.FillDown(Table.FromColumns({{nm1, nm2}} & List.Skip(Table.ToColumns(Table.Skip(dt, sr)), sc)), {"Column1"}))

すると画像のような表示になるはずです。

これもパワークエリの便利なところです。「(変数)=>」を頭に付けることで、カスタム関数が簡単に作れます。これを使うことで繰り返し操作の記述を減らすことができます。せっかくなので関数っぽく、「カスタム1」から「fx」に名前の変更をしておきましょう。


「カスタム1」を右クリックして「名前の変更」 名前を「fx」に変更して Enterで確定

最後に読み込みのステップを追加します。先ほどと同じように、適用したステップの「fx」を右クリックして新規ステップを挿入し、数式バーに下記のコードを入力します。

= Table.Combine(Table.AddColumn(ソース, "x", each fx("ブック名", [Name], Table.DemoteHeaders(Table.Combine(Table.AddColumn(Excel.Workbook([Content]), "x", each fx("シート名", [Name], [Data], 0, 0))[x])), 0, 0))[x])

これでテーブルが読み込まれます。後は「ホーム」の「閉じて読み込む」でブックにテーブルを読み込んでください。

テーブルにはブック名とシート名が入るようになっています。

サンプルのファイル(見出し行が1行目にある)なら、これで問題ないのですが、実際の表では上手くいかない可能性があります。表の開始行/列が、A1とは限らないからです。先頭行や先頭列を削除したい場合は、最後のステップに入力した「fx("シート名", [Name], [Data], 0, 0)」の「0」のところに、削除したい行列の数を入れてください。

表の先頭2行・先頭1列を削除したい場合は、「fx("シート名", [Name], [Data], 2, 1)」のように修正します。なお、先頭行列が完全に空白だけの時は無視しても問題ありません。

こういう記事を書くと、意味不明なまま使う人が出てくるので嫌なんですが、「M言語を勉強してから挑戦してね」といっても誰もやりませんしね。解決してからでいいので、落ち着いたら後でちょっとずつでも勉強してください。大事なのは意味が分からないまま使い続けないことです。


Viewing all articles
Browse latest Browse all 52

Trending Articles