BI探検ノート

Power BI で VLOOKUP のように別の表から値を持ってくる方法

約5分

濵口 翔長崎で、Power BI のつまずきを記録しています
目次
  1. 使った CSV
  2. 1. 「クエリのマージ」を開く
  3. 2. 2つ目の表と、結合の列を選ぶ
  4. 3. 新しい列「products」(中身は「Table」)
  5. 4. 見出しの右のボタンで「展開」
  6. 5. 商品名が足される
  7. 6. 商品コードが一致しない行があるとき
  8. 7. 商品の表に、同じ商品コードが2行あるとき
  9. 確認していないこと

確認日2026年10月25日。Power BI Desktop(日本語版、2.159.883.0)で、ダミーの CSV 2つ(売上6行と、商品名3行)を使いました。確認できていないことは、末尾にまとめました。

売上の表には「商品コード」しかなく、商品名は別の表にあります。Excel なら VLOOKUP で持ってくるところです。Power BI(Power Query)で、同じことをする手順を、実機で確かめました。

結論(30秒版)

  • Power Query エディターで、売上のクエリを選び、「ホーム」の「クエリのマージ」を押します。2つ目のテーブルに「products」を選び、両方の「商品コード」の見出しをクリックすると、「選択範囲では、最初のテーブルと 6 行中 6 行が一致しています」と出ました。
  • OK を押すと、新しい列「products」ができ、各セルには「Table」と出ます。見出しの右の展開のボタンを押して、「商品名」だけにチェックを入れると、商品名が、売上の各行に足されました。
  • 結合の種類は、既定の「左外部」(最初の表の行はすべて残す)でした。行の順番は、元と変わりました(下に書きました)。

使った CSV

  • 売上(sales_agg.csv、6行): 店舗、商品コード、単価、数量、売上
  • 商品(products.csv、3行): 商品コード(1001、1002、1003)、商品名(りんご、みかん、ぶどう)

どちらも、ダミーのデータです。

1. 「クエリのマージ」を開く

「データの変換」で Power Query エディターを開き、左の一覧で、売上のクエリ(sales_agg)を選びます。「ホーム」の右のほうの「クエリのマージ」を押すと、「マージ」のダイアログが出ます。上に、売上の表が出ています。

2. 2つ目の表と、結合の列を選ぶ

ダイアログの真ん中のドロップダウンから、「products」を選びます。そして、上の表の「商品コード」の見出しと、下の表の「商品コード」の見出しを、それぞれクリックします。見出しの色が変わり、下に「選択範囲では、最初のテーブルと 6 行中 6 行が一致しています」と出ました。

マージのダイアログ。上に売上の表、下に商品の表。商品コードを選び、6行中6行が一致しますと出ている

「結合の種類」は、「左外部(最初の行すべて、および 2 番目の行のうち一致するもの)」が、最初から選ばれていました。このまま、OK を押しました。

3. 新しい列「products」(中身は「Table」)

売上の表の右に、新しい列「products」ができました。セルには、どれも「Table」と出ています。まだ、商品名は出ていません。式の欄は、Table.NestedJoin(変更された型, {"商品コード"}, products, {"商品コード"}, "products", JoinKind.LeftOuter) でした。

売上の表の右に、products という列ができ、各セルに Table と出ている

4. 見出しの右のボタンで「展開」

「products」の見出しの右のボタンを押すと、展開の画面が出ます。「(すべての列の選択)」「商品コード」「商品名」にチェックが付いていて、下に「元の列名をプレフィックスとして使用します」のチェックが付いています。

展開の画面。商品コードと商品名にチェックが付き、元の列名をプレフィックスとして使用しますにもチェックが付いている

ここでは、「商品コード」のチェックを外し(売上の表に、すでにあるため)、「元の列名をプレフィックスとして使用します」も外して、OK を押しました。式は、Table.ExpandTableColumn(マージされたクエリ数, "products", {"商品名"}, {"商品名"}) になりました。

5. 商品名が足される

売上の各行に、「商品名」の列が足されました。1001 は「りんご」、1002 は「みかん」、1003 は「ぶどう」です。

売上の表に、商品名の列が足された。りんご、りんご、みかん、ぶどう、みかん、ぶどう

行の順番が変わりました。 元の CSV は、「渋谷 1001、渋谷 1002、新宿 1001、新宿 1003、京都 1002、京都 1003」の順でしたが、マージのあとは、「渋谷 1001、新宿 1001、渋谷 1002、新宿 1003、京都 1002、京都 1003」の順で、2行目と3行目が入れ替わっていました。順番に意味があるデータ(時系列の並びなど)では、この点に気をつけてください。理由は、確かめていません。

6. 商品コードが一致しない行があるとき

商品の表から、1003(ぶどう)の行を抜いた CSV(2行)で、同じ手順を試しました。ダイアログには「選択範囲では、最初のテーブルと 6 行中 4 行が一致しています」と出ました。

マージのダイアログ。商品の表は2行(1001、1002)で、6行中4行が一致しますと出ている

展開すると、商品コード 1003 の2行(新宿、京都)は、商品名が null(空) になりました。売上の6行は、1行も消えませんでした(左外部のため)。

展開後の表。1003 の行の商品名が null になっている。6行のまま

VLOOKUP の「#N/A」にあたるものは、出ませんでした。null の行を、「該当なし」などに置き換える方法は、確かめていません。

7. 商品の表に、同じ商品コードが2行あるとき

商品の表に、1001 が2行ある CSV(1001「りんご」、1001「リンゴ(別名)」、1002、1003 の4行)で、同じ手順を試しました。ダイアログには「6 行中 6 行が一致しています」と出ました(売上の6行すべてに、相手がある、という意味と思われます)。

マージのダイアログ。商品の表に1001が2行あり、6行中6行が一致しますと出ている

展開すると、売上の行が増えました。6行が8行になり、商品コード 1001 の売上の行(渋谷、新宿)が、それぞれ2行ずつ(「りんご」と「リンゴ(別名)」)になりました。売上の合計を出すと、二重に数えてしまいます。

展開後の表。商品コード1001の行が、商品名「りんご」と「リンゴ(別名)」で2行ずつになり、全部で8行

マージする前に、商品の表で、商品コードが重複していないかを確かめるのが安全です。

確認していないこと

  • 「結合の種類」を、「内部」や「完全外部」などに変えたときの動きは、確かめていません。
  • 「展開」ではなく「集計」を選んだときの動きは、確かめていません。
  • 「リレーションシップ」(モデル画面で表をつなぐ方法)との使い分けは、この記事では扱っていません。
  • 行の順番が変わった理由は、確かめていません。