Categories: VBA基礎

EXCEL VBA Int Round RoundUp RoundDown (整数・小数点の切り捨てや偶数丸め・四捨五入)

EXCEL VBA Int Round RoundUp RoundDown (整数・小数点の切り捨てや偶数丸め・四捨五入)

 

●はじめに

VBAプログラムで作成した計算結果が割り切れない場合の数値や小数点以下などの端数が発生した場合、切り捨てや四捨五入など取り決めたルールで計算しなければなりません。その時に使用する関数が、Int関数(整数)・Round関数(偶数丸め)・RoundUp関数(切り上げ)・RoundDown関数(切り捨て)です。計算結果を代入する場合は、変数の型によってInteger型(整数のみ)・Single型・Double型(小数が扱える)など、変数の型によって注意して扱う必要があります。それでは、順番に説明いたします。

 

関数名書式機能
IntInt(式)(式)の値に対して小数点を切り捨てる
RoundRound(式,桁数)指定する桁数に応じて(式)の数値を偶数丸め(銀行丸め)
RoundApplication.WorksheetFunction.Round(式,桁数)指定する桁数に応じて(式)の数値を四捨五入する。
RoundUpApplication.WorksheetFunction.RoundUp(式,桁数)指定する桁数に応じて(式)の数値を切り上げる。
RoundDownApplication.WorksheetFunction.RoundDown(式,桁数)指定する桁数に応じて(式)の数値を切り捨てる。

 

 

 

EXCEL VBA Int関数(整数)

 

 

●書式の説明 ※式の部分は、数値でも計算式でも大丈夫です。
Int(式)  例:Int(1.5) は、1になります。(小数点以下の切り捨て)

 

 

●プログラム説明
次のサンプルプルグラムは、通常の割り算の結果を表示した場合とInt関数を使った場合の結果の違いを比較したサンプルプログラムです。

 

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

 

●実行結果
入力値に対して割り算を行った結果が、そのまま各変数の値で表示した結果と計算結果に対してInt関数を付け加えて各変数の値で表示した比較結果を求めます。

 

 

●入力値 ※プログラム実行後、①数値を入力しますここでは、「12345」を入力します。次に割る値を入力しますここでは、「234」を入力します。 (クリックして拡大)

 

●実行後 ※結果の1段目は、上記の入力した値を通常に割り算した値です。
※結果の2段目は、割り算の結果に対してInt関数で整数に切り捨てた場合の値です。
(クリックして拡大)

 

 

EXCEL VBA Round関数(偶数丸め・銀行丸め)WorksheetFunction.Round関数(四捨五入)

 

 

●書式の説明
式の部分は、数値でも計算式でも大丈夫です。
※桁数は、小数点以下のどの桁数を偶数丸めするか指定します。(桁数1の場合、小数点第2位を判断して小数点第1に反映します。)


・ 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になります。

 

●プログラム説明(Round:サンプルプログラム①)

下記のプログラムは、上記の説明で使用した偶数丸めと四捨五入を比較するサンプルプログラムです。A列の数値を元に、B列には、Round関数を使った偶数丸めを転記し、C列には、ワークシート関数を使ったRound(四捨五入)を転記するサンプルプログラムです。なお、小数点第一位を整数にまとめる形式で設定しております。

【プログラム実行条件】
・A列に数値(2行目~28行目)を入力します。(小数点第一位を登録)

 

 

'
'
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
'

 

 

 
●実行前~実行後 ※ プログラム実行後、A列の数値を元にB列に【偶数丸め】が表示されて、C列に「四捨五入」が表示されました。
(クリックして拡大)

 

 

●プログラム説明(Round:サンプルプログラム②) 偶数丸め
下記のプログラムは、X:=7777とY:=333の割り算を行い、小数点第5位⇒0位までのRound関数を使用した場合の一覧表を作成します。A列には、小数点第何位の数値。B列には、A列で指定したRound関数(小数点位置)偶数丸めの結果をセルに代入しています。

 

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

 

●実行前~実行後 ※A列に小数点位置が表示されます。 B列にA列で指定したRound関数の小数点位置での「偶数丸め」の結果が表示されました。
(クリックして拡大)

 

●プログラム説明(Round:サンプルプログラム③) 消費税計算(偶数丸め)

下記のサンプルプログラムは、実行前の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

 

 ●実行前~実行後 ※B列の税抜価格を元にRound関数(偶数丸め)を使って消費税を計算し、合計金額を求めました。
(
クリックして拡大)

 

 

EXCEL VBA WorksheetFunction.RoundUp関数(切り上げ:ワークシート関数)

 

●書式の説明
式の部分は、数値でも計算式でも大丈夫です。
※桁数は、小数点以下のどの桁数を切上げるか指定します。(桁数1の場合、小数点第2位を判断して小数点第1に反映します。)
Application.WorksheetFunction.RoundUp(式,桁数)  例:Application.WorksheetFunction.RoundUp(123.45,1) は、123.5になります。

 

 

●プログラム説明(RoundUp:サンプルプログラム①)
下記のプログラムは、指定した数値に割り算を行いRoundUpを使った場合とRoundUpを使わない場合の結果をセルに表示させます。

 

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

 

●実行前 ※(クリックして拡大)

 

●実行後 ※A列には、計算結果をRoundUP無しでセルに代入・B列には、計算結果をRoundUP有り(小数点第2位)でセルに代入した。 (クリックして拡大)

 

●プログラム説明(RoundUp:サンプルプログラム②)
下記のプログラムは、X:=77777とY:=333の割り算を行い、小数点第5位⇒0位までのRoundUp関数を使用した場合の一覧表を作成します。A列には、小数点第何位の数値。B列には、A列で指定したRoundUp関数(小数点位置)の結果をセルに代入しています。

 

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

 

●実行前 ※A列には、小数点位置。B列にはRoundUp関数の結果が表示されます。 (クリックして拡大)

 

●実行後 ※A列に小数点位置が表示されます。 B列にA列で指定したRoundUp関数の小数点位置での「切り上げ」結果が表示されました。(クリックして拡大)

 

 

●プログラム説明(RoundUp:サンプルプログラム③) 消費税計算:ワークシート関数RoundUp

下記のサンプルプログラムは、実行前の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

 

●実行前~実行後 ※B列の税抜価格を元にRoundUp関数(切上げ)を使って消費税を計算し、合計金額を求めました。
(クリックして拡大)

 

 

 

EXCEL VBA WorksheetFunction.RoundDown関数(切り下げ:ワークシート関数)

 

 

●書式の説明
式の部分は、数値でも計算式でも大丈夫です。
※桁数は、小数点以下のどの桁数を四捨五入するか指定します。(桁数1の場合、小数点第2位を判断して小数点第1に反映します。)
Application.WorksheetFunction.RoundDown(式,桁数)  例:Application.WorksheetFunction.RoundDown(123.45,1) は、123.4になります。

 

●プログラム説明(RoundDown:サンプルプログラム①)
下記のプログラムは、指定した数値に割り算を行いRoundDownを使った場合とRoundDownを使わない場合の結果をセルに表示させます。

 

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

 

●実行前 ※(クリックして拡大)

 

●実行後 ※A列には、計算結果をRoundDown無しでセルに代入・B列には、計算結果をRoundDown有り(小数点第2位)でセルに代入した。 (クリックして拡大)

 

 

●プログラム説明(RoundDown:サンプルプログラム②)
下記のプログラムは、X:=777777とY:=333の割り算を行い、小数点第5位⇒0位までのRoundDown関数を使用した場合の一覧表を作成します。A列には、小数点第何位の数値。B列には、A列で指定したRoundDown関数(小数点位置)の結果をセルに代入します。

 

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

 

●実行前 (クリックして拡大)

 

●実行後 ※A列に小数点位置が表示されます。 B列にA列で指定したRoundDown関数の小数点位置での「切り上げ」結果が表示されました。(クリックして拡大)

 

 

●プログラム説明(RoundDown:サンプルプログラム③) 消費税計算:ワークシート関数RoundDown

下記のサンプルプログラムは、実行前の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

 

●実行前 ※B列の税抜価格を元にRoundDown関数(切り下げ)を使って消費税を計算し、合計金額を求めました。
(クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
以上で、Int(整数)・Round(偶数丸め)・RoundUp(切り上げ)・RoundDown(切り下げ)の説明でした。サンプルプログラム等を参照して、作成する方法を覚えて下さい。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
AKIRA