- 締切済み
IF関数を短くする方法(階層が深すぎる)
A列に任意の数値が入っています。 そのときB列に、 「A1<999」なら「A1×5.0」して四捨五入 「1000<A1<2000」なら「A1×4.0」して四捨五入 「2000<A1<3000」なら「A1×3.0」して四捨五入 「3000<A1<4000」なら「A1×2.0」して四捨五入 「4000<A1<5000」なら「A1×1.5」して四捨五入 「5000<A1<6000」なら「A1×1.0」して四捨五入 とした計算式を入れたいとおもってます。 IF関数にするとものすごく長くなってしまいます。 短くしたり、他に適応する関数はあるでしょうか? よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
何処か空いている範囲に 0 5 1000 4 2000 3 3000 2 4000 1.5 5000 1 6000 0.5 のデータを入力して、当該範囲に(例えば) table という名前を付けておけば =ROUND(A1*VLOOKUP(A1,table,2),0) でよろしいかと。 ただし、6000以上の場合は 0.5 としておきました。また、小数点以下を四捨五入としておきました。
C列 D列 1 0 5 2 1001 4 3 5001 3 4 10001 2 5 50001 1.5 こんな対応表を作って B1 =ROUND(LOOKUP(A1,$C$1:$C$5,$D$1:$D$5)*A1,0)
0~999=5 1000~1999=4 2000~2999=3 3000~3999=2 4000~4999=1.5 5000~5999=1.0 ならば =CHOOSE(A1/1000+1,5,4,3,2,1.5,1) この値を A1に×ということなので =A1*CHOOSE(A1/1000+1,5,4,3,2,1.5,1) さらに、四捨五入するということなので =ROUND(A1*CHOOSE(A1/1000+1,5,4,3,2,1.5,1),0)
- kaisendon
- ベストアンサー率44% (114/257)
こんにちは 6000以上の入力があった場合でも A1×1.0 でいいのでしょうか? 四捨五入は何処の位まで求めるのでしょうか? =ROUND(CHOOSE(MIN(INT(A1/1000)+1,6),A1*5,A1*4,A1*3,A1*2,A1*1.5,A1),0) こんな感じで、後はご自身で調整できますでしょうか?
補足
ありがとうございます。 データを確認したところ、 ~1000 1001~5000 5001~10000 100001~50000 … と刻んでいきます。 掛け算の値は例として出したので実際は規則性の無い数字になります。参考にさせていただきます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Vlookup 等が使えますが・・・。 >「A1<999」なら「A1×5.0」して四捨五入 >「1000<A1<2000」なら「A1×4.0」して四捨五入 1000とか2000はどう扱われるのでしょうか? 通常は<= や <= などで繋がないと除外されてしまいますが?
補足
ありがとうございます。 データを確認したところ、 ~1000 1001~5000 5001~10000 100001~50000 … と刻んでいきます。 IF関数だと7階層ぐらいまでしかできないので、 どうしようか?と思っていたところです。 参考にさせていただきます。