- 締切済み
エクセルでりんごの個数を計算したい
りんごの値段が個数によって1個100円、3個200円、6個300円と3つの価格帯があるときに、 ある金額で買えるりんごの最大個数を計算したいのですが、条件式の作り方に悩んでいます。 例としては 500円で買える最大個数は6個300円を1つと3個200円を1つで合計6×1+3×1=9個 1000円で買える最大個数は6個300円を3つと1個100円を1つで合計6×3+1×1=19個 2000円で買える最大個数は6個300円を6つと3個200円を1つで合計6×6+3×1=39個 と頭では計算できるのですが、IF関数で作ろうとして条件の分け方で止まってしまいました。 できれば、この計算ができる条件式を分かりやすく教えていただけますようよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- warumx
- ベストアンサー率0% (0/9)
ご質問の内容は組合せ最適化問題の1つでナップサック問題と いうものです。 関数で解決するとなると、3つの価格帯の組合せを1つずつ 計算した表を用意して設定した金額に合致したものを探す ことになると思います。 Excelにはソルバーが用意されておりこの種の問題を解くには 最適です。 使用したことがなければ、Excelソルバーでネット検索すると 使い方を含めて多くの情報が見つかるでしょう。 一度試してみられることをお勧めします。 尚、当方のブログでこの質問を紹介してます。
- chayamati
- ベストアンサー率41% (260/624)
割り算の商を求めるQUOTIENT()関数がありました。 セルA2の金額で何個のリンゴが買えるかを求めます。 一個当たりの単価が小さい順にロットを攻めていきます。 B2 =QUOTIENT(A2,300)*6 +QUOTIENT(MOD(A2,300),200)*3 +QUOTIENT(MOD(MOD(A2,300),200),100)
- shintaro-2
- ベストアンサー率36% (2266/6245)
こんな感じです =if(所持金<300,if(所持金<200,if(所持金<100,"買えません",int(所持金,100)&"個")),int(所持金,200)*2&"個"),int(所持金/300)*3%"個") 簡便化するため300円で100,200円残った場合については記述していません。 問題なのは、400円とか600円とか、300円以上の金額を持っていた時で、残金に対して300,200,100円で買えるかどうかの判断をしなければなりません。 簡単なのは、所持金-int(所持金/300)*300の金額に対して、100円、200円の処理を行うということでしょう。
- nag0720
- ベストアンサー率58% (1093/1860)
A1に金額が入っていたとして、 B1に、=MOD(A1,300) C1に、=MOD(B1,200) として、 =INT(A1/300)*6+INT(B1/200)*3+INT(C1/100) とすれば最大個数が出ます。 これを1つの式にすれば、 =INT(A1/300)*6+INT(MOD(A1,300)/200)*3+INT(MOD(MOD(A1,300),200)/100) となります。