スライドショー

【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関数については以下記事でも詳しく解説しているので、気になる方は見てみてくださいね!

【VBA】Formatで日付・時刻、数値、文字列の表示設定(和暦、曜日)
更新日 : 2019年4月21日

ワークシート関数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メソッド」を使う方法なのですが、以下で詳しく解説しています。

気になる方は、こちらも見てみてくださいね!

【ExcelVBA入門】数値の切り上げ・切り捨てをする関数の使い方とは
更新日 : 2019年4月11日

まとめ

今回は、VBAで四捨五入するためのFormat関数、ワークシート関数のRoundメソッドの使い方について解説しましたExcelは数値を扱うのがメインなので、四捨五入する場合、切り捨て・切り上げする場合などケースに応じた方法を覚えておくのがおすすめです!

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。