dポイントプレゼントキャンペーン実施中!

エクセルの関数を教えて下さい。

例えば・・・
メインデータベース、サブデータベース、表示ファイルがあります。

メインデータベースには5,000件ほどの顧客がランダムで入力されており、
サブデータベースには、メインとは別の顧客が入力されています。

メインデータベース
  A    B    C
1 エリア 担当者  顧客番号
2 大阪  ○○  0008
3 東京  ○×   0001
4 福岡  ○△  0006
5 名古屋 △○  0004

サブデータベース
  A    B    C
1 エリア 担当者  顧客番号
2 大阪  ○○  0005
3 東京  ○×   0002
4 福岡  ○△  0007
5 名古屋 △○  0003

それを表示ファイルに顧客番号を入力すると、B2~B5までのエリアが、C2~C5の担当者がそれぞれ自動的に表示される方法を教えて下さい。
該当する顧客番号がメインと一致すれば、そこからエリア・担当を表示させ、メインに顧客番号の一致が無ければ、サブからエリア・担当を表示させるイメージです。

  A    B       C
1 顧客番号 エリア    担当者  
2 0001  メインから  メインから
3 0002  サブから   サブから
4 0003  サブから   サブから
5 0004  メインから  メインから
6 0005  サブから   サブから
7 0006  メインから  メインから
8 0007  サブから   サブから
9 0008  メインから  メインから

※メイン・サブのA1エリア、B1担当者、C1顧客番号は諸事情で並べ替えが出来ません。

IFとVLOOKUPを組み合わせた関数なのかな?と思い試行錯誤してみたのですが、全く機能しません・・・

どなたか宜しくお願いします。

A 回答 (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関数を実行します。
    • good
    • 0

 今仮に、「メインデータベースは「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)),""))
    • good
    • 0
この回答へのお礼

回答ありがとうございました!

お礼日時:2011/04/17 22:08

全ての顧客番号が必要なのであれば


表示ファイルのSheet1にメインデータをコピー
その下にサブデータをコピーして、顧客番号の列を
A列に移動(右へシフトして移動)して並べ替えれば
終わりだと思います。
入力された一部だけ必要なのであれば、上の作業をしてから
Sheet2にでもVLOOKUPを使って表示させればいいと思います。
    • good
    • 0

「メインデータベース」がブック 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 を下方にズズーッとドラッグ&ペースト
「エクセル 複数条件VLOOKUPの質問で」の回答画像3
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
わざわざ画像まで貼って頂き、感謝しています。

お礼日時:2011/04/17 22:08

この表からは、VLOOKUP関数は使用できません。

(検索列は表の最左端にある事が条件です)
抽出はINDEX(メインファイルのA:A,MATCH($B2,メインファイルの$C:$C,0))の組合わせになります。
かなりラフですが一例です。
=IF(COUNTIF(メインファイルの$C:$C,$B2),メインファイル抽出式,サブファイル抽出式)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!