• ベストアンサー

関数の違い

=IF(G22=0,ROUNDDOWN(B22*5%,0),IF(G22=1,ROUNDUP(B22*5%,0),ROUND(B22*5%,0))) =CHOOSE(G21+1,INT(B21*0.05),CEILING(B21*0.05,1),ROUND(B21*0.05,0)) 上記の関数は、0,1,2の条件をそれぞれ同じにしたら同じ結果になります。 細かな違いはなんなのでしょうか? よろしくご教授くださいませ。

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

  • ベストアンサー
  • Randomize
  • ベストアンサー率70% (38/54)
回答No.2

中に書かれているそれぞれの関数の意味は理解してるかな?1・2・3・・・の順で処理されると思って下の記述を見てみてください。 上側の式は、  1.条件G22が0である場合、値B22に0.05をかけた物(5%は自動解釈されます)を小数点以下切捨てで表示します  2.そうではなく、条件G22が1である場合、値B22に0.05をかけた物を小数点以下切上げで表示します  3.そうではなく、条件G22に0,1以外の物が記入されている場合(文字でもなんでもOK)、値B22に0.05をかけた物を四捨五入で表示します 下側の式は、  1.条件G21が0である場合、値B21に0.05をかけた値を「超えない最大の整数」を表示します  2.条件G21が1である場合、値B21に0.05をかけた値を「超える最小の1の倍数」を表示します  3.条件G21が「2である場合」、値B21に0.05をかけた物を四捨五入で表示します  「4.条件G21がそれ以外のものである場合(文字でも何でも)、#Value!エラーになります」 主な違いの場所に「」をつけました。  まずはINT関数です。これはガウス記号の演算と同じでとある数字を超えない最大の整数を求める関数です。正の数の場合は、小数点を切り落としするのですが、負の数の場合は、「-3.4を超えない最大の整数は-4」であるように小数点を切り上げてしまいます。  次に、CEILING関数です。これは、○個詰めパッケージの箱に△個の製品を詰め込むと、パッケージは何個必要になる過を求める関数です。例えば、6個詰めの箱で桃15個を運ぼうとすると、必要な箱は3箱ですよね。このように、目的の数を超える最小の単位数(n箱など)を求めるわけです。ところがこの関数、○個の部分と△個の部分の数字のプラスマイナスが食い違うと#NUM!エラーになってしまいます。  最後に、IF文とCHOOSE文の違いです。IF文はYesかNoかで枝分かれしていくので、最終的にどれにも該当しなかった場合と言う条件を書き込む部分が必ず存在します。この場合ですと、ROUND(B22*5%,0)の部分です。条件として望まない値を入力した、そもそも数字ではないなども考慮する場合はIF文を用いるのが好ましいです。また、条件には数字以外にも「切上げ」「切捨て」「四捨五入」などの文字を使うのもOKです。  一方、CHOOSE文は条件に使えるのは1~29のみです。条件に30以上の数字や0以下の数字や文字を入力をすると、すべて#Value!エラーになります。規定外の条件入力を考えなければ、CHOOSE分の方が記述はさっぱりしてわかりやすいでしょう。  以上、参考になればです。

noname#241383
質問者

お礼

詳しい解説ありがとうございます とてもお勉強になりました。

その他の回答 (1)

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

B21、B22にが負の値(仮に-1)の場合、大きく変わりますのでお試しください。 因みにG列が2の場合は、同一関数の為、違いはない。

noname#241383
質問者

お礼

簡単だけど、とてもためになりました。 ありがとうございました。

関連するQ&A