なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた、ようこそ

Power Query:複数のCSVファイルを結合して読み込む

以前に一回やったんですが、もう少し手軽にできないかとやってみました。複数の CSVファイルを、なるべく手間をかけずに結合して読み込んでみます。

指定フォルダに接続する

単純に読み込んで結合するだけなら、実はそんなに大変でもないです。ひとまずフォルダコネクタを使ってファイル情報テーブルを呼び出します。


[データの取得]→[ファイルから]→[フォルダーから]

すると「参照」ダイアログが開きますので、フォルダを指定して[開く]をクリックします。


CSVファイルが保存されているフォルダを指定して[開く] →[データの変換]

「データの変換」をクリックすると、Power Queryエディターが開きます。

ここからはエディタでの操作になります。

CSVファイルを縦に結合する式を入力する

とはいえ、やることは新規のステップを一つ追加するだけです。


右ペインの「適用したステップ」で、
一番最後のステップ(今回は「ソース」)を右クリック
→「後にステップの挿入」

面倒なら数式バーの「fx」ボタンを押すだけでもいいです。

ステップを挿入したら、数式バーに下記のコードを貼り付けます。「★」と「☆」のところは、適宜修正してください。

= Table.Combine(Table.AddColumn(ソース, "x", each [
        csvインポート = Csv.Document([Content], [
            Delimiter=",",
            Columns=★,
            Encoding=☆,
            QuoteStyle=QuoteStyle.None
        ]),
        ヘッダーに昇格 = Table.PromoteHeaders(csvインポート)
    ][ヘッダーに昇格])[x])/code>
「★」に、CSVファイルの「列数」を入力(「Columns=★, 」自体を省略しても問題なし)
「☆」に、「エンコード(Shift-JISなら『932』、UTF-8なら『65001』)」を入力

これで CSVファイルの列名がなんであっても、読み込みできます。

実のところ、Excelファイル(xlxファイル)でもやることはほとんど変わりません。単純には「Csv.Document(……)」のところが「Excel.Workbook(……)」に代わるんですが、ブックの場合「シート名が同じかどうか/シートはいくつあって何個目なのか/空白行や空白列はあるのか」など、不確定要素が増えますので今回はパスしました。

おまけ:ファイル名列を追加したい場合

もしファイル名列を追加したい場合は、下記のようにします。

= Table.Combine(Table.AddColumn(ソース, "x", each [
        csvインポート = Csv.Document([Content], [
            Delimiter=",", 
            Columns=★, 
            Encoding=☆, 
            QuoteStyle=QuoteStyle.None
        ]),
        ヘッダーに昇格 = Table.PromoteHeaders(csvインポート),
        ファイル名列の追加 = Table.AddColumn(
            ヘッダーに昇格, "ファイル名", (x)=> [Name]
        )
    ][ファイル名列の追加])[x])

これでファイル名列が追加されます。