AccessのRoundは特定条件で四捨五入にならないので注意(ExcelのRoundとは違う)
ExcelのRound
まず最初に、ExcelはRoundに第二引数が必要です。(この時点でAccessのRoundと違ってる)
んでもって結果は下記。
=ROUND(0.4,0)
の結果は 0 (画像割愛)
=ROUND(1.4,0)
の結果は 1 (画像割愛)
四捨五入。
AccessのRound
下記の結果は…
Debug.Print "0.5をRoundすると " & Round(0.5)
Debug.Print "1.5をRoundすると " & Round(1.5)
0.5を通した場合、四捨五入で 1 になるかと思いきや 0 になっています。
AccessでのRoundの厄介なところは、 端数が0.5の時だけ 偶数に近くなるように丸められるということです…。
下記の結果はどうかというと…
Debug.Print "0.6をRoundすると " & Round(0.6)
Debug.Print "1.6をRoundすると " & Round(1.6)
テストデータの値が閾値になっていないとバグがテストをすり抜ける可能性があります。
AccessでRoundを使わずに小数点第一位を四捨五入
0.5を足して小数点を切り捨てるInt()を通す。
Int(四捨五入対象 + 0.5)
下記の結果は…
Dim test_ As Double
test_ = 0.4
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
test_ = 0.5
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
test_ = 0.6
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
test_ = 1.4
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
test_ = 1.5
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
test_ = 1.6
Debug.Print test_ & "の時は" & Int(test_ + 0.5)
Accessで小数点〇桁を四捨五入したい時の注意点
小数点〇桁もRoundを使わずに四捨五入しようとしたらつまずきました。
『 * 』で一旦桁を上げてInt()四捨五入 ⇒ 『 / 』で桁下げる
なんて感じで任意の桁の小数点四捨五入ができると思っていました。
Dim test_ As Double
test_ = 1.15
'【1】
'1.15の小数点第二位を四捨五入したい
'(結果は1.2にならない)
Debug.Print Int(test_ * 10 + 0.5) / 10
'【2】
'1.15の小数点第二位を四捨五入したい'
'桁を上げる段階でCDbl()を通す
'(結果は1.2になる)
Debug.Print Int(CDbl(test_ * 10) + 0.5) / 10
'【3】
'1.15の小数点第二位を四捨五入したい'
'1ステップずつ結果を変数に格納
'(結果は1.2になる)
test_ = test_ * 10
test_ = test_ + 0.5
Debug.Print Int(test_) / 10
コンパイルする時に何か最適化していて、その影響で結果が違うのかなあ…(´・ω・`)
ひとまず対象の値を一旦文字列にキャストして、 ドット を元に整数部と小数部を分けて……
みたいな愚直な自作関数を作って対応しました…(´・ω・`)
参考サイトさん
バージョン
Windows10 Pro バージョン20H2 OSビルド19042.685
Access for Microsoft 365 MSO(16.0.13426.20270)32ビット
Excel for Microsoft 365 MSO(16.0.13426.20270)32ビット
Author And Source
この問題について(AccessのRoundは特定条件で四捨五入にならないので注意(ExcelのRoundとは違う)), 我々は、より多くの情報をここで見つけました https://qiita.com/waokitsune/items/2a03568aecaf0cf1511c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .