ExcelVBA技 全般 E13M016

E13M016 (Excel2000~2013)
JISの規定による数値の丸め方


JIS Z 8401に規定された数値の丸めを行う関数を示します。
数値を丸めて指定した桁数にするkRoundJ関数と、数値を丸めて指定した有効桁数にするkRound2J関数です。

規定では、「ある数値を有効桁数n桁の数値に丸める場合、または小数点以下n桁の数値に丸める場合には(n+1)桁目以下の数値をつぎのように整理する」となっており、基本的には四捨五入の方法であり異なるのは次の場合です。
(n+1)桁目以下の数値が5であるか、または(n+1)桁目以下の数値が切り捨てたものか切り上げたが分からない場合で、n桁目の数値が偶数(0,2,4,6,8)ならば切り捨てるというものです。(規則A)

'kRoundJ 関数
'数値を丸めて指定した桁数にします
'書式 kRoundJ(数値, 桁数)
'数値 丸めの対象となる数値を指定します
'桁数 数値を丸めた結果の桁数を指定します
'例 =kRoundJ(0.0625,3) → 0.062   =kRoundJ(125.1,-1) → 130
'  =kRoundJ(0.095,2)  → 0.10      =kRoundJ(125,-1)   → 120
Function kRoundJ(ex As Double, num As Long) As Double
  If num >= 0 Then
    kRoundJ = Round(ex, num)
  Else
    kRoundJ = Round(ex * 10 ^ num, 0) * 10 ^ (num * -1)
  End If
End Function

'kRound2J 関数
'数値を丸めて指定した有効桁数にします
'書式 kRound2J(数値, 有効数字の桁数)
'数値      丸めの対象となる数値を指定します
'有効数字の桁数 数値を丸めた結果の有効数字の桁数を指定します
'例 =kRound2J(0.1045,3) → 0.104  =kRound2J(2235,3) → 2240
Function kRound2J(ex As Double, num As Long) As Double
  kRound2J = kRoundJ(ex, -Int(Application.Log(Abs(ex))) - 1 + num)
End Function