MROUND関数があった・・・。
こんにちは。
派犬事務員のコロ子です。
四捨五入以外で丸めたい
四捨五入でなく、0、5、10、15のように5単位で数字を丸めたいと思い、VBAで関数を作成した。5に限らず、好きな単位で丸めをできるように作成した。
そしたらMROUND関数ってのがあった。
ショック!!
そんな関数あったなんて知らなかったー!
みんな知ってた?
えっ!?常識?
せっかく作成したからコード書いておこう・・・。
【考え方】
①例えば、5つづに丸めたい場合
5の半分の2.5未満が切り捨て、2.5以上が繰り上げになる。
1→0
2.4→0
2.5→5
3→5
7.4→5
7.5→10
8→10
のようになる。
②丸めたい数字を5で割った余りが2.5未満なら、5で割った商に5を掛ける。
【21の場合】
21÷5=4 余り1
なので
4×5=20
③丸めたい数字を5で割った余りが2.5以上なら5で割った商に5を掛けて、5を足す。
【23の場合】
23÷5=4 余り3
なので
4×5+5=25
④コード
Function RoundOther(val As Currency, num As Currency) As Currency If val - Int(val / num) * num < num / 2 Then RoundOther = Int(val / num) * num Else RoundOther = Int(val / num) * num + num End If End Function
ちなみに、
余りを求める「Mod」関数は整数のみでしか使えないので、少数でも対応するために
val Mod num
↓
val - Int(val / num) * num
とした。
また、商を求める演算子「¥」も整数のみなので
val ¥ num
↓
Int(val / num)
とした。
丸められる数値がマイナスのときは?
MROUND関数は丸められる数値がマイナスの数値の場合は、丸める単位もマイナスにしないといけない。
数学的にはそれが正しいのだろうけど、素人の感覚的には記号を無視して絶対値で入力したい。
なので、コロ子の関数では丸められる数値がプラスでもマイナスでも、丸める単位を絶対値で入力してOK。
マイナス対応してないだけだけど、せっかく自作なんだから、自分の感覚で分かりやすい方がいいじゃん!!