Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » Round関数で四捨五入できない?!

Round関数で四捨五入できない?!

対象:Excel2002, Excel2003, Excel2007

「エクセルで四捨五入するには?」
というのは、Excel初心者の方からいただく、基本的なご質問の代表的なもののひとつです。(Excelのワークシート上で四捨五入をする関数はROUND関数です。)

四捨五入については、VBA(Visual Basic for Applications)を利用してらっしゃるレベルの方からご質問をいただくこともあります。
「VBAで四捨五入をするにはどうしたらいいのでしょうか?」
といったご質問です。

「そんなのRound関数でしょ!」
と思ったVBAユーザーの方、それは本当ですか?
VBAのRound関数の仕様をちゃんと確認しましたか?

VBAの
「Round(2.5,0)」
の結果を「3」だと思ってらっしゃいませんか?

ワークシート関数の
「ROUND(2.5,0)」
なら「2.5」の小数点以下第1位を四捨五入して
「3」ですが、
VBAの
「Round(2.5,0)」
は「3」ではなく「2」なのです。

[スポンサードリンク]

VBAのRound関数は、4以下の場合は切り捨て、5以上の場合は切り上げという、いわゆる四捨五入をする関数ではありません。あくまでも数値を丸める関数です。

VBAのRound関数は四捨五入ではなく、「通貨型丸め処理」「銀行型丸め処理」などと呼ばれ、「0.5」のときは丸めた結果が偶数になるように丸められます。(AccessのRound関数と同じ仕様です。)

もし、このことをご存知ないまま、VBAのRound関数を使ったマクロを作っていた場合、そのマクロをもう一度しっかり確認してみたほうがいいと思いますが。。

で、ExcelのVBAで四捨五入するには以下のような方法が考えられます。
▼操作概要:VBAで正の数の小数点以下第1位を四捨五入をする
・ワークシート関数のROUND関数を利用する
・0.5を加算してInt関数で整数部分を取得する

ExcelのVBAなら、簡単にワークシート関数を利用することができますから、ワークシート関数のROUND関数を利用するというのが一つの考え方です。

具体的には、
「WorksheetFunction.Round(元の数値, 0)」
といった記述で元の数値の小数点以下第1位が四捨五入されます。

もう一つはVBAの中でロジックを完結させる方法です。

正の数の小数点以下第1位を四捨五入して自然数にするには、0.5を加算して整数部分を取得すればOKです。

具体的には、
「Int(元の数値 + 0.5)」
といった記述をします。

▼サンプルファイル(003535.xls 32KByte)ダウンロード

サンプルファイルには以下のようなマクロが作成してあります。

▼数値の丸め処理を比較するマクロ
Sub Test_Round_Compare()

On Error GoTo ERR_HANDLER

 Dim dblOrg As Double

 dblOrg = InputBox("数値を入力してください。")
 
 MsgBox "Round関数:" & Round(dblOrg, 0) & vbCrLf _
   & "ROUND関数:" & WorksheetFunction.Round(dblOrg, 0) & vbCrLf _
   & "0.5加算&Int関数:" & Int(dblOrg + 0.5)

ERR_HANDLER:
End Sub

Test_Round_Compareマクロを実行すると、数値の入力を求めるダイアログボックスが表示され、VBAのRound関数、ワークシート関数のROUND、0.5を加算してInt関数で整数部分を取得した場合の結果が、メッセージボックスに表示されます。

特に、VBAのRound関数をいわゆる四捨五入と思い込んでいた方は、「2.5」とか「4.5」あたりを入力してどのような結果となるかを確認することをおすすめします。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » Round関数で四捨五入できない?!

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.
.