■75980 / inTopicNo.3) |
Re[1]: エクセルで小数点以下を切り上げするVBA |
□投稿者/ 魔界の仮面弁士 (341回)-(2015/05/21(Thu) 09:39:35)
|
■No75978 (vba初心者 さん) に返信 > マクロ初心者です。
これらの Excel の計算は、二進数の浮動小数点数で行われます。 そのため十進数に直した場合、近似値として誤差を生じる可能性があることを考慮しておいてください。 http://pc.nikkeibp.co.jp/pc21/special/gosa/
> Range("B1").Select > ActiveCell.FormulaR1C1 = "=IF(C[-1]=0,0,(IF(C[-1]<1,1,C[-1])))" こういうときには、 Range("B1")FormulaR1C1 = "=IF(C[-1]=0,0,(IF(C[-1]<1,1,C[-1])))" と書いた方がスマートですよ。
ただ、右辺のワークシート関数が ・A列が 0 なら「0」とする ・A列が 1 未満なら「1」とする ・それ以外は、A列の値をそのまま出力 という扱いになっていますが、A 列が負数だった場合の動作は、 本当にそれで正しいのでしょうか?
元の値が -0.6 なら「1」となり 元の値が -0.3 なら「1」となり 元の値が 0.0 なら「0」となり 元の値が +0.3 なら「1」となり 元の値が +0.6 なら「1」となり 元の値が +0.9 なら「1」となり 元の値が +1.2 なら「1.2」となる…?
> これを整数以外だったら、要は小数点を含んでいたら全て、切り上げの整数にする というものにしたいです。 整数への切り上げを目的とするなら、数式としては 【案1】 "=ROUNDUP(RC[-1],0)" 【案2】 "=CEILING.MATH(RC[-1],1,0)" 【案3】 "=CEILING.MATH(RC[-1],1,1)" 【案4】 "=CEILING(RC[-1],1)" を使えば OK です。
今回は案1で良いでしょう。 ROUNDUP は、桁数指定での切り上げ処理を意味します。
案2〜案4については、桁数を指定した切り上げ処理ではなく、 「第二引数の倍数」単位への切り上げ処理を行う関数です。
そして案2と案3は、負数を切り上げる場合の丸め方向が異なります。 -1.5 → -1 とするのか案2、 -1.5 → -2 とするのか案3です。
ただし、CEILING.MATH は Excel 2013 からの機能です。 案4であれば、それ以前のバージョンでも動作しますが、 こちらは丸め方向を選択できず、案2と同じ結果を返します。
|
|