• 締切済み

エクセル関数で、VLOOKUPの応用?

エクセルの関数を教えてください。 簡単VLOOKUP等での計算は、出来るのですが・・・ 下記の資料より、=IF(A2>0,VLOOKUP(A2,単価表!A:D,4,"")"") で単価を求めることは出来ますが、数量(資材及び大きさ)が多い為、個々にコードを付けるの難しい為。 一つのコードより複数の内容から、条件の範囲に合う内容を選択したい 【資料】    A     B      C      D      E      F 1  コード  資材名   大きさ   単価    数量    価格 2  1001   〇〇〇   1.00m   1,000円   10ヶ所  10,000円    (1)                   (2)     3  1001   〇〇〇   2.00m   2,000円   25ヶ所  50,000円 4  1012   △△△   1.00m   1,500円   22ヶ所  33,000円 5  1012   △△△   3.00m   3,500円   12ヶ所  42,000円 【単価表】     A     B      C      D    1  コード  資材名   大きさ   単価     2  1001   〇〇〇   1.00m   1,000円    3               2.00m   2,000円    4                3.00m   3,000円    5  コード  資材名   大きさ   単価     6  1012   △△△   1.00m   1,500円    7               2.00m   2,000円    8                3.00m   3,500円 上記の資料より、コード入力(1)をすると、【全ての単価表】より条件に合う単価(2)が表示されるようにしたい。 【資料:単価で表示したい関数の内容】 1 コード1001の場合、単価表より資材名〇〇〇で大きさ1m以上2m未満の場合、単価1,000円 2 コード1001の場合、単価表より資材名〇〇〇で大きさ2m以上3m未満の場合、単価2,000円 3 コード1012の場合、単価表より資材名△△△で大きさ1m以上2m未満の場合、単価1,500円 4 コード1012の場合、単価表より資材名△△△で大きさ3m以上2m未満の場合、単価3,500円 と表示したい 以上、説明不足かもしれませんが、宜しくお願いします。

みんなの回答

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

こんばんは! 一案です。 ↓の画像のようにSheet2の別表を作成しておきます。 1行目は「コード」と「資材名」の組み合わせを入れておきます。 A2セル以降は大きさの区分を! そしてSheet1のD2セルに =IF(COUNTBLANK(A2:C2),"",INDEX(Sheet2!$B$2:$C$4,MATCH(C2,Sheet2!$A$2:$A$4,1),MATCH(A2&B2,Sheet2!$B$1:$C$1,0))) という数式を入れオートフィルで下へコピーすると 画像のような感じになります。 ※ 実際はもっと多くの組み合わせになると思いますが、やり方は全く同じで 数式の範囲指定部分を変更するだけで大丈夫だと思います。 お役に立ちますかね?m(_ _)m

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

単価表がシート2にあるとして作業列をE列とし、E2セルには次の式を入力して下方にドラッグコピーします。 =IF(ISNUMBER(A2),A2*100+C2,IF(A2<>"","",IF(C2<>"",ROUNDDOWN(E1,-2)+C2,""))) 資料がシート1に有るとして単価の列であるD2セルには次の式を入力して下方にドラッグコピーします。なお、大きさの1mは数値の1として入力されているとします。 =IF(OR(A2="",C2<1),"",INDEX(Sheet2!D:D,MATCH(A2*100+C2,Sheet2!E:E,1)))

回答No.2

コードが昇順に並んでいるとして、添付図のようにするとする E2セルの作業列は、 =IF(A2*C2=0,"",A2*10000+C2) 下へオートフィル 理解しやすい用の同一シートでJ2セルは =IF(G2*I2=0,"",MATCH(G2*10000+I2,E:E)) K2セルは =IF(J2="","",IF(INDEX(A:A,J2)<>G2,"",INDEX(D:D,J2))) j2:K2セルを下へオートフィル

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

基本的にはコード番号に対応する「大きさ/単価のブロック」を抜き取ってVLOOKUPするような方策になります。 作成例1:ご質問で掲示された「単価表」のその通りのレイアウトなら =VLOOKUP(C2,OFFSET(単価表!$C$1:$D$3,MATCH(A2,単価表!A:A,0)-1,0),2,FALSE) 作成例2: 単価表のコード1001に対応する大きさ単価のブロック(C2:D4)に「大きさ1001」と名前を定義する 単価表のコード1012に対応する大きさ単価のブロック(C6:D8)に「大きさ1012」と名前を定義する =VLOOKUP(C2,INDIRECT("大きさ"&A2),2,FALSE) のように検索する 作成例3:実際にはコード毎にデータ数(ブロックの行数)が異なるなら たとえばコード毎のブロック行数をVLOOKUPできるように単価表に追記し,その行数を拾って作成例1の数式を応用する

関連するQ&A