It looks like you are trying to implement a variation of banker's rounding. Microsoft's explanation of different rounding algorithms implemented in various products: https://support.microsoft.com/en-us/kb/196652
Note that the VBA round function uses banker's rounding. If I have correctly interpreted your goal, the easiest approach may be a simple VBA UDF. Something like:
function roundbank(dblnumber as double, intdigit as long) as double
'any error checking you would like
roundbank=round(dblnumber,intdigit)
end function
Bookmarks