Power Query(パワークエリ)は、データの変換や統合に便利なツールです。しかし、データソースのパスが固定(絶対パス)の指定で、ファイルの場所が移動すると設定変更が必要です。データソース保存場所の変更頻度が多い場合はどは、データソースを相対パスにして動的に変更できると便利なので、シンプルだと思う手順の備忘録。
Excelのシートからファイルパスを可変な変数として取得し、Power Queryを実行します。
内容:
手順
使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」です。以下説明は、固定パス(絶対パス)による読み込みの設定等が完了している前提の手順です。
1.Power Queryがあるファイルと、データソースを同じフォルダ内とする
データソースとなるファイルの保存場所は、Power Queryを設定するExcelファイルと同じフォルダ内(下位の階層でも可)にする。
理由は、セキュリティエラーを防止するためで、この状態にした場合、自分の使い方では、セキュリティのエラー等も発生しなかった。
2.Excelの数式で、ファイルパスを抽出し、範囲をテーブルに変換
CELL関数等でファイルパスの取得(相対パスの基準となる情報)
Power Queryを設定しているExcelで、任意に作成したシートにCELL関数を用いて、ファイルパスの情報を取得する。
例えば、次のように設定する。
・「設定」というシートを作成する。
・セルの$B$2に、項目名として「パス」と記載。この項目名も後の設定で使用する。
・セルの$B$3に、次の数式で現在のフォルダ情報を取得する。
=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)
以下は、事例の設定イメージ。
データ範囲をテーブルに変換
テーブル化されたセルの情報であれば、Power Queryで取得できるため、次の手順でファイルパスの情報をテーブルに変換する。
- 「挿入」をクリック。
- 「テーブル」をクリック
- テーブルに変換する範囲を選択して、「先頭行をテーブルの見出しとして使用する」にチェックを入れて、OKをクリックする。
以下は、セルの$B$2:$B$2 をテーブルに変換した事例
テーブル名の変更
「テーブルデザイン」をクリックし、テーブル名を任意の名前に変更する(テーブルの名前を後の設定で使用)。
以下は、「設定テーブル」という名前にしている。
3.Power Queryの編集画面で、ソースの数式を変更する(1箇所)
クエリの編集(Power Query エディターの起動)で、ソースの数式を確認し、絶対パスで表示されている部分を、文字を連結等で修正する。Excelの数式と同様に&でつなげる。
相対パスの基準となる情報は、前述の設定したテーブルにある。このテーブルの情報は、以下で取得できる。
Excel.CurrentWorkbook(){[Name="テーブル名"]}[Content][テーブルの項目名]{0}
なお、{0}の部分は、データがある1行目に該当(0から始まる連番のため)
よって、前述の設定で、テーブル名を「設定テーブル」、テーブルの項目名を「パス」と設定した事例では、次のようになる。
修正前:
= Excel.Workbook(File.Contents("C:\Users\aaa\bbb\ccc.xlsx"), null, true)
修正後:
= Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="設定テーブル"]}[Content][パス]{0}& "ccc.xlsx"), null, true)
フォルダ情報とファイル名部分(ccc.xlsx)を分けた事例だが、目的によってはExcelの設定シート(テーブル)の段階で、必要な文字列を作成しておく方法でも可。
なお、修正後のイメージは次のとおり。
正しく修正できれば、次のようにエラーが発生せず、次のステップに移動し、データソースの動的な設定が完了。
設定の補足情報
データソースの数式変更で、エラーが発生する場合
適切にデータソースの設定ができていない場合、次のような画面となる。
例えば、データソースの数式変更でのエラー対応例は次のとおり。
Expression.Error: '〇〇' という名前の Excel テーブルが見つかりませんでした。
であれば、テーブル名が誤っている可能性があるので、数式を変更するか、元のテーブル名を修正する。
Expression.SyntaxError: トークン Eof が必要です。
は、構文が誤っているので、誤字等を確認。
DataSource.Error: ファイル 'C:\Users\aaa\bbb\〇〇〇.xlsx' が見つかりませんでした。
の場合は、パスの場所にファイルがないので、その場所に該当のファイルが存在するかを確認する。
CELL関数等でファイルパスの取得の補足
CELL関数等でファイルパスを取得する方法の詳細や、OneDriveを利用している場合の注意点は以下に記載しています。
手作業で、データソースを変更する方法
相対パスを動的にせず、都度変更する方法は知っていれば簡単。繰り返しの頻度が少ない場合は、まずはこの方法から。
参考にさせていただいた情報など。
プライバシー保護に関する参考情報:
相対パスの設定方法(詳細エディターでの編集方法)
今回紹介した方法以外に、相対パスの情報(その絶対パス)を、Excelのテーブルではなく「名前の定義」の機能を使うものもあります。個人的な印象でしかないが、「名前の定義の重複エラーが苦手」なので、とりえず上記のテーブルの機能を使った方法にしています。
以上、Power Queryでデータソースを相対パスにして、動的に変更する方法の備忘録でした。
参考情報(サンプルファイルなど)
上記の記事をもとに作成したExcelファイルを「note」で販売しています。
24時間以内であれば、返金申請が可能ですので、上記の手順で不明な場合や、実際に動作しているファイルを確認したい場合などにご利用ください。
データソースの管理方法については、以下にまとめてみたので、ご覧ください。
データの加工・抽出、管理の操作事例を以下にまとめています。