見出し画像

Excel メモ02【PowerQueryで最新ファイル読込】

ExcelのPowerQueryのメモです。
すぐ忘れるので備忘録メモ。
CSVをPowerQueryで読み込んで表示、ただそれだけ。
今感じている利点としては、「読み込んだデータの横に手動で数式をいれた列を増やした場合、長さが増えた分も自動で揃えてくれる」「読込が早い(気がする)」「セルが項目名を拾ってくれるので数式がわかりやすい」ですかね。あと、「なんかエクセル使ってるっぽさでる」とかですか。しらんけど。

PowerQueryで最新のCSVのみを読み込む

とあるフォルダに日々ダウンロードしたCSVを置いておくとして、PowerQuery で「フォルダーから」でそのフォルダを選択し、その中の「最新ファイル1つ」のみを読み込む方法のメモ。

まずは単純。

  1. 「フォルダーから」でフォルダを選択

  2. フォルダ内がリスト表示されている状態で「データの変換」を押す

  3. PowerQueryエディターが開いたらリストの「Date modified」もしくは「Date created」を「降順」に並べる

  4. 「列の追加」から「インデックス列」を追加

  5. 「0」のみでフィルタする(最新の1件がリストに残る)

  6. 「Content」の下向き矢印を押してファイルの結合で展開する(シート名とかは選ばない)

Date modified で降順
0でフィルタ
下向きの矢印

あとは詳細エディターから読込場所の絶対パスを変数に変えたりプロパティ名変えたりデータ型を変更したりして読み込めばOK。適応ステップはこんな感じ。

結合すると一気に下5つが増える

確認のため、1つCSVをコピーして1行目の値に「★」とかつけて保存して、クエリの「更新」で値が変わるか確認すればOK。

さて、ここで注意。「選択されたファイル」の1シート目が読み込まれるわけだが、行数が増えるのは問題ないが、「項目名」の変更や「列数」が増えると読まない。かたくなに読まない。のでそこんとこ注意。その場合はクエリの編集から上記適用したステップの2つ目あたりまでもどってフィルタしてインデックス列追加して0選んで展開をして保存すればよい(めんどいけど)

2種類のCSVを別々に最新1ファイル読むには

はいこれ。なぜ毎度固有の悩みが発生するのか。上記のパターンにぶち当たったのでこちらもメモ。ただし、前提として「CSVの名前が異なる」こと。
たとえば「A-yyyymmddhhmmss.csv」「B-yyyymmddhhmmss.csv」など区別できること。

上記の3まで一緒。降順にしたら4のインデックス列入れる前に「Name」でのフィルタを追加するだけ。この時注意するのが検索にキーワードをいれるのではなく「テキストフィルター」から「指定の値で始まる」もしくは「指定の値を含む」でフィルタすること。

テキストフィルター

あとは4のインデックス列入れてからは同じ。

こちらも複数セットしたあと、CSVコピーして値に印つけて更新されるか確認できればOK。
項目増えたり名前変わると読まないのでそこんとこ注意。

※パスを変数にするのは「パス」シートつくって下記するだけ

「A1」に下記をいれる

=LEFT(CELL("filename",$A$3),FIND("[",CELL("filename",$A$3))-1)

A1を選択した状態で「挿入 >テーブル」でテーブル名に「パス」とかいれて、PowerQueryエディターの詳細エディターの「let の下のソース=」の行を下記にする(例は明示的にletもいれた)
※指定フォルダ名は読み込むフォルダ名をいれる

let
    filepath = Excel.CurrentWorkbook(){[Name="パス"]}[Content]{0}[列1], 
    ソース = Folder.Files(filepath & "指定フォルダ名"),

これでPowerQuery で読み込むExcelと読み込まれるフォルダの位置さえ一緒ならどこへ移動しても問題ない
ちょっとめんどくさいっ子なのがPowerQuery ですな。

この記事が気に入ったらサポートをしてみませんか?