Accessで四捨五入する

以前、AccessのRound関数が銀行型丸めで私達が通常使っている四捨五入とは違うことを書いたが、実際にAccessで四捨五入を使わなくてはならないことになったのでユーザー定義関数を作って対応した。
0.5を加えて小数点以下を切り捨てることで小数点以下を四捨五入したことと同じ結果になるので、丸め桁数の”s”を指定して、10の”s”乗をかける事で桁を調整し0.5を加えて切り捨て、10の”s”乗で割ることで元の桁数に戻す。また、指定桁数”s”がゼロ以上か未満かで処理を分けて桁数を指定できるようにしてみた。
実際にはこのようにユーザー定義関数を書く

Public Function roundy(x As Currency, s As Integer) As Currency
Dim t As Integer
t = 10 ^ Abs(s)
If s > 0 Then
roundy = Int(x * t + 0.5) / t
Else
roundy = Int(x / t + 0.5) * t
End If
End Function

Accessの中で実際に使うにはこのように書けばよい。
roundy(数値,丸める桁数)
丸める桁数の考え方
 100の位 : -2
 10の位 : -1
 1の位 : 0
 少数第1位 : 1
 少数第2位 : 2
「なんでAccessはこんな変な丸め方する?」と考える人が多いのも確かです。Excelとの違いと考えると、元々の開発を行った会社がAccessとExcelは違うのは確かです。Microsoft社になってから長いのに統一されないのは確かに変な会社である証しです(^^;
※ roundy の “y” は遊介の “y” です(笑)
【追記】
Access2000で変数の形式を示さないと上手く行かないことがあるそうです。
その場合についてはこちらを参考にしてください。
Accessで四捨五入する(追記)