Round関数で四捨五入できない?!:Excel エクセルの使い方-マクロ/VBA
「エクセルで四捨五入するには?」
というのは、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」あたりを入力してどのような結果となるかを確認することをおすすめします。
1位:生年月日から年齢を計算−DATEDIF関数
2位:Excel ショートカットキー一覧
3位:ドロップダウンリストの作り方−直接入力
4位:切り捨てしたい・切り上げしたい−ROUNDDOWN関数・ROUNDUP関数
5位:原稿用紙テンプレートのダウンロード
6位:エラー表示しないように−ISERROR関数
7位:請求書の無料テンプレート
8位:入力規則のリスト用データを別シートにまとめる
9位:コメントの印刷
10位:無料の家計簿テンプレートをダウンロード

