PowerQuery【05】フォルダから読み込み(Excel・CSV等の複数ファイルを同時にインポートする)
2021/3/6 追記:取り込み後、不要な行を消す方法とエラーについて
2021/8/9 追記:上記は便利なのですが、他のフォルダを指定するとエラーになってしまうので手順を書き足しました
シート名が相違している場合のエラーを書き足しました
■全体像説明
PowerQuery【01】PowerQuery(パワークエリー)で出来ること
PowerQuery【02】PowerQuery(パワークエリー)の動かし方
■PowerQueryの実際のインポート方法
PowerQuery【03】CSVファイルのインポート
PowerQuery【04】Excelファイルのインポート
PowerQueryでの、複数のファイルの同時インポート方法
PowerQueryではフォルダを指定することで、同時に複数ファイルをインポートできます。
Excelだけでなく、CSVファイル等も複数一度にインポートできます。
複数ファイルで無く、ファイル一つの読み込みも可能です。(フォルダ内にファイルが一つにしておく)
条件や、留意事項は以下の通りです。
読み込みの条件
・ファイルは同じ列名で構成されている。
・Excelファイルの場合、以下の条件を満たす必要があり、そうでないとエラーになる。
①シート名が同じ
②ファイルの種類が同じ(xlsb・xlsx・xls等が混在しているとダメ)
③読み取りパスワードがついていない。
※なお、エラー後、シート名等を修正して、再度更新すれば、読み込みできます。
留意事項
・同じフォルダ内(含む子フォルダ)のファイルを全て読み込む
・つもり、読み込みを止めるなら、対象ファイルを別のフォルダに移動する必要がある。
プロセスの自動化(繰り返し処理)する場合の例
・例えば、ダウンロードしたCSVファイルをいつも同じフォルダに保存する。
データを洗い替えるなら、前のCSVファイルを、別のフォルダに移動する。
読み込み方法
1.データタブ/データの取得/ファイルから/フォルダから/
2.読み込みフォルダを指定する
3.結合ファイルの一覧が表示される
結合/データの結合と変換(2016では「結合と読み込み先」)を選択
4.Excelファイルなら、シート名を指定する。サンプルが表示されるので「OK」
5.クエリ画面が表示されるので、適宜数値型→テキスト型等に変換して読み込む
6.クエリ名を変更して「閉じて読み込む」。
出来上がり ファイル名が左列に表示される
ファイルを一度に読み込む時だけでなく、プロセスの自動化等でも役立つと思います。
読み込み後の処理(不要な行を消す)
ヘッダー等、余計な行が表示されているので、以下で綺麗にします。
1.今回だけの処理のとき
(このPowerQueryを再利用するときは、「2.処理を繰り返すとき」を参照してください)
①行頭削除
②1行目をヘッダーとして使用
③不要な行を削除する
2.処理を繰り返すとき
1.の方法だとヘッダーに「ファイル名がある」ので
該当ファイル名が無くなると、以下のようにエラーになる。
【解決方法1】:ファイル名が必要無いとき
まず、SourceName列を削除してしまう。
その後、①行頭削除/②1行目をヘッダーとして使用/③不要な行を削除する を実施すれば良い。
【解決方法2】:ファイル名も必要なとき(①⑤⑥は、「1.今回だけの処理」と同様です。)
①行頭削除の後、
②列を追加して、SourceName列のレプリカを作る。
列の追加/条件列/ヘッダ行に当たるところには適宜ヘッダー行名を表示し、それ以外は「Source.Name」にする。
③追加列を左に移動する(追加列が右のままでも良ければそのままでも可)
④SourceName列を削除する。
⑤1行目をヘッダーとして使用
⑥不要な行を削除する
エラーについて
以下のようなメッセージが出るときの原因と対応です。
エラー1:「閉じて読み込み」をしようとすると、[DataFormat.Error ]のエラーが出る
メッセージ:![DataFormat.Error ]ファイルのデータが壊れています
クエリ:!ダウンロードは完了していません
原因:パスワードがついてままのファイルがある等の原因で開けないファイルがある
対応:ファイルを開いて開けないファイルがあるか調べる。大量のファイルがある場合は、いくつかのフォルダに分割して試してみる。
なお、フォルダ分割の際に、子フォルダにファイルを移しても、読み込みに親フォルダを指定すると、子フォルダまで読み込んでしまうので、注意。
エラー2:「閉じて読み込み」をしようとすると、[Expression.Error ]キーエラー
メッセージ:![Expression.Error ]キーがテーブルのどの行とも一致しませんでした
クエリ:!ダウンロードは完了していません
原因:シート名が異なるファイルがある。(Expressionエラーは他の原因でも出ますが、まずはシート名に相違がないか確認してください)
対応:ファイルを開いて開けないファイルのシート名を共通のものにする。
大量のファイルがある場合は、いくつかのフォルダに分割して試してみるのは、エラー1と同様です。
エラー3:読み込みの最中にエラーが出る。
DataSource.Error 別のプロセスで使用されているため、プロセスファイル「○○」にアクセスできません。
原因と対応:読み込みファイルが開いているので、いったん閉じてから処理する。