以前の記事で、取得データのパスを相対パスにする方法を書きました。
これができればセルに入力した値を取得データのパスとして使うことができました。
ところで、詳細エディターを開いてプログラム文らしきものを直接書くのって難しくないですか?
また、書く内容をいちいち覚えてられないですよね。
今回は、詳細エディターを使ってプログラム文を直接書かなくても、セルに入力した値を取得データのパスとして使う方法をお届けしたいと思います。
Contents
この記事でやりたいこと
ズバリ、詳細エディターを使わずに相対パスにする方法です。
イメージはこんな感じです。
今回の例では、パワークエリを使って「6月.csv」や「7月.csv」を取り込むのですが、その際の取得データのファイルパスを、セルへの入力値で指定します。
これができれば、ファイルパスを入力したセルの値が自動更新すれば相対パス化ができることになります。
そして今回のポイントはこちら。
- データ取得するクエリを、ファイルパスを変数とする関数クエリに変換する
- カスタム関数の呼び出しで、関数クエリを使ってファイルパステーブルから対象データを取得する
では見ていきましょう。
ファイルパスクエリとCSVデータ取得クエリの作成
まずはファイルパスクエリを作成します。
ファイルパスを入力したセルを選択し、データタブ「テーブルまたは範囲から」を選択します。
さすればパワークエリの編集画面が開きます。
ちなみに、ファイルパスの作り方はこちらの記事を参考にしてください。
話を戻します。
このような画面が開きます。
ここでは分かりやすいように、クエリの設定の(クエリの)「名前」を「ファイルパス」としておきましょう。
このクエリはいったん終了、「閉じて読み込む」より接続のみとしておきます。
次にCSVデータを取得します。
エクセルのデータタブより、今回の例では「テキストまたはCSVから」を選択し、
取込が完了すればこんな画面が開きます。
これで、ファイルパスと取得するCSVデータのクエリができました。
そしてこの状態では取得データのファイルパスは固定値のままですので、ファイルパスを変数とする関数クエリに変換していきます。
関数クエリへの変換
ここからが今日の本題です。
固定値であるファイルパスを変数に書き換える
クエリ「6月」を選択し、ステップ「ソース」を選択します。
そして数式バーを確認し、取得パスの箇所(上の図の枠)を変数に書き換えます。
今回、変数は「Path」としてみました。
このようにエラーになりますが、ここではこれでOKです。
変数Pathに投入するファイルパスが無いから、もっと言えば「Path」自体変数として認識されてないので当然です。
テーブルクエリを関数化する方法
次にこれを、ファイルパスを変数とする関数クエリに変えていきます。
クエリフィールドのクエリ「6月」を右クリックし、「関数の作成」を選択します。
そしてパラメーターが無いと言われますが、「作成」で進みます。
次に関数名を入力してOKを押します。
するとこうなります。
なお、クエリ「6月」はもう使いませんので削除しても大丈夫です。
変数宣言
次に、「Pathを、データ型文字列の変数とする」と宣言する必要があります。
数式バーの()内に「 Path as text 」と入力します。
このように入力し、続行しますか?をOKします。
これで変数宣言までできました。
変数宣言と、変数挿入箇所の確認
数式バーを展開するとこのようになります。
変数宣言にてPathが変数として指定され、CSV取得ステップにて取得データのファイルパスに変数Pathが挿入されていることが分かります。
これで関数クエリが完成しました。
次にいよいよファイルパスクエリと関数クエリをつなぎます。
関数クエリを使ってファイルパステーブルから対象データを取得する方法
まずファイルパスクエリを開きます。
そして列の追加タブから「カスタム関数の呼び出し」を選択します。
次に関数に先ほど作った「データ読込」、変数Pathには「列1」を選択します。
するとこうなるので、データ読込列を展開しましょう。
ちなみに、列1は今後使いませんので削除してOKです。
そして展開すると・・・・
ご覧の通り、列1に指定したパスを使って、6月.csvが展開されました。
ちなみにこのままでは使いにくいので、日付・金額それぞれデータの型を変更しておきましょう。
これで作業は完了、後は用途に応じて読み込みます。
では、セルに入力したパスを変更するとどうなるのか、これも見ておきましょう。
ファイルパスの変更とクエリの更新
ここまでで使ったパスは、6月.csvのものでした。
ではこれを、7月.csvに変えてみましょう。
ファイルパスの末尾を7月.csvに変更し、クエリ「ファイルパス」を更新します。
すると・・・
ご覧の通り、7月.csvの内容に更新できました。
次に、パスを増やすとどうなるのかも見ておきましょう。
具体的には、6月・7月の両ファイルパスを入力し、テーブルの範囲を拡張します。
この状態で更新するとどうなるのでしょうか。
このように、6月データに7月データが追加された状態で更新されました。
これは、「データ読込」関数に「ファイルパス」クエリの列1のデータを渡すため6月・7月の両CSVを取得することになります。
終わりに
今回は詳細エディターを使わずに関数クエリを作成し、相対パス化する方法をお届けしました。
変数を入力するする箇所についても、変数宣言と変数挿入の2か所だけなので、以前に書いた方法よりは簡単になったのではないでしょうか。
以前の方法だけでも十分ですが、また違ったアプローチを知っていることは大きな力になると思いますし、過去に書いた記事でも違った方法があればどんどん紹介していきたいと思います。
今回も最後まで読んで頂きありがとうございました!