目次
これらの例では、複数の条件のVlookup、特定のインスタンスまたはすべてのマッチを返す、複数のシートでダイナミックVlookupを行う方法などを学びます。
ExcelのVLOOKUPを使いこなすためのシリーズ第2弾です。 例題は、この関数がどのように機能するかを知っていることを前提としています。 そうでない場合は、ExcelのVLOOKUPの基本的な使い方から始めるのが当然でしょう。
先に進む前に、構文を簡単に思い出してください。
VLOOKUP(lookup_value、table_array、col_index_num、[range_lookup])さて、全員が同じページにたどり着いたところで、高度なVLOOKUP式の例を詳しく見ていきましょう。
複数の条件をVlookupする方法
ExcelのVLOOKUP関数は、データベースを横断して特定の値を検索するのに非常に便利です。 しかし、重要な機能が欠けています。 その構文では、検索値は1つだけです。 しかし、複数の条件で検索したい場合はどうすればよいのでしょうか? いくつかの解決策があります。
式1.2条件付きVLOOKUP
注文のリストがあり、2つの条件に基づいて数量を見つけたいとします。 お客様のお名前 と 製品 また、下表に示すように、各顧客が複数の製品を注文したことが複雑な要因となっている。
通常のVLOOKUP式は、指定した1つのルックアップ値に基づいて最初に見つかったマッチを返すので、この状況では機能しません。
これを克服するために、ヘルパーカラムを追加し、2つのルックアップカラムの値を連結して ( お客様 と 製品 を使用することが重要です。 最左 カラムは、Excel VLOOKUPが常にルックアップ値を検索する場所であるため、テーブル配列のカラムになります。
そこで、表の左側に列を追加し、その列全体に以下の数式をコピーします。 これにより、ヘルパー列に列BとCの値が入力されます(読みやすくするために、間にスペース文字を連結しています)。
=B2&" "&C2
そして、標準的なVLOOKUP式を使用して、両方の条件を ルックアップバリュー 引数をスペースで区切って指定します。
=VLOOKUP("ジェレミースイーツ", A2:D11, 4, FALSE)
または、条件を別々のセル(ここではG1とG2)に入力し、それらのセルを連結します。
=VLOOKUP(G1&" "&G2, A2:D11, 4, FALSE)
テーブル配列の4番目の列であるD列の値を返したいので、4と表記しています。 col_index_num . レンジルック 引数をFALSEに設定すると、完全一致でVlookupされます。 以下のスクリーンショットはその結果を示しています。
ルックアップテーブルが べっし のように、VLOOKUPの式にシート名を入れる。 例えば
=VLOOKUP(G1&" "&G2, オーダー!A2:D11, 4, FALSE)
あるいは、ルックアップテーブルに名前付きの範囲を作成します(例えば。 受注状況 )を使って、数式を読みやすくしています。
=VLOOKUP(G1&" "&G2, オーダー, 4, FALSE)
詳しくは、「Excelで他のシートからVlookupする方法」をご覧ください。
注意: 数式が正しく動作するように、ヘルパーカラムの値を正確に連結する必要があります。 ルックアップバリュー 例えば、ヘルパー列(B2&" "&C2) と VLOOKUP 式(G1&" "&G2) の両方の条件をスペース文字で区切るようにしました。
式2.複数条件付きExcel VLOOKUP
理論的には、上記の方法で2つ以上の条件をVlookupすることができます。 しかし、いくつかの注意点があります。 第一に、ルックアップ値は255文字に制限されており、第二に、ワークシートの設計上、ヘルパー列を追加できないことがあります。
Microsoft Excelでは、同じことを行うのに複数の方法が用意されていることがよくあります。 複数の条件をVlookupするには、INDEX MATCHの組み合わせか、最近Office 365で導入されたXLOOKUP関数のいずれかを使用することができます。
例えば、3つの異なる値に基づいて検索する場合( 日付 , お客様のお名前 と 製品 ) を使用する場合は、以下のいずれかの計算式を使用します。
=index(d2:d11, match(1, (g1=a2:a11) * (g2=b2:b11) * (g3=c2:c11)), 0))
=xlookup(1, (g1=a2:a11) * (g2=b2:b11) * (g3=c2:c11), d2:d11)
どこで
- G1 は基準 1(日付)です。
- G2 は基準 2(顧客名)
- G3は基準3(製品)
- A2:A11 はルックアップレンジ1(日付)です。
- B2:B11はルックアップレンジ2(顧客名)
- C2:C11 はルックアップレンジ 3(製品)です。
- D2:D11 はリターンレンジ(数量)です。
注:Excel 365以外のバージョンでは、INDEX MATCHはCSE配列の数式としてCtrl + Shift + Enterで入力します。 動的配列をサポートするExcel 365では、通常の数式としても機能します。
計算式の詳しい説明は、こちらをご覧ください。
- 複数条件でのXLOOKUP
- 複数条件でのINDEX MATCH式
VLOOKUPを使用して、2番目、3番目、n番目のマッチを取得する方法
ExcelのVLOOKUPは、マッチする値を1つだけ取得できます。 より正確には、最初に見つかったマッチを返します。 しかし、ルックアップ配列に複数のマッチがあり、2番目または3番目のインスタンスを取得したい場合はどうでしょうか? この作業は非常に複雑に思えますが、解決策は存在します
式 1.Vlookup Nth インスタンス
ある列に顧客名、別の列に購入した製品があり、ある顧客が購入した2番目または3番目の製品を探すとします。
最も簡単な方法は、最初の例で行ったようにテーブルの左側にヘルパーカラムを追加することです。 しかし、今回はそのカラムに顧客名と発生回数を " ジョン・ドウ1 ", " ジョン・ドウ2 " など
相対参照は、数式がコピーされたセルの位置に応じて変化するので、3 行目では $B$2:B3 に、4 行目では $B$2:B4 に、というようになります。
顧客名(B2)と結合すると、次のような数式になる。
=B2&COUNTIF($B$2:B2, B2)
上の数式はA2に入り、それを必要な数だけセルにコピーしていきます。
その後、対象名と出現回数を別々のセル(F1、F2)に入力し、以下の式で特定の出現回数をVlookupします。
=VLOOKUP(F1&F2, A2:C11, 3, FALSE)
式 2.Vlookup 2回目
もし、ルックアップ値の2番目のインスタンスを探すのであれば、ヘルパーカラムは不要です。 代わりに、MATCHと一緒にINDIRECT関数を使ってテーブル配列を動的に作成します。
=VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11")), 2, FALSE)
どこで
- E1 はルックアップ値
- A2:A11 はルックアップ範囲
- B11はルックアップテーブルの最後(右下)のセルです
上記の数式は、ルックアップテーブルのデータセルが2行目から始まるという特殊なケースを想定して書かれていることに注意してください。 テーブルがシートの中央部にある場合は、この汎用数式を使ってください。A1 は、列ヘッダーを含むルックアップテーブルの左上のセルです。
=VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+1+ROW(A1))&":B11"), 2, FALSE)
この式の仕組み
を作成する計算式の重要な部分をご紹介します。 ダイナミックVlookupレンジ :
INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11")
完全一致(最後の引数が0)に設定されたMATCH関数は、対象の名前(E1)と名前のリスト(A2:A11)を比較して、最初に見つかったマッチの位置(この例では3)を返します。 この数字は、vlookup範囲の開始行座標として使われるので、これに2を加えます(最初のインスタンスを除外するために+1、列ヘッダーで1行目を除外するために+1)。また、1+ROW(A1)を使えば、ヘッダー行(この例ではA1)の位置から必要な調整値を自動的に計算することができます。
その結果、以下のようなテキスト文字列が得られ、INDIRECTによって範囲参照に変換されます。
INDIRECT("A"&5&":B11") -> A5:B11
この範囲は table_array 引数を使用すると、5行目から検索を開始するようになり、検索値の最初のインスタンスが除外されます。
VLOOKUP(E1, A5:B11, 2, FALSE)
ExcelでVlookupして複数の値を返す方法
ExcelのVLOOKUP関数は、1つのマッチを返すように設計されています。 複数のインスタンスをVlookupする方法はありますか? はい、簡単ではありませんがあります。 これには、INDEX、SMALL、ROWなどのいくつかの関数を組み合わせて、配列式で使用することが必要です。
例えば、以下は、ルックアップ範囲B2:B16でルックアップ値F2のすべての出現箇所を見つけ、列Cから複数のマッチを返すことができます。
{=ferror(index($c$2:$c$11, small(if($f$1=$b$2:$b$11, row($c$2:$c$11)-1,""), row()-1)),"")} に変更しました。
ワークシートに数式を入力する方法は2つあります。
- 最初のセルに数式を入力し、Ctrl + Shift + Enter キーを押した後、数式をドラッグしてさらにいくつかのセルに移動します。
- 1つの列で隣接する複数のセル(下のスクリーンショットではF1:F11)を選択し、数式を入力してCtrl + Shift + Enterキーで完了させます。
いずれにせよ、数式を入力するセルの数は、一致する可能性のある最大数と同じかそれ以上にする必要があります。
計算式のロジックの詳細な説明とその他の例については、Excelで複数の値をVLOOKUPする方法をご覧ください。
行と列でVlookupする方法(双方向ルックアップ)
双方向ルックアップ 縡 行列ルックアップ または 2次元ルックアップ ) は、ある行と列の交点にある値を調べるという凝った言葉です。 Excelで2次元のルックアップを行うにはいくつかの方法がありますが、このチュートリアルの焦点はVLOOKUP関数なので、当然これを使用することにします。
この例では、月別の売上高が記載された以下の表をもとに、ある月の特定の商品の売上高を取得するためのVLOOKUP式を作成することにします。
項目名をA2:A9、月名をB1:F1、対象項目をI1、対象月をI2とすると、計算式は次のようになります。
=vlookup(i1, a2:f9, match(i2, a1:f1, 0), false)
この式の仕組み
この式の核となるのは、I1 の検索値と完全に一致するものを検索する標準的な VLOOKUP 関数です。 しかし、特定の月の売上が正確にどの列にあるかは分からないので、列番号を直接、I1 の検索値に与えることはできません。 col_index_num その列を見つけるために、以下のMATCH関数を使用します。
match(i2, a1:f1, 0)
英語に訳すと、「A1:F1のI2値を検索して、配列中の相対位置を返す」という式になります。 第3引数に0を与えることで、MATCHに対して検索値と全く同じ値を見つけるように指示します(これは、FALSEを レンジルック VLOOKUPの引数)。
から マー が配列の 4 列目にある場合,MATCH 関数は 4 を返し,そのまま col_index_num VLOOKUPの引数です。
VLOOKUP(i1, A2:F9, 4, FALSE)
月名はB列から始まりますが、ルックアップ配列にはA1:I1を使用しています。 これは、MATCHで返される数値と table_array VLOOKUPの
Excel で行列検索を行うその他の方法については、INDEX MATCH MATCH および 2 次元検索のためのその他の数式を参照してください。
Excelで複数のVlookupを行う方法(ネストしたVlookup)
メインテーブルとルックアップテーブルに共通の列が1つもないために、2つのテーブル間でVlookupができないことがあります。 しかし、探している情報を含まないが、メインテーブルと共通の列とルックアップテーブルと共通の列を持つ別のテーブルが存在することがあります。
下の画像はその様子を表したものです。
に基づいて、価格をメインテーブルにコピーすることが目的です。 アイテムID 問題は、価格を含むテーブルには アイテムID つまり、1つの計算式で2つのVlookupを行う必要があります。
便宜上、まず名前付きの範囲をいくつか作ってみましょう。
- ルックアップテーブル1の名前は 製品情報 (D3:E10)
- ルックアップテーブル2の名称は 価格 ( G3:H10 )
テーブルは、同じワークシート内でも、異なるワークシートでもかまいません。
そして、今度は、いわゆる ダブルVlookup 、別名 ネストされたVlookup .
まず、VLOOKUP式を作り、製品名をルックアップテーブル1(名前 製品情報 )をアイテムID(A3)に基づいて決定する。
=VLOOKUP(A3、製品、2、FALSE)
次に、上記の数式を ルックアップバリュー を引数にとり、ルックアップテーブル2(名称)から価格を取得します。 価格 ) を、ネストされた VLOOKUP が返す製品名に基づいて計算します。
=VLOOKUP(VLOOKUP(A3, PRODUCTS, 2, FALSE), Prices, 2, FALSE)
以下のスクリーンショットは、ネストされた Vlookup フォーミュラの動作を示しています。
複数のシートを動的にVlookupする方法
同じフォーマットのデータを複数のワークシートに分けて保存し、セルのキー値に応じて特定のシートからデータを取り出すことがあります。
例えば、同じフォーマットの地域別売上レポートがいくつかあり、ある製品のある地域での販売数を知りたい場合を考えてみましょう。
前の例と同様に、いくつかの名前を定義するところから始めます。
- CAシートの範囲A2:B5が名前になる CA_営業 .
- FLシートのA2:B5というレンジの名前 FL_売上高 .
- KSシートのレンジA2:B5の名称は KS_営業 .
ご覧のように、名前の付いた範囲はすべて共通の部分( 売上高 )と固有部品( シーエー , かんすうライブラリ , ケーエス これから作る数式に欠かせないので、必ず同じようにレンジの名前をつけてください)。
式1.INDIRECT VLOOKUPで異なるシートから動的にデータを引き出す
複数のシートからデータを取得する場合、VLOOKUP INDIRECT式は、コンパクトで分かりやすい最適なソリューションです。
この例では、このように要約表を整理しています。
- A2、A3に目的の製品を入力し、ルックアップ値とする。
- B1、C1、D1には、名前付き範囲の固有部分を入力します。
そして今度は、固有部分(B1)を含むセルと共通部分("_Sales")を連結し、その結果の文字列をINDIRECTに入力します。
INDIRECT(B$1&"_Sales")
INDIRECT関数で文字列をExcelが理解できる名前に変換し、その名前を table_array VLOOKUPの引数です。
=VLOOKUP($A2, INDIRECT(B$1&"_Sales")), 2, FALSE)
上の式がB2になり、それを下と右にコピーするのです。
ルックアップ値($A2)では、数式が右にコピーされたときに列が固定されるように、絶対セル参照で列座標をロックしていることに注意してください。 B$1参照では、数式がコピーされる列に応じて列座標が変化してINDIRECTに適切な名前部分を供給したいので、行をロックしているのです。
メイン・テーブルが、ルックアップ値を行に、範囲名の固有部分を列にという異なる構成になっている場合は、ルックアップ値に行座標を(B$1)、名前部分に列座標を($A2)ロックする必要があります。
=VLOOKUP(B$1, INDIRECT($A2&"_Sales"), 2, FALSE)
数式2.VLOOKUPと入れ子IFで複数のシートを検索する
2~3枚のルックアップシートがある場合、IF関数をネストした非常にシンプルなVLOOKUP式で、特定のセルのキー値に基づいて正しいシートを選択することができます。
=VLOOKUP($A2, IF(B$1="CA", CA_Sales, IF(B$1="FL", FL_Sales, IF(B$1="KS", KS_Sales,"))), 2, FALSE)
ここで、$A2はルックアップ値(項目名)、B$1はキー値(状態)である。
この場合、必ずしも名前を定義する必要はなく、外部参照で別のシートやワークブックを参照することができます。
その他の計算式の例については、「Excelで複数のシートにまたがってVLOOKUPする方法」をご覧ください。
以上、エクセルでのVLOOKUPの使い方でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
練習用ワークブック(ダウンロード
VLOOKUPの高度な計算式の例(.xlsxファイル)