• ベストアンサー

エクセル関数

A列に商品名、B列にNET(g)、C列に単価の入った単価表があります。 その単価表を範囲選択して、別の表の規定の列にA列の商品名と B列のNET(g)が合致すればC列の単価が返されるという計算式を作りたいと思っています。 VLOOK関数を使えばできるのかと考えましたが、数式の作り方が分かりません。 教えて下さい。

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

  • ベストアンサー
  • relax_d
  • ベストアンサー率40% (8/20)
回答No.5

vlookup関数は基本的には1つの条件から参照する関数なので、 複数条件で参照する場合、複雑になってしまうことから、 sumproduct関数を使用しますね。 1. 参照用の表を別途作成  (下にある別途参照表の位置に作成した場合) 2. 元の表の単価(ここではG2)のセルに   =SUMPRODUCT(($A$2:$A$3=E2)*($B$2:$B$3=F2)*($C$2:$C$3))   これを使用する行までコピーしてくださいね。 例:   商品名がiで100、または、商品名がpで50の場合のみに   各々の指定した単価を表示する場合 別途参照表 -- A ------ B ---- C -- 1. 商品名--- (g) -- 単価 2. -- i ---- 100 --- 50 3. -- p ---- 50 ---- 100 元の表 ---- E ------ F --- G --- 1. - 商品名 -- (g) - 単価 2. --- i ----- 100 3. --- p ----- 50 4. --- p ----- 120 5. --- i ------ 200 ※ ただ、このままですと条件に一致しないセルは0と表示されます。   空欄表示にしたい場合、if関数を使用します。   詳細は長くなるのでここには記載しませんが… ※ Sheetをまたいで表示させたい時は、   (シート名!$E$2:$E$3=シート名!A2)   の様にシート名から記入してくださいね。

noname#31141
質問者

お礼

とても丁寧なご回答ありがとうございました。短いお礼で申し訳ありません。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO3です。 数式が誤っていましたの以下の通り変更します。 =IF(COUNTBLANK(A2:B2),"",INDEX(Sheet1!C:C,SUMPRODUCT((Sheet1!$A$2:$A$10=A2)*(Sheet1!$B$2:$B$10=B2)*ROW(Sheet1!$A$2:$A$10))))

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

複数条件による抽出ならば、一例ですが次の方法は如何でしょうか。 例えば、シート1に単価表でシート2に抽出表とします。 シート2のC列に=IF(COUNTBLANK(A4:B4),"",INDEX(Sheet1!C:C,SUMPRODUCT((Sheet1!$A$2:$A$7=A4)*(Sheet1!$B$2:$B$7=B4)*ROW(Sheet1!$A$2:$A$7)))) ※単価表範囲はA1:C10、1行目は見出し行としています。

noname#31141
質問者

お礼

ありがとうございました。とても参考になりました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

E2に検索したい商品名、F2にNET(g)を入力してG2に =IF(SUMPRODUCT(($A$2:$A$1000=E2)*($B$2:$B$1000=F2)*1)=0,"",INDEX($C$1:$C$1000,SUMPRODUCT(($A$2:$A$1000=E2)*($B$2:$B$1000=F2)*ROW($A$2:$A$1000)))) 単価表が1000行以上あるなら式中の1000の数字を変更してください

noname#31141
質問者

お礼

ありがとうございました。たいへん参考になりました。

回答No.1

DGET関数を使うと複数条件の表引きが可能になります

noname#31141
質問者

お礼

ありがとうございます。馴染みのない関数ですが参考にさせて頂きました。

関連するQ&A