【ExcelVBA入門】四捨五入をするためにおすすめな2つの方法とは

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、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は数値を扱うのがメインなので、四捨五入する場合、切り捨て・切り上げする場合などケースに応じた方法を覚えておくのがおすすめです!

今回紹介した方法はどちらも簡単に使うことができるので、ぜひ使ってみてくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次