- ベストアンサー
エクセルで複数条件のVLOOKUP関数を使って顧客情報を表示する方法
- エクセルで複数条件のVLOOKUP関数を使って、顧客番号に応じたエリアと担当者を表示する方法を教えてください。
- メインデータベースとサブデータベースには異なる顧客情報があり、表示ファイルに顧客番号を入力すると、対応するエリアと担当者が自動的に表示されます。
- VLOOKUP関数の使用方法について試行錯誤してみましたが、うまく機能しませんでした。助けていただけると幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VLOOKUP関数は、指定した範囲の左端の中で一致する値を検索します。 つまり、メイン・サブのデータの並び方が現在のままですと、C列ではなくA列を検索してしまいます。 なので、VLOOKUP関数では、データの並び替えを行わない限り不可能と言うことになります。 何らかの形でA列のデータの前にC列のデータが挿入できれば、以下の式で可能な筈です。 たとえば、メインデータベースに空のシートを挿入し、A1に[=メインデータベース!C1]、B1に[=メインデータベース!A1]、C1に[=メインデータベース!B1]とします。 以降は順に行番号を増やしていきます。 こうする事で列を入れ替えたデータが用意できる筈です。 行方向は数式をコピーするだけで番号が自動で加算されて行く為、何千件もデータがあっても問題にはならないと思います。 また、EXCELの関数はセルの[値]に対して実行される為、セルの内容が数式であってもその結果の値に対して実行されますので、上記のやり方で列の情報を並び替えても問題なくVLOOKUPで 検索出来る筈です。 ※A1顧客番号、B1エリア、C1担当者とした場合 B2 =IF(ISNA(VLOOKUP(A2,メインデータベース!A:B,2,FALSE),VLOOKUP(A2,サブデータベース!A:B,2,FALSE),VLOOKUP(A2,メインデータベース!A:B,2,FALSE)) C2 =IF(ISNA(VLOOKUP(A2,メインデータベース!A:B,3,FALSE),VLOOKUP(A2,サブデータベース!A:B,3,FALSE),VLOOKUP(A2,メインデータベース!A:B,3,FALSE)) 以下[A2]の部分を[A3]、[A4]、[A5]、・・・・と置き換えれば良いです。 ISNA関数は引数がエラーを表す[N/A]で有るかを検査する関数です。 VLOOKUP関数の最後の引数に[FALSE]を指定することで、完全に一致する物を検索し見つからなかった場合は[N/A]を返させる事が出来ます。 メインデータベース内にデータが見つからなかった場合、ISNA関数の結果がTRUE(真)になる為、サブデータベースに対しVLOOKUP関数を実行します。 メインデータベース内にデータが見つかった場合、ISNA関数の結果がFALSE(偽)になる為、メインデータベースに対しVLOOKUP関数を実行します。
その他の回答 (4)
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、「メインデータベースは「MainDB.xls」という名前のブックのSheet1に入力されていて、 サブデータベースは「SubDB.xls」という名前のブックのSheet1に入力されていて、 表示先は「View.xls」という名前のブックのSheet1であるものとします。 その場合、表示ファイルのB2セルに、次の数式を入力してから、B2セルをコピーして、B2~C9の範囲に貼り付けると良いと思います。 =IF(COUNTIF([MainDB.xls]Sheet1!$C:$C,$A2),INDEX([MainDB.xls]Sheet1!A:A,MATCH($A2,[MainDB.xls]Sheet1!$C:$C,0)),IF(COUNTIF([SubDB.xls]Sheet1!$C:$C,$A2),INDEX([SubDB.xls]Sheet1!A:A,MATCH($A2,[SubDB.xls]Sheet1!$C:$C,0)),""))
- mar00
- ベストアンサー率36% (158/430)
全ての顧客番号が必要なのであれば 表示ファイルのSheet1にメインデータをコピー その下にサブデータをコピーして、顧客番号の列を A列に移動(右へシフトして移動)して並べ替えれば 終わりだと思います。 入力された一部だけ必要なのであれば、上の作業をしてから Sheet2にでもVLOOKUPを使って表示させればいいと思います。
「メインデータベース」がブック MainDB.xls のシート MainSheet1 に、 「サブデータベース」がブック SubDB.xls のシート SubSheet1 に、 それぞれ入力されていると仮定したとき、別ブック View.xls のシート ViewSheet1 における式は、例えば次のとおりです。添付図参照 1.セル B2 に次の[条件付き書式]を設定 数式が =ISERROR(B2) フォント色 白 2.セル B2 に次式を入力して、此れを右隣のセルにドラッグ&ペースト =IF(ISERROR(MATCH($A2,[MainDB.xls]MainSheet1!$C:$C,0)),INDEX([SubDB.xls]SubSheet1!$A:$B,MATCH($A2,[SubDB.xls]SubSheet1!$C:$C,0),COLUMN(A1)),INDEX([MainDB.xls]MainSheet1!$A:$B,MATCH($A2,[MainDB.xls]MainSheet1!$C:$C,0),COLUMN(A1))) 3.範囲 B2:C2 を下方にズズーッとドラッグ&ペースト
お礼
回答ありがとうございます! わざわざ画像まで貼って頂き、感謝しています。
- mu2011
- ベストアンサー率38% (1910/4994)
この表からは、VLOOKUP関数は使用できません。(検索列は表の最左端にある事が条件です) 抽出はINDEX(メインファイルのA:A,MATCH($B2,メインファイルの$C:$C,0))の組合わせになります。 かなりラフですが一例です。 =IF(COUNTIF(メインファイルの$C:$C,$B2),メインファイル抽出式,サブファイル抽出式)
お礼
回答ありがとうございました!