Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2019)
複数条件の計算式
投稿日時: 25/01/20 10:41:30
投稿者: み-1108

複数条件で別シート単価表から単価を参照して計算したい。
昼、夜のセルに数字が入力されていたら、昼夜のそれぞれの単価
数量でも単価が異なるので、それぞれの単価で計算したい。
 
よろしくお願いいたします。
 
  A  B   C   D   E
1 昼  夜  名称  数量  金額
2 5     リンゴ  60   
3    2  みかん 520  
 
E2=11400
E3=104520
と出てきてほしい。
 
別シートの単価表
   A    B    C    D  E  F G    H I  J K
1      500以上   200〜499 100〜199   50〜99    50未満    
2         昼   夜     昼 夜     昼 夜    昼 夜    昼    夜
3 リンゴ  100  200  150 220  180 250   190 270  210 300
4 みかん  101  201 151 221  181 251  191 271  211  301  

回答
投稿日時: 25/01/20 12:37:21
投稿者: んなっと

●単価表 シート
 
    A  B  C  D  E  F  G  H  I  J  K
1 〜以上 500    200    100    50     0   
2      昼  夜  昼  夜  昼  夜  昼  夜  昼  夜
3 リンゴ 100 200 150 220 180 250 190 270 210 300
4 みかん 101 201 151 221 181 251 191 271 211 301
 

 
  A  B    C   D    E
1 昼 夜  名称 数量  金額
2  5   リンゴ  60  57000
3    2 みかん  520 209040
 
E2
=SUMPRODUCT(A2:B2,D2*INDEX(単価表!A:Z,MATCH(C2,単価表!A:A,0),MATCH(0,0/(D2-(単価表!A$1:Z$1&"")>=0),0)+{0,1}))
下方向・↓

投稿日時: 25/01/20 14:29:06
投稿者: み-1108

んなっとさま
早々にありがとうございます。
 
求めている答えと異なるので、数式を読み取ろうとしていますが、
私には非常に難しいです。
 
E2=11400
E3=104520
になってほしいのですが、
最後に昼の 5 が かけられているようです。
 
昼に数字がたてられていたら 昼単価
夜ならば夜単価でと思っております。
 
 
 

回答
投稿日時: 25/01/20 16:24:13
投稿者: んなっと

間違えました。これで。
 
=SUMPRODUCT(D2*INDEX(単価表!A:Z,MATCH(C2,単価表!A:A,0),MATCH(0,INDEX(0/(D2-(単価表!A$1:
Z$1&"")>=0),),0)+(A2="")))

投稿日時: 25/01/20 17:06:51
投稿者: み-1108

いつもありがとうございます。
 
自分ではなかなか作れない関数をお教えいただきありがたい限りです。
しっかり読み取る努力をします。ありがとうございました。

回答
投稿日時: 25/05/22 15:41:23
投稿者: Mitchel

「複数条件で別シート単価表から単価を参照して計算したい。」という趣旨で、
もしも参照先のシート「単価表」を並び替えることやシート「計算」に列を追加することが許されるのであれば、関数をできるだけシンプルにすることができます。
    
■シート「単価表」
  A B C D E F
1 N.min N N.max 単価属性 果物名称 単価
2 1 ≦n≦ 49 昼 リンゴ 210
3 1 ≦n≦ 49 昼 みかん 211
4 1 ≦n≦ 49 夜 リンゴ 300
5 1 ≦n≦ 49 夜 みかん 301
6 50 ≦n≦ 99 昼 リンゴ 190
7 50 ≦n≦ 99 昼 みかん 191
8 50 ≦n≦ 99 夜 リンゴ 270
9 50 ≦n≦ 99 夜 みかん 271
10 100 ≦n≦ 199 昼 リンゴ 180
11 100 ≦n≦ 199 昼 みかん 181
12 100 ≦n≦ 199 夜 リンゴ 250
13 100 ≦n≦ 199 夜 みかん 251
14 200 ≦n≦ 499 昼 リンゴ 150
15 200 ≦n≦ 499 昼 みかん 151
16 200 ≦n≦ 499 夜 リンゴ 220
17 200 ≦n≦ 499 夜 みかん 221
18 500 ≦n ”” 昼 リンゴ 100
19 500 ≦n ”” 昼 みかん 101
20 500 ≦n ”” 夜 リンゴ 200
21 500 ≦n ”” 夜 みかん 201
    
■シート「計算」
 A B C D E F G H I J
1 昼 夜 果物名称 数量 N.min N N.max 単価属性 単価 金額
2 5 ”” リンゴ 60 50 ≦n≦ 99 昼 190 11,400
3 ”” 2 みかん 520 500 ≦n 0 夜 201 104,520
4 ”” 2 リンゴ 102 100 ≦n≦ 199 夜 250 25,500
5 10 ”” みかん 436 200 ≦n≦ 499 昼 151 65,836
    
■シート「計算」における関数の入力について
・A〜D列は値貼り付けとし、E〜J列は下記の式を入力します。
・式はすべて2行目に入力し、3行目以降はオートフィル(2行目の式を反映)してください。
 ただし、E列とI列は配列数式です。中括弧{}より内側の式を入力後にセル内でctrl+shift+enterを押してください。
・IFERROR関数は無くても計算は機能しますが、エラー値を空欄にして表体裁をシンプルにしています。
・F,G列は無くても計算は機能しますが、人間の視覚上の見やすさを考慮して表示しています。
   
    E列 N.min
        {=IF(D2="","",MAX(IF(単価表!$A$2:$A$21<=D2,単価表!$A$2:$A$21,"")))}
    
    F列 N
        =IFERROR(VLOOKUP($E2,単価表!$A$2:$C$21,2,FALSE),""))
    
    G列 N.max
        =IFERROR(VLOOKUP($E2,単価表!$A$2:$C$21,3,FALSE),"")
    
    H列 単価属性
        =IF(ISNUMBER(A2),$A$1,IF(ISNUMBER(B2),$B$1,""))
    
    I列 単価
        {=IFERROR(INDEX(単価表!$A$2:$F$21,MATCH($E2&$H2&$C2,単価表!$A$2:$A$21&単価表!$D$2:$D$21&単価表!$E$2:$E$21,0),6),"")}
    
    J列 金額
        =IFERROR(D2*I2,"")
    
■参考文献
・I列の計算式は比較的長いですので、使い方の解説は他のサイトのブログが参考になります。
 下記のキーワードを検索してみてください。
    INDEX+MATCH関数を複数条件にする方法|全て一致を抽出

トピックに返信