複数のブックを統合するのに標準機能でやると、出現するのがヘルパークエリなんですが、これが苦手な人も多いのではないでしょうか。でも慣れれば便利なので、是非とも仕組みを理解して活用して欲しいと思います。もちろん他の用途にも応用できますし。
今回は「複数のシートを縦結合する」を一からヘルパークエリで作ってみましょう。
普通にやる方法は以前にやったので割愛します。
最初に一点注意。対象のファイルとデータを読み込むファイルは必ず分けましょう。以上。
新規クエリに下記の順で作成していきます。
参照ブックlet ファイル名 = "対象ファイル.xlsx", //ここにファイル名を入力 ソース = Folder.Files("C:\……\……\"), //ここにフォルダパスを入力 絞り込み = Table.Skip(ソース, each [Folder Path]<>フォルダパス), 対象ブック = Excel.Workbook(Table.Skip(ソース, each [Name]<>ファイル名){0}[Content]) in 対象ブック
ソースのところまでは、「フォルダから」で指定するだけなので、マウス操作でできます。今回、上から該当するファイルを絞り込みたかったので、参照にアイテムアクセスを使うのは避けました。もしいらないシートがあるなら、ここで取り除いておきましょう。
パラメータ1"シート1" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true]
これも作るのは簡単です。空の新規クエリを右クリックして「パラメータに変換」と押せば「meta」より後は勝手に作成されます。「""」となっているところを、先頭のシート名(今回は「シート1」)に変更して、「Type」を「Text」にしておけばいいので、これもほぼマウス操作だけでできますね。
サンプルシートの変換let ソース = 対象ブック, 対象シート = ソース{[Item=パラメータ1, Kind="Sheet"]}[Data], ヘッダーに昇格 = Table.PromoteHeaders(対象シート) in ヘッダーに昇格
これは、「対象ブック」クエリを参照して必要な加工を入れただけです。クエリを作成したら、左ペインの「クエリ」で「サンプルシートの変換」クエリを右クリックして、「関数の作成」を選択します。
すると関数名を尋ねられるので、「シート読み込み」と入力して[OK]。
こうすることで、「サンプルシートの変換」クエリを編集すれば、自動的に「シート読み込み関数」も内容が更新されるようになります。ここまではマウス操作と日本語入力だけでできます。
これでヘルパークエリの準備は完了です。あとは新規のクエリで対象ブックを参照して加工するだけで完成です。
シートの結合let ソース = 対象ブック, Table列の追加 = Table.AddColumn(ソース, "Table", each シート読み込み([Item])), 列の選択 = Table.SelectColumns(Table列の追加, {"Name", "Table"}), Table列の展開 = Table.ExpandTableColumn(列の選択, "Table", {"列1", "列2"}), 列名の変更 = Table.RenameColumns(Table列の展開,{{"Name", "シート名"}}) in 列名の変更
のようにすればおしまいです。これもステップを見てもらえば分かりますが、マウス操作で問題なくできます。
「Table列の追加」はカスタム列の追加で「= シート読み込み([Item])」と入れただけです。そのままだと不細工なので、ステップ名だけ変えていますけど。
ヘルパークエリを作っておくことで、シートごとに加えたい編集がやりやすくなります(「サンプルシートの変換」クエリを書き換えるだけでいいから)。クエリの中に、「let ~ in」を入れ込むくらいなら、ヘルパークエリを入れたり、meta情報を関数で参照してやったりしたほうが、編集がしやすくなると思います。
ヘルパクエリを使わずにやる場合は、下記を参照してください。