ExcelでPower Queryを使えばフォルダ内の複数ファイルを自動で結合・変換することが可能です。非常に便利な機能ですが、クラウドに保存したファイルを別のパソコンで開くと参照先が無効になってしまうという問題が発生します。
そんなときに役立つのが「相対パス」の活用です。
今回は、Power Queryで相対パスを使って、異なるパソコン環境でもフォルダやファイルを正しく読み込める方法について解説していきます。
PR:おすすめアイテム&セール情報(※プロモーションリンクを含みます)


ファイルの準備とPower Queryの基本操作

データ参照用ファイルの配置ルール

まず、Power Queryで参照するCSVファイルなどのデータを、Excelファイルと同じ階層(同じフォルダ内)、またはその中のサブフォルダ内に集めておきます。

複数のCSVファイルを格納したサブフォルダ
複数ファイルを扱う場合は、「新しいフォルダ」を作成し、ファイルをまとめておくと管理がしやすくなります。このサブフォルダ名は後で使用するため、「CSVフォルダ」(※A)などわかりやすいフォルダ名に変更して、メモなどに控えておきましょう。
Power Queryでフォルダを読み込む

ファイルの準備ができたら、Excelファイルを開いて「データ」タブから「データの取得」を選択します。「ファイルから」→「フォルダから」を選んで、目的のフォルダを読み込みましょう。

ここでは先程作成したサブフォルダの「CSVフォルダ」を開きます。
※CSVファイルを単体で読み込む場合は「データの取得」→「ファイルから」→「テキストまたはCSVから」を選択してください。

「CSVフォルダ」を開くと、このような画面が表示されます。
ここでファイルの結合をしておくとプレビュー画面が見やすくなるので「結合」ボタンを選択します。

「結合」ボタンから「データの結合と変換」を選択します。

「ファイルの結合」画面が表示されるので、「OK」をクリックします。

通常は、この画面で列の削除や並べ替えなどの操作を行いますが、今回は後回しにして「閉じて読み込む」を選択します。
読み込み後、一旦ファイルを保存する

データの読み込みが完了したら、ここで一旦Excelファイルを保存します。
ここからはPower Queryで「相対パス」を設定する準備に入ります。
Power Queryで相対パスを設定する方法

Power Queryで相対パスを使用するには、①Excel関数でファイル保存先のパス(フォルダの場所)を表示し、②それをPower Query内で参照するという手順を踏みます。以下の手順に沿って設定すると、ファイル移動時にもリンク切れを防げる柔軟なデータ管理が可能になります。
①現在のファイルパスをセルに表示する

まず、Excelに新しいシートを追加します。
追加したシートのセルA1に、以下の関数を入力してください。
=LEFT(CELL("filename", $A$1), FIND("[", CELL("filename", $A$1)) - 1)この関数は、現在のExcelファイルが保存されているフォルダのパスを取得し表示するための関数です。

関数を入力するとA1セルに「C:\Users\ユーザー名\Documents\プロジェクト\」のようなファイル保存場所のパスが表示されます。
セルをテーブルとして整える
次に、セルA1をテーブルとして書式設定します。
セルA1を選択した状態で「ホーム」タブ →「テーブルとして書式設定」へ進み、お好みのデザインを選び、「OK」をクリックします。

これでA1セルは「見出し(列名)」付きのテーブルに変換されました。
テーブルの見出しと名前を設定する
次に、このテーブルの見出し名とテーブル名を変更していきます。
見出し名の変更:

A1セルの「列1」などの見出し名を「パス」(※B)に変更します。
他の名前でも構いませんが、後でPower Queryで使用するので覚えておいてください。
テーブル名の変更:

テーブルを選択した状態で「テーブルデザイン」タブをクリックし、左上に表示されているテーブル名(通常「テーブル1」など)を「パス情報」(※C)に変更します。このテーブル名も後で使用するのでメモしておきましょう。
②Power Queryの詳細エディターでパスを利用する
ここからはPower Queryで実際に相対パスを使う設定を行っていきます。

先ほど読み込んだシートを開き、作成されたテーブルをクリックします。

テーブルを選択した状態で、「クエリ」→「編集」の順に進みます。

Power Queryエディターが開いたら、「詳細エディター」を選択します。

表示されたコードの1行目に、以下のコードを追加します
path = Excel.CurrentWorkbook(){[Name="パス情報"]}[Content]{0}[パス],
このコードではテーブル名「パス情報」から見出し名の「パス」という列の値を取り出し、それを変数「path」に代入しています。
ちなみに、「path」という変数は「file」でも「abc」でも何でも良いです。ただし、変更した場合は、次に出てくるソースの「path」 の部分も同じ名前に合わせる必要があります。
元の絶対パスを相対パスに置き換える
コードの中に以下のようなファイルやフォルダを絶対パスで指定している箇所があります(画像1行目)。

ソース = Folder.Files("C:\Users\ユーザー名\Documents\データ")この色付きの部分を、先ほど定義した path を使って書き換えていきます。
サブフォルダ(例:「CSVフォルダ」)を参照する場合:

ソース = Folder.Files(path & "\CSVフォルダ")
※「CSVフォルダ」の部分は最初に作成したA.サブフォルダ名です。
エクセルファイルと同じ階層(フォルダ)を参照する場合:

ソース = Folder.Files(path)
CSVファイル単体を参照する場合:

ソース = Csv.Document(File.Contents(path & "ファイル名.csv"), [Delimiter=",", Columns=○, Encoding=○])
※ファイル単体を参照する場合は、「データ」タブ→「データの取得」→「ファイルから」でCSVファイルを読み込み、詳細エディターから「path & “ファイル名.csv” 」に変更してください。(※ Columns=○, Encoding=○の値はファイルによって異なります。 )
※ちなみにサブフォルダ内のCSVファイルを参照する場合は「path & “ファイル名.csv” 」の部分を「path &”\サブフォルダ名\ファイル名.csv”」に変更してください。
値を変更したら、完了ボタンをクリックします。
読み込んだファイルを整える
あとは、列の削除、並べ替えなどの処理をおこない、「閉じて読み込む」をクリックすれば完了です。
※上記操作が原因で不具合が起こっても責任は一切負いませんので、自己責任の範囲内でお試しください。
【PR】おすすめリンク








