rawpixel / Pixabay
VBAプログラムで作成した計算結果が割り切れない場合の数値や小数点以下などの端数が発生した場合、切り捨てや四捨五入など取り決めたルールで計算しなければなりません。その時に使用する関数が、Int関数(整数)・Round関数(偶数丸め)・RoundUp関数(切り上げ)・RoundDown関数(切り捨て)です。計算結果を代入する場合は、変数の型によってInteger型(整数のみ)・Single型・Double型(小数が扱える)など、変数の型によって注意して扱う必要があります。それでは、順番に説明いたします。
| 関数名 | 書式 | 機能 |
|---|---|---|
| Int | Int(式) | (式)の値に対して小数点を切り捨てる |
| Round | Round(式,桁数) | 指定する桁数に応じて(式)の数値を偶数丸め(銀行丸め) |
| Round | Application.WorksheetFunction.Round(式,桁数) | 指定する桁数に応じて(式)の数値を四捨五入する。 |
| RoundUp | Application.WorksheetFunction.RoundUp(式,桁数) | 指定する桁数に応じて(式)の数値を切り上げる。 |
| RoundDown | Application.WorksheetFunction.RoundDown(式,桁数) | 指定する桁数に応じて(式)の数値を切り捨てる。 |
Sub IntSample()
Dim Ans_int As Integer '整数を設定
Dim Ans_Single As Single '単精度浮動小数点数型
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim Inp_A, Inp_B As Integer
Inp_A = InputBox("数値を入力して下さい")
Inp_B = InputBox("割る値を入力して下さい")
'通常割り算の結果---------------------------------------------
Ans_int = Inp_A / Inp_B
MsgBox "Intの場合" & Ans_int & "です" 'Intでの計算結果
Ans_Single = Inp_A / Inp_B
MsgBox "Singleの場合" & Ans_Single & "です" 'Singleでの計算結果
Ans_Double = Inp_A / Inp_B
MsgBox "Doubleの場合" & Ans_Double & "です" 'Doubleでの計算結果
'割り算の計算式にIntを使った場合-------------------------------
Ans_int = Int(Inp_A / Inp_B)
MsgBox "Intの場合" & Ans_int & "です" 'Intでの計算結果
Ans_Single = Int(Inp_A / Inp_B)
MsgBox "Singleの場合" & Ans_Single & "です" 'Singleでの計算結果
Ans_Double = Int(Inp_A / Inp_B)
MsgBox "Doubleの場合" & Ans_Double & "です" 'Doubleでの計算結果
End Sub
・ Round(式,桁数) ・・・(偶数丸め又は銀行丸め)
・ WorksheetFunction.Round(式,桁数) ・・・(四捨五入)
※下表に【偶数丸め】と【四捨五入】の違いを表しています。A列の数値に対してB列に【偶数丸め】、C列に【四捨五入】で計算しております。
※B列の偶数丸めを求める計算式は、B列 = Round(数値, 0) ‘(偶数丸め)
※C列の四捨五入を求める計算式は、C列 = Application.WorksheetFunction.Round(数値, 0) ‘四捨五入で計算しております。
・【偶数丸め】とは、端数が5より小さい場合は切捨て、5より大きい場合は、切り上げるということろまでは、四捨五入と同じですが、異なっているのは、5の場合の取り扱いが違います。偶数丸めの場合は、偶数に近い方に丸められます。
例1:下表の数値0.5を偶数丸めすると、0の偶数に近いので0になります。
例2:下表の数値1.5を偶数丸めすると、2の偶数に近いので2になります。
例3:下表の数値2.5を偶数丸めすると、2の偶数に近いので2になります。
下記のプログラムは、上記の説明で使用した偶数丸めと四捨五入を比較するサンプルプログラムです。A列の数値を元に、B列には、Round関数を使った偶数丸めを転記し、C列には、ワークシート関数を使ったRound(四捨五入)を転記するサンプルプログラムです。なお、小数点第一位を整数にまとめる形式で設定しております。
'
'
Sub RoundSample02a() '偶数丸めと四捨五入
Dim Num, Ans_Double As Double '倍精度浮動小数点数型
Dim L As Integer
For L = 2 To 28 '2行目~28行名まで繰り返します。
Num = Cells(L, "A")
Ans_Double = Round(Num, 0) '(偶数丸め)
Cells(L, "B") = Ans_Double '計算結果をB列に代入
Ans_Double = Application.WorksheetFunction.Round(Num, 0) '(四捨五入)
Cells(L, "C") = Ans_Double '計算結果をC列に代入
Next L
End Sub
'
Sub RoundSample02()
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim X, Y, I As Integer
X = 7777
Y = 333
I = 5 '小数点位置(小数点5位をセット)
For L = 2 To 7
Ans_Double = Round(X / Y, I) ’偶数丸めで計算
Cells(L, "A") = I '小数点第何位をA列に代入
Cells(L, "B") = Ans_Double '計算結果をB列に代入
I = I - 1 '(小数点位置を切り上げる)
Next L
End Sub
下記のサンプルプログラムは、実行前のB列の税抜き価格を元に商品ごとのに、消費税額(8%)をRound関数(偶数丸め)で計算するサンプルプログラムです。消費税10%だと割り切れ易いので、8%で計算しております。
Sub RoundSample03()
Dim JTax, GTax, Gokei As Double
Dim I As Integer
JTax = 0.08 '消費税(8%)
For I = 2 To 7 '2行から7行まで
GTax = Cells(I, "B") * JTax '消費税計算
Cells(I, "C") = Round(GTax, 0) '消費税の計算をRound関数(銀行丸め)で計算
Cells(I, "D") = Cells(I, "B") + Cells(I, "C") '税抜き+消費税=合計
Next I
Range("B8") = "=SUM(B2:B7)" '税抜きの合計表示
Range("B8").AutoFill Destination:=Range("B8:D8") 'AutoFillを使いB8のSUM関数をC列・D列に複写します。
End Sub
Sub RoundUpSample01()
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim X, Y, I As Integer
X = 123456
Y = 234
I = 2 '小数点位置
Ans_Double = X / Y 'RoundUp無しで計算
Cells(2, "A") = Ans_Double
Ans_Double = Application.WorksheetFunction.RoundUp(X / Y, I) 'RoundUpで計算(小数第2位)
Cells(2, "B") = Ans_Double
End Sub
Sub RoundUpSample02()
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim X, Y, I As Integer
X = 77777
Y = 333
I = 5 '小数点位置(小数点5位をセット)
For L = 2 To 7
Ans_Double = Application.WorksheetFunction.RoundUp(X / Y, I)
Cells(L, "A") = I '小数点第何位をA列に代入
Cells(L, "B") = Ans_Double '計算結果をB列に代入
I = I - 1 '(小数点位置を切り上げる)
Next L
End Sub
下記のサンプルプログラムは、実行前のB列の税抜き価格を元に商品ごとのに、消費税額(8%)をRoundUp関数(切上げ)で計算するサンプルプログラムです。消費税10%だと割り切れ易いので、8%で計算しております。
Sub RoundUpSample03()
Dim JTax, GTax, Gokei As Double
Dim I As Integer
JTax = 0.08 '消費税
For I = 2 To 7 '2行から7行まで
GTax = Cells(I, "B") * JTax '消費税計算
Cells(I, "C") = Application.WorksheetFunction.RoundUp(GTax, 0) '消費税の計算をRoundUp関数(切り上げ)で計算
Cells(I, "D") = Cells(I, "B") + Cells(I, "C") '税抜き+消費税=合計
Next I
Range("B8") = "=SUM(B2:B7)" '税抜きの合計表示
Range("B8").AutoFill Destination:=Range("B8:D8") 'AutoFillを使いB8のSUM関数をC列・D列に複写します。
End Sub
Sub RounddownSample01()
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim X, Y, I As Integer
X = 1234567
Y = 234
I = 2 '小数点位置
Ans_Double = X / Y 'RoundUp無しで計算
Cells(2, "A") = Ans_Double
Ans_Double = Application.WorksheetFunction.RoundDown(X / Y, I) 'RoundDown有りで計算(小数第2位)
Cells(2, "B") = Ans_Double
End Sub
Sub RounddownSample02()
Dim Ans_Double As Double '倍精度浮動小数点数型
Dim X, Y, I As Integer
X = 777777
Y = 333
I = 5 '小数点位置(小数点5位をセット)
For L = 2 To 7
Ans_Double = Application.WorksheetFunction.RoundDown(X / Y, I)
Cells(L, "A") = I '小数点第何位をA列に代入
Cells(L, "B") = Ans_Double '計算結果をB列に代入
I = I - 1 '(小数点位置を切り上げる)
Next L
End Sub
下記のサンプルプログラムは、実行前のB列の税抜き価格を元に商品ごとのに、消費税額(8%)をRoundDown関数(切上げ)で計算するサンプルプログラムです。消費税10%だと割り切れ易いので、8%で計算しております。
Sub RounddownSample03()
Dim JTax, GTax, Gokei As Double
Dim I As Integer
JTax = 0.08 '消費税
For I = 2 To 7 '2行から7行まで
GTax = Cells(I, "B") * JTax '消費税計算
Cells(I, "C") = Application.WorksheetFunction.RoundDown(GTax, 0) '消費税の計算をRoundDown関数(切り下げ)で計算
Cells(I, "D") = Cells(I, "B") + Cells(I, "C") '税抜き+消費税=合計
Next I
Range("B8") = "=SUM(B2:B7)" '税抜きの合計表示
Range("B8").AutoFill Destination:=Range("B8:D8") 'AutoFillを使いB8のSUM関数をC列・D列に複写します。
End Sub