- ベストアンサー
VLOOKUP関数で複数の条件を一致させる方法
- VLOOKUP関数を使用して複数の条件を一致させる方法について質問です。A列には横幅、B列には高さ、C列には奥行きが入っており、E列には商品コードが格納されています。新たに横幅100、高さ100、奥行き150のサイズが追加され、これらの条件が一致した場合にE列の商品コードを表示したいです。どのような関数を使用すれば良いでしょうか。
- VLOOKUP関数ではない方法で、A列の横幅、B列の高さ、C列の奥行きを組み合わせてE列の商品コードを表示したいです。新たに追加された横幅100、高さ100、奥行き150のサイズと一致する条件を作成する方法を教えてください。
- VLOOKUP関数ではない方法で、A列の横幅、B列の高さ、C列の奥行きを組み合わせてE列の商品コードを検索したいです。横幅100、高さ100、奥行き150のサイズと一致する条件を作成する方法を教えてください。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
補足情報があるのを見落としていました。 >>「挿入」「名前」「定義」で例えば「A列」と名前を付け、参照範囲に以下の数式を入力します。 >これはシート1のA1のセルでよろしいのですね? 最初に提示したSheet1のA1セルの絶対参照の数式ならどのセルで名前定義してもOKですが、相対参照にしてほかの行のデータにも反映させたい場合は、数式を入力するセル(D1セル)ですべて名前定義する必要があります。 実際のデータにあわせて数式を変更すると数式を間違える可能性が考えられるので、ひとまず新規ブックのA1セルにたとえば「100」の数字を入力し、Sheet2のA列に「100」B列とC列にSheet1のB1とC1セルの値があるデータを作って、すべての数式をコピー貼り付けして設定してみて、Sheet2のE列のデータがうまく引っ張ってこられるかどうか確認してください。 最終的にシート名を変更したようなブックで設定する場合は、シート名とA列のデータの一覧表を使って、それをセル参照するほうが間違いが少ないかもしれません。
その他の回答 (10)
- MackyNo1
- ベストアンサー率53% (1521/2850)
補足情報です。 名前定義で数式に利用する場合、D1セルだけでなく(A1セルを参照するだけでなく)その下のセルにも同様の数式を入力するなら、名前定義の際にD1セルを選択した場合は以下の相対参照した数式を入力してください。 =LOOKUP(Sheet1!A1,{100,200,300},{"Sheet2","Sheet3","Sheet4"})&"!A1:A100"
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート2のデータベースとなる表に様々な横、高さ、奥行きの違うデータを下の行に入力してそれに対する商品コード番号を入力ことで、それぞれのシートに商品コードとサイズの関係を記した表を作ることは必要ありません。シート2まとめておくことですべての他のシートで同じ式をコピーして使うことができます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
>シート1に先ほどの式を入れたら、横100高さ・・奥行き・・を入れたらシート2から探してくれる。また横400高さ・・奥行き・・と入れたらシート5から探してくれる。 というわけにはいかないのでしょうか? もちろん、いろいろなアプローチで実行可能ですが、私の回答に対する補足がないようなのでExcel2007の場合で回答すると、以下のようなIFERROR関数で条件を分岐して追加するのが最も簡単な対応です。 =IFERROR(IFERROR(Sheet2を検索する数式,Sheet3を検索する数式),Sheet4を検索する数式) 検索する数式が多い場合や、古いバージョンのエクセルを使用している場合は、例えば以下のような名前を定義します。 「挿入」「名前」「定義」で例えば「A列」と名前を付け、参照範囲に以下の数式を入力します。 =LOOKUP(Sheet1!$A$1,{100,200,300,400},{"Sheet2","Sheet3","Sheet4","Sheet5"})&"!A1:A100" 上記の,{100,200,300,400}や{"Sheet2","Sheet3","Sheet4","Sheet5"}の部分は一覧表を作成してセル参照することもできます。 同様に「B」列」と名前をつけA1:A100の部分をB1:B100に変更した数式を入力します(コピーしてAをBに変更)。 同様に「C列」「E列」の名前を定義しておきます。 このように名前定義しておけば、Sheet1のA1、B1、C1セルに3つの数字が入力してある場合、D1セルに以下の数式を入力すれば該当するシートのE列のデータを表示することができます。 =INDEX(INDIRECT(E列),MATCH(A1&B1&C1,INDEX(INDIRECT(A列)&INDIRECT(B列)&INDIRECT(C列),),))&""
補足
ご丁寧にありがとうございます。 チャレンジしてみましたがうまくいきません。 >「挿入」「名前」「定義」で例えば「A列」と名前を付け、参照範囲に以下の数式を入力します。 これはシート1のA1のセルでよろしいのですね?B1のセルにはB列C1のセルにはC列と名前・定義・参照範囲を行いました。シート1のD1に最後に書いてくださった数式をそのまま貼り付けましたが、D1には「#N/A」と出ます。 また、上記の,{100,200,300,400}や・・は、便利そうなのはわかりますが今は、シンプルにこの数式を理解していきたいので、後回しにします。 遅くなりましたがエクセルは2003です。該当するサイズのものがない場合はエラーが出るほうがよいのです。よろしくお願いします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
多数のシートで商品コードを表示させることが必要な場合にはお示ししたように例えばシート2にデータベースを用意しておき、それを他のシートで利用すればよいでしょう。 同じシートの中にデータベースとなるものを取り入れて使うのはあまり推奨できません。 例えばシート1で入力した式は他のシート3やシート5でもそのまま使用することができます。
補足
ありがとうございました。 私の説明不足のようでした。 シート2に横幅が100で高さと奥行きがさまざまなものが入ってます。 シート3には横幅が200で高さと奥行きがさまざまなものが入ってます。同様にシート4には横幅300のものシート5には横幅400のものがあるとします。 シート1に先ほどの式を入れたら、横100高さ・・奥行き・・を入れたらシート2から探してくれる。また横400高さ・・奥行き・・と入れたらシート5から探してくれる。 というわけにはいかないのでしょうか?
- MackyNo1
- ベストアンサー率53% (1521/2850)
参考までに。 該当データがない場合にエラー表示させないなら、条件部分に元の数式をISNA関数などで判定する必要がありますが、同じ配列を繰り返し用いると数式が重くなるので、間違えたデータの入力(#N/Aエラー)には対応する数式を提示しませんでした。 ご使用のエクセルのバージョンが明記されていないのですが、エクセル2007ならIFERROR関数で簡単にエラー処理をすることができます。 =IFERROR(元の式,"") #バージョンによって使用できる機能や操作方法が異なりますので、質問の際にはご使用のバージョンなどを明記するようにしましょう。 ちなみに、No4の回答者のIF関数の「COUNTIF(Sheet2!A:A,A1)=0」などの部分ですが、この条件では各列の値は存在するが、該当するデータの組み合わせのない場合にはエラー表示されることになりますので注意してください。
- MackyNo1
- ベストアンサー率53% (1521/2850)
A列からE列に元データがあり、G2、H2、I2セルに横・高さ・奥行きのデータが入力されている場合、以下のような配列数式の方がいく分計算負荷が少ないかもしれません。 =INDEX(E:E,MATCH(G2&H2&I2,INDEX($A$1:$A$100&$B$1:$B$100&$C$1:$C$100,),))&""
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えばシート2にはデータベースの表があるとして、A1セルから以降には横幅、B1セルから以降には高さ、C1セルから以降には奥行きの数値がそれぞれあり、E1セルから以降には相当する商品コードがあるとします。 そこでシート1の作業でA1セル以降には横幅、B1セル以降には高さ、C1セル以降には奥行きのデータをそれぞれ入力するとして、D1セル以降に商品コードを表示させるとしたらD1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(COUNT(A1:C1)<>3,COUNTIF(Sheet2!A:A,A1)=0,COUNTIF(Sheet2!B:B,B1)=0,COUNTIF(Sheet2!C:C,C1)=0),"",INDEX(Sheet2!E:E,SUMPRODUCT((Sheet2!A$1:A$100=A1)*(Sheet2!B$1:B$100=B1)*(Sheet2!C$1:C$100=C1)*ROW(Sheet2!A$1:A$100))))
補足
できました。ありがとうございました。 ところで、シート1とシート2にまたがらないといけないのでしょうか?シート1にデーターがあり、その中で探すことはできないのでしょうか?一枚のシートではムリなのでしょうか? また、逆になるのですが、シート2シート3シート4などと多数のシートにデーターがある場合はどうしたらよいのでしょうか? よろしくお願いします。
- aokii
- ベストアンサー率23% (5210/22062)
横幅、高さ、奥行きの文字をつなげて、 F2セル=A2&"-"&B2&"-"&C2 G2セル=E2 として、 VLOOKUP関数で、F列に該当するものがあれば、G列の商品コードが出るようにしてはいかがでしょう。
補足
ありがとうございます。 実は、たくさんのデーターが入ってましてF列に100-100-100とか100-100-150とか入れる作業なしで進めたいのです。 無理なのでしょうか?
- seiryu2989
- ベストアンサー率25% (3/12)
こんにちわ 私なら F列でも新しい列にA列&B列&C列をいれますね ただ数字の羅列だと 他の列との違いが出なくなるので F列=”W”&A列&”H”&B列&”L”&C列 という風な工夫をしますね 後は今までのVLOOKUP関数でできると思います
補足
ありがとうございます。 実は、たくさんのデーターが入ってましてF列に100-100-100とか100-100-150とか入れる作業なしで進めたいのです。 無理なのでしょうか?
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
お礼
ご丁寧にありがとうございました。 しばらくの間はNo.5の方法でやっていくことにしました。 どうもありがとうございました。