Ответ на вопрос полностью здесь и скопирован здесь (с разрешения автора:):
Будьте внимательны, функция округления VBA использует округление по Банкеру, где оно округляет .5 до четного числа, например:
Round (12.55, 1) would return 12.6 (rounds up)
Round (12.65, 1) would return 12.6 (rounds down)
Round (12.75, 1) would return 12.8 (rounds up)
Принимая во внимание, что функция листа Excel округляется, всегда округляется .5 вверх.
Я провел несколько тестов, и похоже, что округление до .5 (симметричное округление) также используется для форматирования ячеек, а также для округления ширины столбца (при использовании формата общего числа). Флаг «Точность как отображается», по-видимому, не выполняет никакого округления, он просто использует округленный результат в формате ячейки.
Я попытался реализовать функцию SymArith от Microsoft в VBA для моего округления, но обнаружил, что Fix имеет ошибку, когда вы пытаетесь присвоить ей число, например 58,55; функция, дающая результат 58,5 вместо 58,6. Затем я наконец обнаружил, что вы можете использовать функцию Excel Worksheet Round, например:
Приложение. Раунд (58,55, 1)
Это позволит вам выполнять обычное округление в VBA, хотя это может быть не так быстро, как некоторые пользовательские функции. Я понимаю, что это полный круг вопроса, но хотел бы включить его для полноты.