派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

MROUND関数があった・・・。

こんにちは。
派犬事務員のコロ子です。

f:id:SNegishi:20190921223837p:plain

四捨五入以外で丸めたい

四捨五入でなく、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。
マイナス対応してないだけだけど、せっかく自作なんだから、自分の感覚で分かりやすい方がいいじゃん!!