Excel VBAで四捨五入する際の要注意!!
- ゆった
- 10月2日
- 読了時間: 3分

はじめに
こんにちは、ティーマネジメントのゆったです。
熱中症対策に意識して水分補給をしているのですが、スポーツ飲料は糖分が気になるし…
ということで、最近は塩分補給と水分補給を兼ねて昆布茶を飲んでいます!
たまに鰹も混ぜたりして、もはやただのお出汁ですが、美味しいので最近のお気に入りです。
日中と夜間の気温差に加え気圧の高低が激しく、体調を崩しやすい時期ですので自分に合った健康管理法で気を付けていきたいですね🌺
実際の開発の中でVBAの四捨五入の仕様による勘違いがありましたので、ご紹介したいと思います!
VBAのRound関数はただの四捨五入ではない!?
Excelで四捨五入といえば、ROUND関数です!
=ROUND( 数値 , 桁数 )
Excelのシート上で少数0.4~0.6を小数点以下第一位で四捨五入したい場合、
0.4 → =ROUND( 0.4 , 0 ) → 0
0.5 → =ROUND( 0.5 , 0 ) → 1
0.6 → =ROUND( 0.6 , 0 ) → 1
と、セルにROUND関数を入力すれば、一般的に想定される四捨五入の結果を返してくれます。
ですが、同様のことをVBAで行うと…
0.4 → =Round( 0.4 , 0 ) → 0
0.5 → =Round( 0.5 , 0 ) → 0
0.6 → =Round( 0.6 , 0 ) → 1
と、0.5 の 四捨五入が「0」になってしまいます。
実は、VBAのROUND関数はただの四捨五入ではなく"銀行家の丸め"という端数処理を行っています。
"銀行家の丸め"とは、端数がちょうど0.5なら結果が偶数となる方へ丸めるという処理方法です。
具体的に説明すると、
「□.5」の□に入る数字が「0,2,4,6,8」の場合は切り捨てて、
「□.5」の□に入る数字が「1,3,5,7,9」の場合は切り上げることになります。
つまり、VBAのRound関数を使用する場合は、
こういった特殊な端数処理になることを理解して使用する必要があります。
VBAで一般的な四捨五入を行う方法
ではどうやってVBA上で一般的な四捨五入を行うかというと、 とてもシンプルですが、シートで使用するROUND関数を使えば良いのです!
=WorksheetFunction.Round( 数値 , 桁数 )
少数0.4~0.6を小数点以下第一位で四捨五入したい場合、は
0.4 → =WorksheetFunction.Round( 0.4 , 0 ) → 0
0.5 → =WorksheetFunction.Round( 0.5 , 0 ) → 1
0.6 → =WorksheetFunction.Round( 0.6 , 0 ) → 1
とRound関数の頭に「WorksheetFunction.」と追記するだけでワークシートの関数で計算されます!
多くの場合はこちらの、Round関数を使用すると思いますので、 VBAの四捨五入は「WorksheetFunction.Round」を基本として覚えるのがおすすめです。
さいごに
Excelは今回のようにワークシート関数とVBA関数で同名でも仕様が異なっていたり、
「1900/2/29」という架空の日が存在するせいで日付の計算が1日ずれていたり※、
色々なところに予期せぬ落とし穴があります。
※詳細はMicrosoftより提供されている下記サイトをご確認ください
Excel では、1900 年が閏年であると誤って想定しています
https://learn.microsoft.com/ja-jp/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year どうしてもうまくいかないExcelのお悩みがありましたら、
ぜひ一度弊社にご相談ください🌻🌻🌻