Excel VBAのRound関数とセル関数での異なる結果の原因と解決法

Visual Basic

Excel VBAでの計算結果が期待通りにならない場合、関数の挙動に違いがあることが原因となることがあります。特に、VBAのRound関数とExcelのセル関数で異なる結果が得られるケースについて詳しく解説します。

問題の概要

質問者の方は、セルA1に「6500」という数字を入れ、VBAで以下のようなコードを使って結果をセルA2に出力しています。

Cells(2, 1) = Round(Cells(1, 1) / 1000, 0)

このコードで「6」という結果が出てしまう一方で、セル関数を使った場合は「7」という結果になり、異なる結果に困惑しているとのことです。

VBAのRound関数とExcelのセル関数の挙動の違い

VBAのRound関数は、Excelのセル関数と異なる丸めの方式を採用しています。具体的には、VBAのRound関数は「銀行家の丸め」と呼ばれる丸め方を使用しており、最も近い偶数に丸める動作をします。

例えば、VBAのRound関数で「6500 / 1000 = 6.5」となった場合、6.5は最も近い偶数である「6」に丸められます。一方、Excelのセル関数は通常の四捨五入を行い、6.5は「7」に丸められます。

VBAでの期待通りの結果を得る方法

VBAでも四捨五入を行いたい場合は、以下の方法で解決できます。

Cells(2, 1) = Application.WorksheetFunction.Round(Cells(1, 1) / 1000, 0)

このコードでは、Excelのセル関数であるRoundをVBA内から呼び出しています。これにより、通常の四捨五入が適用され、セル関数と同じ結果が得られます。

まとめ

Excel VBAのRound関数は、Excelのセル関数と異なる丸めの挙動をするため、意図した結果が得られないことがあります。この問題は、VBA内でもExcelのセル関数を呼び出すことで解決できます。VBAとExcelの関数の違いを理解し、適切に使い分けることで、計算結果を期待通りに調整できます。

コメント

タイトルとURLをコピーしました