VLOOKUP関数で複数の条件を一致させる方法

このQ&Aのポイント
  • 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のサイズと一致する条件を作成する方法を教えてください。
回答を見る
  • ベストアンサー

VLOOKUP関数を使用していて質問です。

VLOOKUP関数を使用していて質問です。 A1からE10までサイズや商品コード商品名等が入っているとします。 A1のサイズに該当するものがあれば5列目(E列)の商品コードが出るようにしてあるのですが、A1のサイズが重なってきました。 つまり、A列には横幅、B列には高さ、C列には奥行きが入ってます。 今まで横幅100高さ100奥行き100しかなかったのですが、横幅100高さ100奥行き150のサイズが増えてきたというわけです。A1の100、B1の100、C1の100や、A2の100、A2の100、A3の150のように横・高さ・奥行きの三つがぴたりと合えばE列の商品コードが出るようにするにはどうしたらいいのでしょうか? VLOOKUP関数ではないような気がするのですが・・・。 よろしくお願いします。

  • 20r
  • お礼率80% (79/98)

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.11

補足情報があるのを見落としていました。 >>「挿入」「名前」「定義」で例えば「A列」と名前を付け、参照範囲に以下の数式を入力します。 >これはシート1のA1のセルでよろしいのですね? 最初に提示したSheet1のA1セルの絶対参照の数式ならどのセルで名前定義してもOKですが、相対参照にしてほかの行のデータにも反映させたい場合は、数式を入力するセル(D1セル)ですべて名前定義する必要があります。 実際のデータにあわせて数式を変更すると数式を間違える可能性が考えられるので、ひとまず新規ブックのA1セルにたとえば「100」の数字を入力し、Sheet2のA列に「100」B列とC列にSheet1のB1とC1セルの値があるデータを作って、すべての数式をコピー貼り付けして設定してみて、Sheet2のE列のデータがうまく引っ張ってこられるかどうか確認してください。 最終的にシート名を変更したようなブックで設定する場合は、シート名とA列のデータの一覧表を使って、それをセル参照するほうが間違いが少ないかもしれません。

20r
質問者

お礼

ご丁寧にありがとうございました。 しばらくの間はNo.5の方法でやっていくことにしました。 どうもありがとうございました。

その他の回答 (10)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.10

補足情報です。 名前定義で数式に利用する場合、D1セルだけでなく(A1セルを参照するだけでなく)その下のセルにも同様の数式を入力するなら、名前定義の際にD1セルを選択した場合は以下の相対参照した数式を入力してください。 =LOOKUP(Sheet1!A1,{100,200,300},{"Sheet2","Sheet3","Sheet4"})&"!A1:A100"

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.9

シート2のデータベースとなる表に様々な横、高さ、奥行きの違うデータを下の行に入力してそれに対する商品コード番号を入力ことで、それぞれのシートに商品コードとサイズの関係を記した表を作ることは必要ありません。シート2まとめておくことですべての他のシートで同じ式をコピーして使うことができます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.8

>シート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列),),))&""

20r
質問者

補足

ご丁寧にありがとうございます。 チャレンジしてみましたがうまくいきません。 >「挿入」「名前」「定義」で例えば「A列」と名前を付け、参照範囲に以下の数式を入力します。 これはシート1のA1のセルでよろしいのですね?B1のセルにはB列C1のセルにはC列と名前・定義・参照範囲を行いました。シート1のD1に最後に書いてくださった数式をそのまま貼り付けましたが、D1には「#N/A」と出ます。 また、上記の,{100,200,300,400}や・・は、便利そうなのはわかりますが今は、シンプルにこの数式を理解していきたいので、後回しにします。 遅くなりましたがエクセルは2003です。該当するサイズのものがない場合はエラーが出るほうがよいのです。よろしくお願いします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

多数のシートで商品コードを表示させることが必要な場合にはお示ししたように例えばシート2にデータベースを用意しておき、それを他のシートで利用すればよいでしょう。 同じシートの中にデータベースとなるものを取り入れて使うのはあまり推奨できません。 例えばシート1で入力した式は他のシート3やシート5でもそのまま使用することができます。

20r
質問者

補足

ありがとうございました。 私の説明不足のようでした。 シート2に横幅が100で高さと奥行きがさまざまなものが入ってます。 シート3には横幅が200で高さと奥行きがさまざまなものが入ってます。同様にシート4には横幅300のものシート5には横幅400のものがあるとします。 シート1に先ほどの式を入れたら、横100高さ・・奥行き・・を入れたらシート2から探してくれる。また横400高さ・・奥行き・・と入れたらシート5から探してくれる。 というわけにはいかないのでしょうか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

参考までに。 該当データがない場合にエラー表示させないなら、条件部分に元の数式をISNA関数などで判定する必要がありますが、同じ配列を繰り返し用いると数式が重くなるので、間違えたデータの入力(#N/Aエラー)には対応する数式を提示しませんでした。 ご使用のエクセルのバージョンが明記されていないのですが、エクセル2007ならIFERROR関数で簡単にエラー処理をすることができます。 =IFERROR(元の式,"") #バージョンによって使用できる機能や操作方法が異なりますので、質問の際にはご使用のバージョンなどを明記するようにしましょう。 ちなみに、No4の回答者のIF関数の「COUNTIF(Sheet2!A:A,A1)=0」などの部分ですが、この条件では各列の値は存在するが、該当するデータの組み合わせのない場合にはエラー表示されることになりますので注意してください。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

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)
回答No.4

例えばシート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))))

20r
質問者

補足

できました。ありがとうございました。 ところで、シート1とシート2にまたがらないといけないのでしょうか?シート1にデーターがあり、その中で探すことはできないのでしょうか?一枚のシートではムリなのでしょうか? また、逆になるのですが、シート2シート3シート4などと多数のシートにデーターがある場合はどうしたらよいのでしょうか? よろしくお願いします。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.3

横幅、高さ、奥行きの文字をつなげて、 F2セル=A2&"-"&B2&"-"&C2 G2セル=E2 として、 VLOOKUP関数で、F列に該当するものがあれば、G列の商品コードが出るようにしてはいかがでしょう。

20r
質問者

補足

ありがとうございます。 実は、たくさんのデーターが入ってましてF列に100-100-100とか100-100-150とか入れる作業なしで進めたいのです。 無理なのでしょうか?

回答No.2

こんにちわ 私なら F列でも新しい列にA列&B列&C列をいれますね ただ数字の羅列だと 他の列との違いが出なくなるので F列=”W”&A列&”H”&B列&”L”&C列 という風な工夫をしますね 後は今までのVLOOKUP関数でできると思います

20r
質問者

補足

ありがとうございます。 実は、たくさんのデーターが入ってましてF列に100-100-100とか100-100-150とか入れる作業なしで進めたいのです。 無理なのでしょうか?

回答No.1

とりあえず数式で2案、エラー処理なし 1. 検索系 F2セルに =A2&"-"&B2&"-"&C2 下へオートフィル J2セル =INDEX(D:D,MATCH($G2&"-"&$H2&"-"&$I2,$F:$F,0)) 右へ下へオートフィル 2. データベース関数 =DGET($A$1:$E$10,H4,$G$1:$I$2) 右へオートフィル 添付図参照

関連するQ&A

  • VLOOKUP関数について教えて下さい

    Excel97を使用しています。 VLOOKUP関数を使って二つのデータを照合したいのですが、 A    B     C    D    E        コード|内容 |    |コード |内容 | 0001 |ああ |ああ  |0001  |ああ | 0002 |ああ |    |0002  |   | 0003 |   |    0|0003  |   | D,E列の範囲からA列のコードを検索かけたいのですが、 =VLOOKUP(A2,ひかく,2,0)        ↑       D,E列 だと内容欄に空欄が入っていると0になってしまいます。 0でなく空欄にしたい場合はどうしたらよいのでしょうか?

  • VLOOKUP関数の使い方について

    以前コード番号を入力すると自動的に商品番号が出るようにしたいと質問させていただきました。 教えていただいた方法を使い おかげさまでコード番号を入力すると隣のセルに商品番号が出るようになりました。 ただ一緒に単価も入力させたいのですがそれができません。 入力本体は(シート名 「仕入れ表」) E列 コード番号 F列 商品名 G列 数量 H列 単価 I列 小計(G*H) という構成になっています。 (A~C列は他の項目が入っています) 参照するシート名「cade」 同じブック内にあります。 A列コード番号 B列商品名 C列単価 が入っておりA~C列までを名前の定義で 「cade表」としてあります。 「仕入れ表」のI列(小計) の二行目より =IF(E2<>"",G2*H2,"") の数式がコピーしてあります。 同じく 「仕入れ表」のF列には =IF(E2<>"",VLOOKUP(E2,cade表,2,FALSE),"") と数式を入れました。 結果コード番号を入力すると商品名は出ますが 単価は入力されません。 単価も同時に入力する為にはどのようにしたらよろしいでしょうか? どなかた教えていただけると助かります。 宜しくお願い致します。

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • Excelでの関数vlookupの応用

    関数については、ほとんど初心者の者です。 vlookup関数では、縦型の表の中から必要なデータを取り出すことができますが、それを応用して取り出した数値の合計を出すことはできますか? もし、vlookup関数以外の関数で、そのようなことをできる関数を知っている方、教えてください。お願いします。 (例:セルA列に科目、B列に科目コード、C列に金額の表で、    D列セルに科目コードを打ち込むと、E列にはB列から    抽出した科目コードの金額(C列)を合計して反映)

  • vlookup関数について

    vlookup関数について教えてください。    A       B         C      D      E        1  あじ    りんご     2  さば    みかん            3  さんま   ばなな        という内容で、D1セルに入力した内容に応じてE1セルに内容を転記させていました。 E1=VLOOKUP(D1$A$1$B3,2,FALSE) 上記で運用していたときはうまくいったのですが、 Cの列にも文字をいれ、E1セルにはCの内容を検索して、B列の内容を転記したいと 思って作りかえるとうまくいきません。 今回の新しいやり方では、 ・A列からの検索はいらない(でも他ファイルから参照されているので、削除、移動はできない) ・E1=VLOOKUP(D1$A$1$C2,2,FALSE)では #N/A となる ・A列からの検索がいらないから、E1=VLOOKUP(D1$B1$C2,1,FALSE) でも #N/A 調べてみたのですがわからなくて・・・ どこがおかしいのか、教えてください。宜しくお願いします。

  • エクセルVLOOKUPについて質問です

    同じブック内で業者一覧のシートにA列業者コードB列業者名が入っています。 別のシートでE列に業者名を入れるとD列にコードが入る様に =VLOOKUP(E6,業者一覧!$A$2:$B$480,1,FALSE) と入れました。#N/Aのエラーが出てしまいます。 この関数の使い方は間違っているのでしょうか? 以前似たような物を作った時は、VLOOKUPを使って簡単に検索できたのに、 今回は色々参考にしてみましたが、私が理解しきれていないのか、 エラーが出る要素が他にあるのか分からず質問します。 よろしくお願いします。

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • VLOOKUP関数についての質問です。

    VLOOKUP関数についての質問です。 例えば、シート1に、 A列    B列  C列 番号  品物  送り先 1   ばなな スーパー 2   ミカン 学校 3   イチゴ ケーキ店  あるとします。 VLOOKUP関数を用いて、 シート2に A列    B列 送り先  品物 ・   ・ ・   ・ ・   ・ とそれぞれ入力したいとして、以下のセルも同様の式を使い入力しますが いちいち式を立てて入力していくと大変です。 セルにVLOOKUP関数をコピーして使うにはどうしたらいいですか?? お願いします。

  • VLOOKUP関数について

    VLOOKUP関数についての疑問なのですが、 ...........A...............B 1..品名コード|.品名..| 2..A123...........|..お茶.| 3..A456...........|...水....| 4..A789...........|..お酒.| というデータがあったとします。 VLOOKUP関数を使用して、 このデータから 品名コードを入力して品名を検索することは できるのですが、品名を入力して品名コードを検索できません。 データのA列とB列の位置を入れ替えれば検索が可能になりますが…。 VLOOKUP関数は検索するキーのデータが一番左側にないと機能しないのでしょうか? どなたかご教授お願いいたします。

  • エクセル関数 VLOOKUPで

    エクセル2007です A列に商品名 B列に価格 C列に税込価格(B1*1.05) の表があります。    A   B  C  |いちご|900|945|  |みかん|300|315|   D1にA列の商品名を選択して入力できるように 入力規則でドロップダウンリストがら選択にしました。 (範囲はA列です) E1には商品名を選択すると税込金額が反映されるようにしたいので、 =IF(D1="","",VLOOKUP(D1,A:C,3,1)) と入力しました。        D   E           D   E 正 |いちご|945|  →  誤 |いちご|315|   D1の商品名と同行の3列目の値を返す…とやりたかったのですが、 別の行の値を返します。(C列の値であることは確かなのですが…) なぜでしょうか? また、テーブルを昇順で表示とあるのですが、優先はどの列でしょうか? A列優先でもD列優先でも値が違います。

専門家に質問してみよう