shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Power Query】データソースを相対パスにして動的に変更する方法

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)

 

以下は、事例の設定イメージ。

CELL関数でファイルパスのシートイメージ

CELL関数でファイルパスの取得例
データ範囲をテーブルに変換

テーブル化されたセルの情報であれば、Power Queryで取得できるため、次の手順でファイルパスの情報をテーブルに変換する。

  1. 「挿入」をクリック。
  2. 「テーブル」をクリック
  3. テーブルに変換する範囲を選択して、「先頭行をテーブルの見出しとして使用する」にチェックを入れて、OKをクリックする。

以下は、セルの$B$2:$B$2 をテーブルに変換した事例

Excelのテーブルを設定例

Excelのテーブルを挿入する方法

 

テーブル名の変更

「テーブルデザイン」をクリックし、テーブル名を任意の名前に変更する(テーブルの名前を後の設定で使用)。

以下は、設定テーブル」という名前にしている。

テーブル名の変更

テーブル名の変更

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の発生例

データソースの数式変更で、エラーの発生例

例えば、データソースの数式変更でのエラー対応例は次のとおり。

Expression.Error: '〇〇' という名前の Excel テーブルが見つかりませんでした。

であれば、テーブル名が誤っている可能性があるので、数式を変更するか、元のテーブル名を修正する。

Expression.SyntaxError: トークン Eof が必要です。

は、構文が誤っているので、誤字等を確認。

DataSource.Error: ファイル 'C:\Users\aaa\bbb\〇〇〇.xlsx' が見つかりませんでした。

の場合は、パスの場所にファイルがないので、その場所に該当のファイルが存在するかを確認する。

CELL関数等でファイルパスの取得の補足

CELL関数等でファイルパスを取得する方法の詳細や、OneDriveを利用している場合の注意点は以下に記載しています。

shikumika.org

手作業で、データソースを変更する方法

相対パスを動的にせず、都度変更する方法は知っていれば簡単。繰り返しの頻度が少ない場合は、まずはこの方法から。

shikumika.org

 

参考にさせていただいた情報など。

プライバシー保護に関する参考情報:

memo.furyutei.com

 

相対パスの設定方法(詳細エディターでの編集方法)

sakatakablog.com

 

今回紹介した方法以外に、相対パスの情報(その絶対パス)を、Excelのテーブルではなく「名前の定義」の機能を使うものもあります。個人的な印象でしかないが、「名前の定義の重複エラーが苦手」なので、とりえず上記のテーブルの機能を使った方法にしています。

以上、Power Queryでデータソースを相対パスにして、動的に変更する方法の備忘録でした。

 

参考情報(サンプルファイルなど)

上記の記事をもとに作成したExcelファイルを「note」で販売しています。

24時間以内であれば、返金申請が可能ですので、上記の手順で不明な場合や、実際に動作しているファイルを確認したい場合などにご利用ください。

note.com

 

データソースの管理方法については、以下にまとめてみたので、ご覧ください。

shikumika.org

 

データの加工・抽出、管理の操作事例を以下にまとめています。

shikumika.org