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

Power QueryはExcelの関数とはちょっと違うから、最初は戸惑うよね。でも『インデックス列』と『マージ』を使えば、前の行を参照できるようになるよ。
Power Queryでは、Excelみたいに簡単に「上の行の値」を使うことができません。
でも、ちょっとした工夫をすれば、ちゃんと実現できます。
この記事では、Power Queryで前の行の値を参照する方法を紹介します。
データの前後関係を使いたいときに役立つテクニックなので、ぜひチェックしてみてください!
前日の終値を取り出そう
今回使うのは、前にも使った架空の「株価データ」です。

日付ごとに「終値(株価)」が並んでいるデータで、「今日の終値」と「前日の終値」の差を出して、前日差や前日比を計算したい場面を想定します。
計算には、「前の日の行」にある「終値」を参照する必要があります。
Power Queryを使って「前日の終値」の列を追加する方法を紹介します。
前の行を参照するための4ステップ!
手順はこんな感じです!
- まず、0からの行番号をつけるために「インデックス列」を追加します
- 次に、同じく「インデックス列」を追加しますが、こちらは1からスタート
- この2つのインデックスを使って、テーブル同士をマッチング(マージ)します
- 最後に、マージした列から「前の行の値」を取り出せばOK!
手順1:「0から」のインデックス列を追加しよう
まずは元のデータに、0から始まるインデックス列を追加します。
メニューの「列の追加」→「インデックス列」→「0から」で簡単に追加できます。
各行に番号を振って、現在の行を見分ける目印にします。

手順2:「1から」のインデックス列を追加しよう
次に、1から始まるインデックス列を追加します。
メニューの「列の追加」→「インデックス列」→「1から」を選べばOK。
この1からの番号が、「前の行」とつなぐためのカギになります!

手順3:インデックス列を使ってテーブルをマージしよう
「0から」と「1から」のインデックスを使って、同じテーブル同士をくっつけます。
こうすることで、「前の行の値」を今の行にくっ付けられるようになります!

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

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

あとは[OK]を押すだけで、前の行と結合されたテーブルが完成します!
手順4:マージしたテーブルから値を取り出そう
結合したテーブルを展開して、中身を取り出しましょう!
列の見出しの右にある小さなアイコン(展開アイコン)をクリックします。

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

「日付」と「終値」にチェックを入れて[OK]を押します。
※「日付」は確認用なので、なくても大丈夫ですが、今回は一応入れておきます。
また、プレフィックスは使わないので、チェックは外します。
前日の「終値」がちゃんとくっ付きました!

あとは、見やすく整える仕上げ作業です!
データをチェックしたら、いらない行を「列の削除」で削除して、列名もわかりやすく変更しておきましょう。
1行目には前の行がないので、「null(データなし)」になっちゃいます。
このままでも問題ないですが、列全体を数値として扱いたい場合は「0」などに置き換えておくと安心です。
やり方は、メニューの「変換」→「値の置換」で「null」を「0」にすればOK!

これで完成です!
おつかれさまでした!
今回は「マージ機能」を使ってひとつ上の行を参照する方法を紹介しましたが、「0から」のインデックスを1つ作って、カスタム列で前の行を指定して値を取る方法もあります。
ただし、この方法はデータ量が多いとデータ読み込みが重くなりがち…
場面に応じて、使いやすい方を選んでみてくださいね!

追加されたカスタム = Table.AddColumn(追加されたインデックス, “前日終値” , each 追加されたインデックス[終値]{[インデックス]-1})
まとめ
今回は、Power Queryで「前の行の値」を参照する方法を紹介しました。
インデックス列を2つ追加して、それを使ってテーブル同士をマージするという、少し手間はかかりますが、データ量が多くても使えるとても実用的なテクニックです。
「1つ下の行」や「2つ上の行」みたいな応用もできますし、今回使ったデータの様に前日比の計算など、データの前後関係を扱いたい場面で大活躍します。
一度手順を覚えてしまえば、いろんな場面で応用できるので、ぜひ使いこなしてみてくださいね!

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