スタッフブログ

VBAの端数処理関数自作

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史上最高の端数処理関数ができました」とのお墨付きをもらいました(笑)。