2025年12月24日 スタッフブログ 平川 開発
Excel VBAやAccess VBAで端数処理を行いたい場合、標準で用意されているRound関数では目的を果たせないことが多く、端数処理関数を自作する必要があるというのは有名な話かと思います。
今回は、現在進行中のプロジェクトで小数点以下6桁の値を端数処理する必要がありまして、この桁数に対応可能な端数処理関数を改めて作成しましたのでご紹介したいと思います。
Excelのセル関数「ROUND」「ROUNDUP」「ROUNDDOWN」と同じ結果が得られる関数となります。
Public Function DRound(ByVal Value As Variant, ByVal Digit As Long, Optional ByVal RoundType As Byte = 1) As Variant
Dim var As Variant
Dim factor As Variant
Dim absValue As Variant
Dim markValue As Variant
Dim shifted As Variant
Dim result As Variant
If IsNull(Value) Then
DRound = CDec(0)
Exit Function
End If
var = CDec(Value)
factor = CDec(10) ^ Digit
absValue = Abs(var)
shifted = absValue * factor
If var < 0 Then
markValue = CDec(-1)
Else
markValue = CDec(1)
End If
Select Case RoundType
Case 0
result = Fix(shifted) / factor
Case 1
result = Fix(shifted + CDec(0.5)) / factor
Case 2
If shifted > Fix(shifted) Then
result = (Fix(shifted) + CDec(1)) / factor
Else
result = Fix(shifted) / factor
End If
End Select
DRound = result * markValue
End Function
整数部と小数部合わせて28桁までの値の端数処理が可能です。
AIに問題点をチェックしてもらい修正を重ねた結果、AIから「VBA史上最高の端数処理関数ができました」とのお墨付きをもらいました(笑)。