こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで数値を四捨五入する方法を知っていますか? Excelで四捨五入と聞くとRound関数を思いつく方もいるかもしれませんが、VBAのRound関数では切り捨て・切り上げが上手く計算されません。
そこで今回は、VBAで四捨五入する方法といった基礎的なことから、
- Format関数の使い方
- ワークシート関数Roundメソッドの使い方
- 切り上げ・切り捨てが決まっている場合におすすめの方法
といった応用的な方法まで、徹底的に解説します!
Round関数を使った四捨五入時の注意点
VBAではRound関数を使うと「銀行丸め」形式で小数点以下を四捨五入することができます。
Round関数の書き方は以下の通りです。
Round(元の数値,小数点位置)
ただ、「銀行丸め」形式は特殊な四捨五入で、端数が0.5ちょうどだった場合偶数になる方へ値を丸めるという性質があります。そのため、一般的な四捨五入で使うことができません。
言葉だけでは伝わりづらいので、サンプルコードを用意しました。
サンプルコード:
Sub Test() Dim intB1 As Integer Dim intB2 As Integer Dim intB3 As Integer Dim intB4 As Integer intB1 = Round(0.5, 0) intB2 = Round(1.5, 0) intB3 = Round(2.5, 0) intB4 = Round(3.5, 0) MsgBox "Round(0.5, 0):" & intB1 & vbCrLf & _ "Round(1.5, 0):" & intB2 & vbCrLf & _ "Round(2.5, 0):" & intB3 & vbCrLf & _ "Round(3.5, 0):" & intB4 & vbCrLf End Sub
実行結果:
このように偶数に近い値になってしまうため、一般的な四捨五入になっていないですよね。Excelの数式でRound関数を使っていた人が間違えやすいケースなのですが、VBAで一般的な四捨五入をする場合は2パターン別の方法があります。
Format関数を使う方法
まずは、Format関数を使う方法です。Format関数で四捨五入する場合は、次のように書きます。
Format(元の数値,フォーマット)
Round関数を書き換えると、次のようになります。
サンプルコード:
Sub Test() Dim intB1 As Integer Dim intB2 As Integer Dim intB3 As Integer Dim intB4 As Integer intB1 = Format(0.5, "0") intB2 = Format(1.5, "0") intB3 = Format(2.5, "0") intB4 = Format(3.5, "0") MsgBox "Format(0.5, " & """0""" & "):" & intB1 & vbCrLf & _ "Format(1.5, " & """0""" & "):" & intB2 & vbCrLf & _ "Format(2.5, " & """0""" & "):" & intB3 & vbCrLf & _ "Format(3.5, " & """0""" & "):" & intB4 & vbCrLf End Sub
実行結果:
四捨五入できましたね。”0″となっているフォーマットは、”0.0″、”0.00″のようにすることで、小数第二位、小数第三位と四捨五入する位置を変更することができます。
Format関数については以下記事でも詳しく解説しているので、気になる方は見てみてくださいね!
ワークシート関数Roundメソッドの使い方
次は、ワークシート関数のRoundメソッドを使う方法です。
ワークシート関数のRoundメソッドで四捨五入する場合は、次のように書きます。
WorksheetFunction.Round(数値, 桁数)
Round関数を書き換えると、次のようになります。
サンプルコード:
Sub Test3() Dim intB1 As Integer Dim intB2 As Integer Dim intB3 As Integer Dim intB4 As Integer intB1 = WorksheetFunction.Round(0.5, 0) intB2 = WorksheetFunction.Round(1.5, 0) intB3 = WorksheetFunction.Round(2.5, 0) intB4 = WorksheetFunction.Round(3.5, 0) MsgBox "WorksheetFunction.Round(0.5, 0):" & intB1 & vbCrLf & _ "WorksheetFunction.Round(1.5, 0):" & intB2 & vbCrLf & _ "WorksheetFunction.Round(2.5, 0):" & intB3 & vbCrLf & _ "WorksheetFunction.Round(3.5, 0):" & intB4 & vbCrLf End Sub
実行結果:
WorksheetFunctionを先頭につけるだけなので、Round関数をもともと使っていた方におすすめです!
補足:切り上げ・切り捨てが事前に決まっている場合
最後に補足ですが、切り捨て・切り上げを指定する方法もあります。ワークシート関数の「RoundDownメソッド」「RoundUpメソッド」を使う方法なのですが、以下で詳しく解説しています。
気になる方は、こちらも見てみてくださいね!
まとめ
今回は、VBAで四捨五入するためのFormat関数、ワークシート関数のRoundメソッドの使い方について解説しましたExcelは数値を扱うのがメインなので、四捨五入する場合、切り捨て・切り上げする場合などケースに応じた方法を覚えておくのがおすすめです!
今回紹介した方法はどちらも簡単に使うことができるので、ぜひ使ってみてくださいね!