• 締切済み

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/17068)
回答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

  • エクセル 複数条件でのLOOKUP

    エクセルで、特定のキーで別表を参照してそこから値を表示するにはVLOOKUPを使用すると思いますが、複数条件でLOOKUPする事は可能でしょうか。 例えば、 シート1のA列とD列 シート2のB列とF列  2つの条件に合う(シート1A列=シート2B列 and シート1D列=シート2F列)レコードをシート2のG列からシート1のE列に表示したいと言う場合です。  シート1   A B C D E           1 01 ** ** 01       2 01 ** ** 02 うう       3 05 ** ** 01 ああ          ↑  シート2   A B C D E F G          1 ** 08 ** ** ** 01 いい       2 ** 01 ** ** ** 02 うう       3 ** 05 ** ** ** 01 ああ 判りにくい説明で申し訳ありませんが、よろしくお願いいたします。

  • VLOOKUPの複数参照先

    こんばんは。 エクセルのVLOOKUPでの質問があります。 よろしくお願いします。 1つのbookの中にA,B,C,D...とシートがあります。 Aのシートにて、VLOOKUPを使ってデータの参照をしたいのですが、 B,C,D・・の複数のシートを参照先にしたいのですが、 可能なのでしょうか。 検索先の文字列に応じて検索シート先を変えられれば・・と 思っています。 もう一つ、参照先に目的の値がなかった場合、#N/Aが表示されるのですが、これを1などの数字にすることはできないでしょうか。 お願い致します。

  • VLOOKUPとINDIRECTで別のEXCELファイルのシートを参照したい

    EXCEL2007を使用しています。 添付画像のように、例えば、B2のセルには =IFERROR(VLOOKUP(A2,INDIRECT($B$1&"!a:b"),2,FALSE),0) という関数があり、VLOOKUPとINDIRECTを使って同じEXCEL内の 別のシートを参照するようにしてあります。 ※シートをそれぞれ 0910,0911,0912という名前にして各年月毎に 商品コードと数量を入れてあります。 この商品コードと数量が入ったシートを数量.xlsxという別のEXCELファイルにして このMAINのEXCELシートにデータを持ってきたいのです。 何か方法はありますでしょうか?よろしくお願いします。

  • エクセルの VLOOKUPで2番目の結果を参照

    重複する値を含む表のVLOOKUPで、上から検索した結果の2番目を参照したいのですが。 Sheet1のA列に製品名、B列に型番が入っているような表で、初回の製品名(A列)には型番が仮称で入っています。 次に色んな仕様が決まったら、Sheet1の最下行に製品名と正式な型番が入ります。 次にSheet2 で製品名を入れると、Sheet1からVLOOKUPで正式な型番(2番目の結果)を参照するようにできないでしょうか? さらには希望する順位の値が参照できると更にありがたいのですが。 2番目限定でも十分です。

  • 複数のシートに跨ってVLOOKUPするには?

    複数のシートに跨っているデータをVLOOKUPで参照しようとしています。 1つめのシートには コード番号 シート名 の2つのカラムがあり、コード番号ごとに どのシートを参照すればよいかわかるようになっています。 参照されるほうのシートには コード番号 値 の2つのカラムがあります。 このシートが数十存在しますが、1つのシートにまとめることは出来ません。 1つ目のシート上で、 =VLOOKUP(A1,CONCATENATE(B1,"!A:B"),2,false) などと試してみたのですが、うまくいかないようです。 何か良い方法はないでしょうか。

  • Excel VlookupとIFのネストについて

    シートAでシートBの値をVlookupで引っ張っています。 ここで、値をそのまま返すだけではなく、値がはいっていれば●で返すようにしたいです。また、参照値がの列が空白の場合があり、エラーを表示させないようにもしたいのです。 =if(参照値="","",vlookup) これにどう足せば、完成できるのでしょうか? この形で考えているからいけないのでしょうか? 初歩的な質問ですが、よろしくお願いいたします。 (ネストはとっても苦手です・・・)

  • EXCEL VBA 絶対参照VLOOKUP検索

    お世話になります。 つい先ほども同じような質問させていただきましたが、VBAを使ってVlookupのような動きをする検索を実施したいのです。ただし、今回は商品マスターを絶対参照したいのです。 相対参照での処理は前回質問で回答者様からご教授いただきました方法で実現できました。 添付図のようにsheet1に基本データが入っています。 [検索]ボタンをクリックしたらsheet1の商品番号をキーにして、sheets2を参照してsheet1の区分にA-Dの値を挿入したいと思います。 sheet1、sheet2ともにデータ量が可変です。 sheet2の商品マスターを参照する際には絶対参照にしたいです。 どなたかご教授いただけますでしょうか? お忙しいところ何度も恐縮ですがよろしくお願い致します。 環境 WinsowsXP SP3

  • エクセルのシート参照

    Sheet1で入力した値をSheet2で参照させたい時、 Sheet1で入力したセルの行を削除してから挿入をして 値を入力させると、Sheet2のセルが「#REF!」と 表示されてしまいます。 行を削除して、挿入しても正しい値を参照させることは 可能ですか?

  • EXCEL 複数列にまたがる複数表の集約・並び変え

    教えてくださいm(__)m 上司が旧前から使用している仕入表の集約に悪戦苦闘。 同一シートで複数列(行)にまたがる同じ形式の仕入表をさらに集約したいと思ったんですが、 うまくいきません。ご教示願います。   A   B   C   D    E    F   G   H   I   J    ・・・・・・・・・  1日付 品目 数量 金額 ブランク 日付 品目 数量 金額 ブランク 2 ○  ○   ○   ○        ●  ●   ●  ●   3 ・ 4 ・ 5 ・ 6日付 品目 数量 金額 ブランク 日付 品目 数量 金額 ブランク 7 △  △   △   △        ▲  ▲   ▲  ▲ 8 ・ 9 ・ 10 ・ これを日付毎に・・・   A   B   C   D   1日付 品目 数量 金額 2 ○  ○   ○  ○ 3 △  △   △  △ 4 ▲  ▲   ▲  ▲ 5 ●  ●   ●  ● 6 ▲  ▲   ▲  ▲ 7 △  △   △  △ 8 ▲  ▲   ▲  ▲ 9  ・ 10 ・ というように集約、日付毎に並べ変えしたく。 分かりづらい説明で申し訳ありません。

  • ExcelのVlookup関数の制限について

    ExcelのVlookup関数についての質問です。 Vlookup関数の引数に「範囲」(参照する別表のこと)ですが、列数に制限がありますでしょうか?100列までならOKとか、ワークシートの列数が許す限り大丈夫、などの情報はありますでしょうか? 環境はWindows版のExcelで、versionは2000、2002、2003、いろいろです。 よろしくお願いします。

専門家に質問してみよう