• 締切済み

EXCEL 複数条件 参照 (VLOOKUP?)

エクセルで、特定のキーで別表を参照してそこから値を表示するにはVLOOKUPを使用すると思いますが、複数条件でLOOKUPする事は可能でしょうか。 シート2からシート1を参照し、 条件として、年月、品目、組織コードCD2を参照条件とし、シート1の金額1と数量1の値をシート2の同一条件の金額1と数量1に値を挿入する または、新規のシート3に統合したシートを作成したいのですが?  シート1   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2           1 200901 1001  40101 510010    100         1           2 200902 1001  40101 510010    200         2           3 200903 1001  40101 510010    100         1              ↑   ↑        ↑  シート2   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2            1 200901 1001  40101 510010          300       3       2 200902 1001  40101 510010          400       4       3 200903 1001  40101 510010          400       4       4 200901 1002  40101 510010          400       4          ↑   ↑        ↑ 回答  シート3   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2            1 200901 1001  40101 510010   100    300     1   3       2 200902 1001  40101 510010   200    400     2   4       3 200903 1001  40101 510010   100    400     1   4       4 200901 1002  40101 510010          400         4         ↑    ↑         ↑   判りにくい説明で申し訳ありませんが、よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

エクセル関数では、またVLOOKUPやMATCHでも3条件に合うものを検索することはできません。 関数に拘るなら、3つを定桁式(注)に&で結合した作業列を作る必要が有る。定桁式とは3項目ともそれぞれに定桁を確保し、右の項目データが左に進出しないように、工夫した結合をする式にすることです。この質問の例を見る限り品目 組織CD 組織CD2は決った桁数にそろっているから心配は要らないかも知れない。日付はText関数で文字列にして、勝つ定桁化したほうが安全でしょう。例えば2月は02になるように。例=TEXT(A1,"yyyymmdd") ーー そしてVLOOKUP関数の第1引数(探す値)はA1&B1&C1のように式の中でけつぼう結合文字列を作って検索すればよい。 ーー 問題はその作業列が、取ってくるデータ列の最左になければならないので、上例ではD列の直後に列挿入して、3キーを結合した値を作る必要があろう。 == ほかに何かまだ質問があるようだが(質問がわかりにくい)、ポイントは上記のようなことと思う。疑問があり必要あれば補足してください。 ーーー エクセルには本課題は、想定外の重荷と思う。 MSクエリとか、ACCESSとかSQL系だとAND条件を続けやすいので、本当はそちらを検討すべきでしょう。 ーー VBAで 検索表のキーをソートして、ユニークなら、Find関数で検索をする ユーザー関数を作る手もあると思う。VBAは経験有るのかな。 例データA2:A8 A,B,D列で昇順にソート後 200901 1001 40101 510010 300 3 200901 1002 40101 510010 400 4 200901 1003 40101 510010 500 5 200901 1003 40101 510011 600 6 200902 1001 40101 510010 400 4 200903 1001 40101 510010 400 4 200903 1003 40101 510011 400 4 シートに式 =fnd(200902,1001,510010)  で 結果は 6(行目) これで存在する行がわかれば、必要列のデータは取れる。 ーー ユーザー関数 (ただし見つからない場合などに、十分備えてないアイデア程度で不十分ですが) Function fnd(a, b, c) Set x = Range("A1:A100").Find(what:=a) xr = x.Row Set y = Range("B" & xr - 1 & ":B100").Find(what:=b) yr = y.Row Set z = Range("D" & yr - 1 & ":D100").Find(what:=c) zr = z.Row fnd = z.Row End Function

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 参考になるかどうか分かりませんが・・・ ↓の画像のような表を作ってみました。 Sheet2にすべて表示させるために Sheet3は必要ない事になりますが、 参照条件が、年月、品目、組織コードCD2の三つだという事なので それを参照してSheet2の空白部分にSheet1のデータを表示させるようにしています。 前提として、各Sheetの配置はまったく同じとします。 まず、Sheet2を画面に表示させ、Ctrlキーを押しながら、 画面左下にある「Sheet1」の見出しをクリックします。 これでSheet2で入力したものがそのままSheet1にも反映されるようになります。 そして作業列のI2セルを =IF(COUNTBLANK(A2:D2)>0,"",A2&B2&D2) としてオートフィルで下へコピーします。 これでSheet1・2共に、作業列に同じデータが入っていると思います。 (画像では10行目までのデータしか入れていません) これで画面左下のSheet見出しの上で右クリックし、 「作業グループ」を解除します。 次にSheet2の E2セル =IF(I2="","",IF(COUNTIF(Sheet1!$I$2:$I$10,I2)>0,INDEX(Sheet1!$E$2:$E$10,MATCH(I2,Sheet1!$I$2:$I$10,0)),"")) G2セル =IF(I2="","",IF(COUNTIF(Sheet1!$I$2:$I$10,I2)>0,INDEX(Sheet1!$G$2:$G$10,MATCH(I2,Sheet1!$I$2:$I$10,0)),"")) という数式をいれてそれぞれオートフィルで下へコピーしていきます。 これで希望にちかいSheet3のような表示にならないでしょうか? どうしてもSheet3にデータが欲しいのであれば、Sheet2の必要部分をコピーし、 Sheet3に貼り付けるという方法もあるかと思います。 以上、参考になれば幸いですが、 的外れの回答であったり、他の方の良い方法があれば 軽く読み流してくださいね。m(__)m

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんばんは VLOOKUP関数は1つの条件しか扱うことができません。 そこで、作業列を使い、複数の条件を1つにまとめます。 VLOOKUP関数は一番左の列しか参照できません。 ご質問の例ですと、おそらくA列に「年月」が入っていると思いますので、シート1とシート2の両方で、A列の左側に列を挿入してください。 この新しい列に、両方のシートで =B1&C1&E1 と入力して、以下オートフィルします。 これならばVLOOKUP関数で扱えるようになります。 ところで、件数(行数)はどのくらいでしょうか? 件数が1万件以下くらいなら、関数で何とかなります。 1万件を越える場合にはマクロ(VBA)を使うか、Accessを使うことをお勧めします。

ist1401
質問者

お礼

ありがとうごうございます。 件数は、5万行にまってしまいますが 参考させていただき、やってみます。 マクロが苦手なもので・・・・・。

関連するQ&A

専門家に質問してみよう