Power Queryで「ひとつ上の行」を参照する

Excel

先輩、ちょっといいですか?Excelだったらセルを『=A2』みたいに指定すれば簡単に上の行を参照できるんですけど、Power Queryってそういうの、どうやるんですか?

Power QueryはExcelの関数とはちょっと違うから、最初は戸惑うよね。でも『インデックス列』『マージ』を使えば、前の行を参照できるようになるよ。

Power Queryでは、Excelみたいに簡単に「上の行の値」を使うことができません。

でも、ちょっとした工夫をすれば、ちゃんと実現できます。

この記事では、Power Queryで前の行の値を参照する方法を紹介します。

データの前後関係を使いたいときに役立つテクニックなので、ぜひチェックしてみてください!

前日の終値を取り出そう

今回使うのは、前にも使った架空の「株価データ」です。

日付ごとに「終値(株価)」が並んでいるデータで、「今日の終値」と「前日の終値」の差を出して、前日差前日比を計算したい場面を想定します。

計算には、「前の日の行」にある「終値」を参照する必要があります。

Power Queryを使って「前日の終値」の列を追加する方法を紹介します。

前の行を参照するための4ステップ!

手順はこんな感じです!

  1. まず、0からの行番号をつけるために「インデックス列」を追加します
  2. 次に、同じく「インデックス列」を追加しますが、こちらは1からスタート
  3. この2つのインデックスを使って、テーブル同士をマッチング(マージ)します
  4. 最後に、マージした列から「前の行の値」を取り出せばOK!

手順1:「0から」のインデックス列を追加しよう

まずは元のデータに、0から始まるインデックス列を追加します。

メニューの「列の追加」→「インデックス列」→「0から」で簡単に追加できます。

各行に番号を振って、現在の行を見分ける目印にします。

手順2:「1から」のインデックス列を追加しよう

次に、1から始まるインデックス列を追加します。

メニューの「列の追加」→「インデックス列」→「1から」を選べばOK。

この1からの番号が、「前の行」とつなぐためのカギになります!

手順3:インデックス列を使ってテーブルをマージしよう

「0から」と「1から」のインデックスを使って、同じテーブル同士をくっつけます。

こうすることで、「前の行の値」を今の行にくっ付けられるようになります!

メニューから「ホーム」→「クエリのマージ」をクリック

マージの設定を以下のように選びます。

  • テーブル1(元のテーブル)
    テーブルの参照列に「0から」のインデックスを選ぶ
  • テーブル2(同じテーブルを選ぶ)
    同じテーブルをプルダウンから選ぶ
    テーブルの参照列に「1から」のインデックスを選ぶ
  • 結合の種類
    左外部(最初の行すべて、および2番目の行のうち一致するもの)」を選ぶ

あとは[OK]を押すだけで、前の行と結合されたテーブルが完成します!

手順4:マージしたテーブルから値を取り出そう

結合したテーブルを展開して、中身を取り出しましょう!

列の見出しの右にある小さなアイコン(展開アイコン)をクリックします。

欲しい項目にチェックを入れましょう。

「日付」と「終値」にチェックを入れて[OK]を押します。

※「日付」は確認用なので、なくても大丈夫ですが、今回は一応入れておきます。

また、プレフィックスは使わないので、チェックは外します。

前日の「終値」がちゃんとくっ付きました!

あとは、見やすく整える仕上げ作業です!

データをチェックしたら、いらない行を「列の削除」で削除して、列名もわかりやすく変更しておきましょう。

1行目には前の行がないので、「null(データなし)」になっちゃいます。

このままでも問題ないですが、列全体を数値として扱いたい場合は「0」などに置き換えておくと安心です。

やり方は、メニューの「変換」→「値の置換」で「null」を「0」にすればOK!

これで完成です!

おつかれさまでした!

ワンポイント

今回は「マージ機能」を使ってひとつ上の行を参照する方法を紹介しましたが、「0から」のインデックスを1つ作って、カスタム列で前の行を指定して値を取る方法もあります。

ただし、この方法はデータ量が多いとデータ読み込みが重くなりがち…

場面に応じて、使いやすい方を選んでみてくださいね!

追加されたカスタム = Table.AddColumn(追加されたインデックス, “前日終値” , each 追加されたインデックス[終値]{[インデックス]-1})

まとめ

今回は、Power Queryで「前の行の値」を参照する方法を紹介しました。

インデックス列を2つ追加して、それを使ってテーブル同士をマージするという、少し手間はかかりますが、データ量が多くても使えるとても実用的なテクニックです。

「1つ下の行」や「2つ上の行」みたいな応用もできますし、今回使ったデータの様に前日比の計算など、データの前後関係を扱いたい場面で大活躍します。

一度手順を覚えてしまえば、いろんな場面で応用できるので、ぜひ使いこなしてみてくださいね!

なるほど〜!ちょっと難しそうって思ってたけど、やってみたら意外とシンプルですね!