title: VBA Ultimate rounding
body: <p>I've read much about rounding in Excel. I found out that VBA's Round() function uses "Bankers rounding" while Application.WorksheetFunction.Round() uses more or less "normal" rounding. But it didn't help me to understand this:</p>
  
  <pre><code>? Round(6.03499,2)
   6.03 
  </code></pre>
  
  <p>Why? I want to see 6.04, not 6.03! The trick is that</p>
  
  <pre><code>? Round(Round(6.03499,3),2)
   6.04
  </code></pre>
  
  <p>I thought a bit and developed a subroutine like this:</p>
  
  <pre><code>Option Explicit
  Function DoRound(ByVal value As Double, Optional ByVal numdigits As Integer = 0) As Double
     Dim i As Integer
     Dim res As Double
     res = value
     For i = 10 To numdigits Step -1
         res = Application.Round(res, i)
     Next i
     DoRound = res
  End Function
  </code></pre>
  
  <p>It works fine.</p>
  
  <pre><code>? DoRound(6.03499,2)
    6.04
  </code></pre>
  
  <p>But it is not cool. Is there any built-in <em>normal</em> rounding in Excel?</p>