Как в vba округлить число до 2 знаков после запятой
Перейти к содержимому

# Как в vba округлить число до 2 знаков после запятой

## VBA Round, RoundUp, and RoundDown Functions

The VBA Round Function rounds numbers to a specified number of digits.

### Syntax of the VBA Round Function

The syntax of the VBA Round Function is:

Round(Expression, [Decimal_places]) where:

• Expression – The number to round.
• Decimal_places (Optional) – An integer that specifies the number of decimal places to round. The value must be greater than or equal to 0 (>=0). If blank, the default of 0 is used, which means the function rounds to the nearest integer.

So, let’s look at an example so that you can see how the VBA Round function works, rounding to 1 decimal place:

### VBA Round a Variable

In the above example, we entered the to-be-rounded number directly into the function, usually however, you’d round a variable instead. The following is an example using a variable instead:

Note: We use the Double variable type in order to store decimal values.

#### VBA Rounding Results

Actual Number Number of Decimal Places Result
7.25 0 7
7.25 1 7.2
7.25 2 7.25
-7.25 1 -7.2
-7.25 2 -7.25

### VBA Round Cell Value

You can also round a cell value directly in VBA:

### VBA RoundUp Function

Let’s say you want to round a number up, using VBA. There is no built-in VBA RoundUp equivalent function, instead what you can do is call the Excel RoundUp Worksheet function from your VBA code:

Excel’s worksheet functions are available to use in VBA, through the use of the WorksheetFunction object. The only worksheet functions that you can’t call, are those that already have a built-in VBA equivalent.

A reminder of the syntax of the Excel Worksheet RoundUp Function:

ROUNDUP(Number, Digits) where:

• Number – The number that you would like rounded up.
• Digits – The number of digits that you would like to round the number.

So, let’s look at an example, so that you can see how to access the RoundUp Worksheet function in your VBA code:

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

#### RoundUp to the Nearest Whole Number

You can round up to the nearest whole number by specifying 0 as the number of decimal places:

The result delivered:

#### RoundUp Function Results

Actual Number Digits Result
7.075711 0 8
7.075711 1 7.1
7.075711 2 7.08
7.075711 3 7.076
7.075711 -1 10
7.075711 -2 100
7.075711 -3 1000

### VBA RoundDown Function

Let’s say you want to round a number down, using VBA. There is no built-in VBA RoundDown equivalent function either, instead again, what you would do is call the Excel RoundDown Worksheet function from your VBA code.

A reminder of the syntax of the Excel Worksheet RoundDown Function:

ROUNDDOWN(Number, Digits) where:

• Number – The number that you would like rounded down.
• Digits – The number of digits that you would like to round the number.

So, let’s look at an example, so that you can see how to access the RoundDown Worksheet function in your VBA code:

#### RoundDown to the Nearest Whole Number

You can round down to the nearest whole number by specifying 0 as the number of decimal places:

#### RoundDown Function Results

Actual Number Digits Result
5.225193 0 5
5.225193 1 5.2
5.225193 2 5.22
5.225193 3 5.225
5.225193 -1 0
5.225193 -2 0
5.225193 -3 0

### Other VBA Rounding Functions

#### VBA Ceiling – RoundUp to A Specified Significance

VBA does not have a Ceiling.Math function equivalent, so if you want to round a number up to the nearest integer or to the nearest specified multiple of significance, then you can call Excel’s Ceiling.Math worksheet function from your VBA code.

A reminder of the syntax of the Excel Worksheet Ceiling.Math Function:

CEILING.MATH(Number, [Significance], [Mode]) where:

• Number – The number that you would like to round up.
• Significance (Optional) – The multiple to which you want your number to be rounded to.
• Mode (Optional) – Controls whether negative numbers are rounded towards or away from zero.

So, let’s look at an example, so that you can see how to access the Ceiling.Math Worksheet function in your VBA code:

#### VBA RoundUp To Specified Significance Results

Actual Number Significance Mode Result
4.1221 5
4.1221 3 6
4.1221 50 50
-4.1221 3 -3
-4.1221 3 -1 -6

#### VBA Floor – RoundDown to A Specified Significance

VBA does not have a Floor.Math function equivalent either. However, once again, if you want to round a number down to the nearest integer or to the nearest specified multiple of significance, then you can call Excel’s Floor.Math worksheet function from VBA.

A reminder of the syntax of the Excel Worksheet Floor.Math Function:

FLOOR.MATH(Number, [Significance], [Mode]) where:
• Number – The number that you would like to round down.
• Significance (Optional) – The multiple to which you want your number to be rounded to.
• Mode (Optional) – Controls whether negative numbers are rounded towards or away from zero.

So, let’s look at an example, so that you can see how to access the Floor.Math Worksheet function in your VBA code:

#### VBA RoundDown to Specified Significance Results

Actual Number Significance Mode Result
4.55555559 4
4.55555559 3 3
4.55555559 50 0
-4.55555559 3 -6
-4.55555559 3 -1 -3

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

## Excel vba округление

​Смотрите также​: =ОКРУГЛТ(_число_;0,5)​Guest​ быстрее. чем WorksheetFunction.Round(X,​ математическим правилам, а​ 2,30Хм. как интересно!​1,26449 ->1.26​ 2 2 2​ по нему :-)​ & .Address &​ есть не надо​

​Вообще эта проверка​Казанский​Но будьте осторожны​ справке.​ макросы, которые выполняют​ но используя доступную​

#### Синтаксис функции ОКРУГЛ

​Функция ОКРУГЛ в Excel​
​Denis Ch​

​: Function My_Round(ByVal X​ N):​ по банковским.​ Я и не​и никак иначе!​ 1,5 2 2​ Соответственно, это обстоятельство​ «>0,ROUND(» & .Address​

​ коробок?​​ не нужна. Если​: Принцип такой​

​ — данное действие​​Нажмите сочетание клавиш​ операции округления чисел.​ в VBA функцию​​ округляет значения до​​: Уважаемый ZVI, подскажите​

​Public Function ZVI_Round(X​

• ​В частности:​
• ​ знал, что ROUND​И в руссифицированном​ 2 1,75 2​
• ​ — основной фактор​ & «,0),»»»»)»)​Будем иметь вместо​
• ​ число целое, то​application.roundup(64.24,-1)​ уже НЕОБРАТИМО, поэтому​

​ CTRL+C​​ Как вы можете​​ Round(). Чтобы посмотреть​ указанного количества разрядов,​ пожалуйста, а как​ ByVal N As​

#### Полезная информация

• ​ As Double, Optional​Round(1.5)=2, ничего необычного;​ у нас такая​ Excel функция ОКРУГЛ(1,265;2)​
• ​ 2 2 2​ различия при малых​
• ​.Replace 0, «часть​ неотправки «часть места»​ оно и округлится​
• ​А дальше зависит​ испытывать советую на​
• ​На листе выделите​ видеть, результат, возвращаемый​
• ​ соответствующий код макроса​ т.е. знаков до​ реализовать функцию аналогичную​ Integer = 0)​

#### Примеры использования функции ОКРУГЛ в Excel

1. ​ N As Integer​Но Round(2.5)=2, а​ шибко умная! )​ даст вам значение​ 2 2 2​
2. ​ временах (от 0-2​ места», xlWhole​Похоже без цикла​ до себя самого.​ от того, как​ КОПИИ книги.​ ячейку A1 и​ макросом, может полностью​ для пользовательской функции​
3. ​ или после запятой.​ ОКРУГЛВВЕРХ с помощью​ As Double​ = 0) As​ не 3, как​ Полез в Сеть​ 1,27.​ 2,25 3 3​ сек при использовании​End With​ никак.​

### Округление до целого числа функциями ОКРУГЛ и FormatNumber в VBA

​ задать столбец, есть​ik​ нажмите сочетание клавиш​ отличаться от ожидаемого.​ нажмите комбинацию горячих​ Например, при помощи​ VBA​Dim B As​ Double​ обычно ожидается.​ за разъяснениями:​

#### Разный результат округления в Excel и VBA

​А в американском​ 3 2,5 3​

​ ScreenUpdating=False)​End Sub​dl​ хочется:​

​ ли в нем​: можно так:​ CTRL+V.​Как уже выше упоминалось,​ клавиш ALT+F11:​ нее можно округлить​MCH​ Double​Dim b#​Упрощенно, для одного​1. Гипотеза, почему​ VBA, «Round» -​ 3 3 2,75​2) Поскольку ZVI​dl​: Sub Test1()​If Not Int(MyCartonsCell.Value)​ формулы или только​=сумм(округл(A1:A10;2))​Чтобы переключиться между​ один алгоритм не​В Module1 прописан код​ числа в ячейке​: как вариант:​

​ десятичного знака правило​

#### Функция ОКРУГЛ и Round VBA округляют по-разному?

​ так странно ведёт​ 1,26.​ 3 3 3​ использовал масщтабирование с​: увы недосмотрел, всё​Dim Rng As​ = MyCartonsCell.Value Then​ константы, есть ли​прим.​ просмотром результатов и​ является лучше или​ пользовательской макро-функции.​ А2 с двух​Function MyRoundUp(V As​ 0 Then​If N <​ банковского округления такое:​ себя Round:​

​Это разные стандарты,​ 3 3 3​ помощью цикла, произошло​ таки пусто опрятней​ Range​Еще рекомендую почитать​ нечисловые значения.​1. А1:А10 -​ просмотром формул, возвращающих​ хуже другого. Каждый​﻿​ символов после запятой​ Double, Optional DecPlaces​MyRound = Sgn(X)​ 0 Then​ половинки (0.5), прибавленные​http://www.vbcity.com/forums/topic.asp?tid=4557​ как расстояние в​ 4​ то, о чем​ формулы:​Dim Rng0 As​ на этом форуме​Round(Number [,NumDigitAfterDecimal])​ диапазон для примера,​

#### Банковское округление чисел в Excel и VBA

​ эти результаты, нажмите​ хорош в зависимости​В функции ОКРУГЛ, доступной​ до одного:​ As Integer =​ * Int(Abs(X) +​b = 10​ к нечетным числам​(см. 4-й пост​ милях, высота в​Narimanych​ я говорил ранее:​Sub Test2()​ Range​ про округление в​Функция появилась в Visual​ укажите свой.​ сочетание клавиш CTRL+`​ от применения. Стандартный​

​ в Excelе, использовался​Функция ОКРУГЛ в Excel​ 0) As Double​ 0.5)​ ^ -b​ округляются до целых​ от epl, первый​ футах, а объём​:​ мультиплицировался «оверхед» от​Dim Rng As​With ThisWorkbook.Worksheets(«Лист1»)​ VBA.​ Basic 6.0​2. формула массива​ (апостроф) или в​ алгоритм дает результаты,​ стандартный алгоритм, в​ всегда округляет в​If Round(V, DecPlaces)​Else​ZVI_Round = Round(X​ с избытком, а​ абзац)​

#### Несоответствия функций округления в Excel и VBA

​ — в галлонах. ​Казанский​ способа выбора диапазона.​ Range​Set Rng =​Вот одна ссылка:​Функция​Hugo​ меню Сервис укажите​ которые мы «ожидаем»,​ котором «половинки» (пятерки​ противоположную сторону от​ = V Then​B = 10​ / b +​ к четным -​2. Подтверждение этой​Применительно к VBA​, просто монстр программирования,​ Если этот фактор​Dim Rng0 As​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​Остальные в поиске.​Round​: Файл — округляю.​

​ на пункт Зависимости​ в отличие от​ в конце разряда​ нуля (по модулю).​MyRoundUp = V​ ^ -N​ Sgn(X) * 2.222E-16,​ с недостатком.​

#### Подытожим особенности округления чисел в Excel

​ гипотезы — в​ лучше написать свою​ спасибо​ уравнять, то уравняется​ Range​ 1).End(xlUp))​Natali​служит для округления​

​Максим​ формул и выберите​ банковского алгоритма, который,​ десятичной дроби) округлены​ Следующий пример демонстрирует​Else​MyRound = Sgn(X)​ 0) * b​Смысл — в​ статье от Майкрософта:​ функцию округления​Казанский​

​ и время (хотя​With ThisWorkbook.Worksheets(«Лист1»)​End With​: Спасибо за советы,​ чисел до заданной​: Помогите, пожалуйста, использую​ режим Режим проверки​ помимо прочего, немного​ ВСЕГДА в большую​ эту особенность:​MyRoundUp = -Int(-V​ * B *​Else​ уменьшении систематической ошибки​http://support.microsoft.com/default.aspx?scid=kb;en-us;196652​

### округление VBA

​——​​,​
​ в моем коде​Set Rng =​
​With Rng​ Лузер, Владимир.​ точности (число значащих​
​ макрос для создания​ формул.​
​ удивляет результатами.​ сторону. То есть​ОКРУГЛ(число; число_разрядов)​
​ * 10 ^​
​ Int(Abs(X) / B​ZVI_Round = Round(X​ округления при суммировании​
​(см. раздел ‘The​пост старый, но​может для x​ придется смещать и​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​.Replace 0, «=»»пусто»»»,​Буду менять.​ цифр в дробной​ динамическиой диаграммы, все​1​
​Жаль, что эти два​

​ 2,5 округляется до​​ROUND(number, num_digits)​
​ DecPlaces) / 10​ + 0.5)​ + Sgn(X) *​ большого количества чисел.​

​ Round() Function is​​ пусть не вводит​

​ Спасибо.​​ уменьшать rng)​

​ арботает но он​​2​ алгоритма были реализованы​
​ 3; 10,345 до​

​В качестве аргументов функции​ ^ DecPlaces​End If​
​ 2.222E-16, b)​ Это удобно банкам,​

​ Inconsistently Implemented’, где​​ в заблуждение тех,​

​3) В итоге,​End With​

​Set Rng0 =​: Вполне приличный код,​Функция​ округляет числа. Как​3​

​ одновременно, кроме того,​

​ 10,35 и т.​ ОКРУГЛ могут выступать​
​End If​End Function​End If​ но знают ли​
​ написано, что в​ кто его читает​: Есть столбец А,​
​ мои результаты были​

​ .SpecialCells(xlCellTypeFormulas, 2)​ nataLi, если учесть​

​Round​ сделать чтобы не​4​

​ довольно хаотичным образом.​

​ д. Это именно​ числа, текстовые представления​End Function​k61​If Abs(ZVI_Round) =​ об этом их​ VB6/VBA применяется т.н.​

​ в котором есть​ обусловлены: а) отсутствием​.Replace 0, «»,​.Replace «=»»пусто»»», 0,​

​(Number,2) эквивалентна функции​ округлял. Вот код:​
​5​ Возможно было бы​ то правило, которое​ чисел, ссылки на​

​ZVI​: фото средств измерения​

​ 0 Then ZVI_Round​ клиенты?​
​ ‘банковское округление’, цель​Мой вариант функции​ самые разные цены.​ нечисловых значений и​
​ xlWhole​ xlWhole​Массив небольшой, за​Format(Number,»#.##»)​Private Sub Worksheet_Change(ByVal​A B​ более естественным, если​ мы выучили в​ ячейки с числовыми​: ‘ZVI:2012-02-09 VBA ROUNDUP​ упомянутых, и не​

​ = 0​
​’ Проверка VBA-​
​ которого — как​
​ округления:​
​ Эти цены нужно​
​ б) сравнительно низкой​
​Set Rng0 =​
​.Value = Application.Round(.Value,​ скоростью гнаться не​Возвращаемое значение​ Target As Range)​
​Формула Описание (результат)​ бы функция VBA​ школе, и тот​ данными, а также​
​ function​ упомянутых, выше.​End Function​ округления​
​ написано двумя разделами​’Функция правильного математического​ округлить в большую​ долей времени на​ .SpecialCells(xlCellTypeBlanks)​ 0)​

​ нужно, поэтому Ваш​​В результате действия функции​Const DropDownList =​

​=ОКРУГЛТ(10; 3) Округляет​​ Round() возвращала тот​ результат, который ожидало​
​ формулы и функции.​Function ZVI_RoundUp(V As​Слева направо: [Железый]​Прилагаю таблицу сравнительного​Sub Нюансы_округления()​ выше — минимизировать​ округления ‘1.260 ->​

​ сторону так чтобы,​​ выбор диапазона​.Value = Application.Round(.Value,​.Replace 0, «часть​ вариант округления годится.​ возвращается округленное число,​

​ «\$O\$3″​​ число 10 до​

​ же результат, что​ бы получить большинство​ Оба аргумента обязательные.​ Double, Optional DecPlaces​ Феликс (серийный номер​

​ тестирования скорости выполнения​​MsgBox «Round(1.5) , xlWhole​ Можно немного переделать:​ тип которого совпадает​Const DataRange =​
​ ближайшего числа, кратного​ и экселевская функция​ из нас.​Число​ As Integer =​ — Г89573), логарифмическая​ 3-х вариантов.​ Round(1.5) & vbCr​ при сложении нескольких​ -> 1.27 ;​ 9 (столбец В).​: Маленький офтоп. Если​.Replace 0, «часть​End With​Sub Test1()​ с типом переданного​ «\$A\$26:\$M\$32″​ 3 (9)​ ОКРУГЛ (в конце​

​В случае использования доступных​​(number) – значение,​ 0) As Double​

​ линейка, счёты (mini).​​—​ _​
​ округляемых чисел).​ 1.268 -> 1.27​ Можна ли это​

​ кому интерсно -​​ места», xlWhole​Rng0.Replace «часть места»,​Dim Rng As​ аргумента​

​Const ChartRange =​=ОКРУГЛТ(-10; -3) Округляет​ концов, в английской​ в VBA функций,​ которое требуется округлить.​Dim x#​Всё поддерживается в​
​ZVI​

​& «Round(2.5) B24:M24″​
​ число -10 до​ версии Excelя, она​ (кроме Round ()​Число_разрядов​x = Fix(V​

​ исправном состоянии на​​ZVI​
​ Round(2.5), _​

​ результаты.​
​ Double, iR As​ написать макрос.​ post_61633.xls на разных​
​Rng0.Replace «часть места»,​

​End Sub​​ As Long​

​Number​​Dim NewData As​ ближайшего числа, кратного​ называется также -​ это также CByte​(num_digits) — количество​ * 10 ^​ случай энергетического каллапса.​

​: —​vbExclamation, «Crazy VBA​

​Кстати, ROUND -​ Integer) As Double​
​Пример задания: есть​ операционках и версиях​
​ 0, xlWhole​ZVI​

​Set Rng =​Обязательный аргумент может представлять​
​ Variant​ 3 (-9)​
​ ROUND).​ (), CInt (),​
​ разрядов, до которого​ DecPlaces)​
​ Прикрепленные файлы post_200817.jpg​Прошу исправить, должно​
​ round»​ не единственная функция​
​ Dim Rounded As​ 5,02 нужно получить​
​ Excel. (Комп один​End Sub​

​: А чем цикл​ Лист1.UsedRange.Columns(1)​
​ любое допустимое числовое​
​Dim OldData As​=ОКРУГЛТ(1,3; 0,2) Округляет​alexcel​
​ CLng () и​ необходимо округлить аргумент​
​If x <>​
​ (88.6 КБ)​

​ быть:​End Sub​
​ с ‘банковским округлением’​ Double, HTochn As​ 5,09; 6,18 -​
​ и тот же.)​ZVI​
​ не мил? Может​If Rng.Cells.Count =​
​ выражение​ Variant​
​ число 1,3 до​: Есть кусочек кода:​ CCur () )​число​
​ V * 10​
​ZVI​
​Function ZVI_Round(x, Optional​
​Интересно, что многие​
​ в VB6 и​
​ Double, TTochn As​

​ 6,19; 74,54 -​​Верунчик​: 1) Если речь​ быть, тем, что​ 1 Then Exit​NumDigitAfterDecimal​Dim AnimationArray As​ ближайшего числа, кратного​If UserForm2.CheckBox1.Value =​
​ используется алгоритм, называемый​
​(number).​ ^ DecPlaces Then​: Слишком просто было​
​ N = 0)​
​ публикации ошибаются относительно​

​ VBA! Вот остальные:​​ Double Dim HTochnCroped​ 74, 59; 11,19​: Я делю одну​ о кодах до​ в раз 6-7​ Sub​Необязательный аргумент, представляющий собой​

​ Variant​​ 0,2 (1,4)​ True Then​

​ банковским или методом​
​Аргумент​
​ x = x​
​ бы :-)​ As Double​
​ математического метода округления​

​ CByte, CInt, CLng,​
​ As Long, TTochnCroped​
​ — 11,19; 150,0​
​ ячейку на другую.​

​ поправки «часть места»,​
​ быстрее не цикла?​
​Arr() = Rng.Value​
​ целое положительное число,​Dim OldPoint As​
​=ОКРУГЛТ(5; -2) Возвращает​

​Cells(i, 9).Value =​
​ Гаусса. Здесь «половинки»​
​число_разрядов​
​ + 1​

​Подправил в Вашем​​Dim b#​ в VBA, и​ CCur.​ As Long, IDelta​
​ — 150,09 и​ Данное значение присваиваю​

​ указывающее, сколько знаков​ Long​ сообщение об ошибке,​ Cells(i, 9) /​ округляются раз в​(num_digits) может быть:​ZVI_RoundUp = Round(x​

### Round

##### Функция Round

​b = Fix(N)​ даже коммерческие программы​

​Але-Дашкова​​ As Integer HTochn​​ т.д.​ переменной. Как мне​ в XL2007 на​И это еще​ 2 To UBound(Arr)​
​ следует оставить после​​Dim NewPoint As​​ т. к. число​​ 5​

​ большую сторону, а​

​Положительным – округляется дробная​ / 10 ^​ MyRound, чтобы все​If N <​ порой используют в​

​: Буду очень признательна,​

 ​ = Tochn *​ ​Всем кто поможет​ округлять полученное значение​ примере используемом здесь​ ​ при том, что​ ​Select Case VarType(Arr(r,​ запятой. Если аргумент​ Long​ -2 и 5​Cells(i, 9).Value =​ раз в меньшую​ часть исходного значения​

​ DecPlaces, DecPlaces +​

​ время не получался​ 0 Then​ VBA функцию Round(число,2),​
​ если кто-то подскажет,​
​ 10 ^ iR​

### VBA — округление — просьба глянуть код

​ большое спасибо.​​ переменной все время​ разница незаметна, а​

​ использован медленный FormatNumber​ 1))​ опущен, то дробная​Dim x As​
​ имеют разные знаки​ Int(Cells(i, 9))​ сторону, всегда к​

​ (справа от запятой).​ 1)​ ноль. А теперь​
​b = 10​ принося тем самым​
​ как написать программу,​ TTochn = HTochn​Igor_Tr​ в большую сторону?​
​ в 5000 строк​Guest​

​Case 2 To​ часть отбрасывается​ Integer​ (#ЧИСЛО!)​
​Cells(i, 9).Value =​ ближайшему четному. Поэтому​Равным нулю – значение​End Function​ сравните оуругление до​ ^ -b​ кому-то убытки, а​ округляющую число до​ * 10 HTochnCroped​: А чем не​

​Подскажите пожалуйста. И​

​ вариант без цикла​​: 1) Если речь​ 6​

​Пример​​Dim i As​Marchuk​ Cells(i, 9) *​ 5,5, как и​ округляется до целой​

​ZVI​
​ 3-знака =ZVI_Round(X;3) и​ZVI_Round = Round(x​ кому-то неожиданную прибыль.​
​ двух знаков после​ = Fix(HTochn) TTochnCroped​ подходит простенькая функция​
​ заранее спасибо!​ на 20%-30% быстрее.​ о кодах до​
​Arr(r, 1) =​Dim A,retval A=123.456789​ Integer​
​: вот я не​ 5​
​ в случае использования​ части.​: Для полного диапазона​
​ =My_Round(X;3)​
​ / b +​Более точно определение​
​ запятой. Программа должна​ = HTochnCroped *​
​RoundUp​Верунчик​
​2) Если речь​
​ поправки «часть места»,​
​ CDbl(FormatNumber(Arr(r, 1), 0))​

​ retval=Round(A) ‘возвращается 123​​Dim p As​ внимательный :(​
​End If​ экселевской функции, будет​Отрицательным – округляется целая​
​ отрицательных DecPlaces, правильнее​. X. ZVI_Round. My_Round​ x * 1E-16,​
​ банковского округления можно​ использовать функцию Int.​ 10 IDelta =​?​: Округлять до какого​
​ о коде предложенном​ то у меня​
​End Select​ retval=Round(A,3) ‘возвращается 123.457​
​ Double​alexcel​Я так округляю​ округлено до 6.​
​ часть исходного значения​
​ так, с использованием​

​0,0785 .. 0,079​​ 0) * b​ прочесть здесь:​
​Igor_Tr​

​ TTochn — TTochnCroped​​NewStudent07​ какого знака после​ DL, то у​
​ в XL2007 на​Next​Категория​If Target.Address =​: вот я не​

​ числа до ближайшего​
​ Однако VBA поступит​ (слева от запятой).​ ZVI_Round, приведенной выше:​
​ .. 0,078​Else​
​Реализация (на мой​: У Вас уникальная​ If (IDelta >=​
​: А как ее​
​ запятой?​ меня в XL2007​
​ примере используемом здесь​Rng.Value = Arr()​
​Математические функции​ DropDownList Then​
​ внимательный 🙁​ числа кратного 5​
​ иначе, например, с​
​Если в качестве аргумента​
​’ZVI:2012-02-09 VBA ROUNDUP​
​0,5115 .. 0,512​

​ZVI_Round = Round(x​​ взгляд, не очень​ способность поднимать настроение.​

​ 5) Then Rounded​
​ надо преминить, чтобы​Если округлять до​
​ на примере используемом​
​ разница незаметна, а​End Sub​Natali​
​SelectedItem = ActiveSheet.Range(DropDownList).Value​
​Спасибо очень полезная​но строка Cells(i,​
​ числом 2,5 -​

​число_разрядов​​ function​
​ .. 0,511​ + x *​ оптимальная) разных видов​ Тоже, там же,​ = ((HTochnCroped +​ получилось то, что​

​ целого, то чему​​ здесь разница незаметна,​ в 5000 строк​lapink2000​: Добрый день, уважаемые​SelectedItemRow = WorksheetFunction.Match(SelectedItem,​

​ функция я о​
​ 9).Value = Int(Cells(i,​ оно будет округлено​(num_digits) подставить нецелое​
​Function ZVI_RoundUp(V As​0,5035 .. 0,504​
​ 1E-16, b)​ округления, на английском​ и через Enter.​
​ 1) / (10​
​ надо??​ равно 4 /​
​ а в 5000​ вариант без цикла​
​: Еще вариант без​ форумчане.​
​ ActiveSheet.Range(DataRange).Columns(1), 0) +​ ней не знал.​ 9)) не округляет​ до 2, а​
​ число, то при​ Double, Optional DecPlaces​
​ .. 0,503​
​End If​ здесь:​
​ Вот только проблема.​
​ ^ iR)) Else​
​Igor_Tr​
​ 2 ? 2​
​ строк вариант без​

​ на 20%-30% быстрее.​​ цикла:​

​Написала процедуру для​
​ ActiveSheet.Range(DataRange).Row — 1​ Чем больше узнаю​
​ а просто убирает​
​ не до 3!​ расчете Excel отбросит​ As Integer =​
​0,0195 .. 0,020​
​If Abs(ZVI_Round) =​
​—​ Значения типа Integer​
​ Rounded = (HTochnCroped​: Обычная фукция листа​
​ или 3?​
​ цикла на 12%-17%​

​2) Если речь​​Sub Test1()​ автоматического округления кол-ва​
​NewData = ActiveSheet.Cells(SelectedItemRow,​ Excel, тем больше​ дробную часть.Подскажите что​Является ли банковский алгоритм​ дробную часть.​
​ 0) As Double​ .. 0,019​
​ 0 Then ZVI_Round​ZVI​

​ — ЭТО ЦЕЛОЕ​​ / (10 ^​
​ Excel. Справки -​Казанский​
​ медленнее.​ о коде предложенном​
​Dim Rng As​
​ коробок (во вложении​ 2).Resize(1, 12).Value​ удивляюсь его возможностям.​
​ вписать в код,​
​ плохим? Само применение​
​В Excel есть и​Dim x#​
​0,0135 .. 0,014​ = 0​
​Sh_Alex​ ЧИСЛО. И зачем​
​ iR)) End If​ полный глобус. В​
​:​Наверное, зависит от​
​ DL, то у​
​ Range​ файл)​
​OldData = ActiveSheet.Range(«B24:M24»).Value​

​ Та ты шо. ​​ чтоб число округлялось​ банковского алгоритма не​ другие полезные функции​x = Fix(V​ .. 0,013​End Function​
​: В дополнение к​ тогда округлять то,​ RoundMath = Rounded​

​ VBA это будет​​Shersh​ теста, может, и​ меня в XL2007​With ThisWorkbook.Worksheets(«Лист1»)​Задача была следующая:​AnimationArray = NewData​alexcel​ по матиматическим правилам(1,5=2​ является чем-то необычным,​ для округления. Вот​
​ * 10 ^​0,0115 .. 0,012​Откорректированый вариант таблицы​ изложенному ZVI.​ что и так​ End Function​ выглядеть так:​, 4/2=2​ от версии Excel.​ на примере используемом​

​Set Rng =​​ округляем данные по​For i =​

​: Немогу понять где​​ а не 1​ а тем более​ некоторые из них:​
​ DecPlaces)​ .. 0,011​ прилагается​Приведенный способ банковского​
​ круглое?​
​d_Boba​

​Где 2 -​​округлять до целого​Приложил тестовый вариант​ здесь разница незаметна,​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​ следующим правилам:​

​ 1 To 15​​ собака зарыта .​ и т.д.)​

​ плохим. Так как​​ОКРУГЛТ — округляет до​If x <>​0,8115 .. 0,812​—​ округления, применяется в​Казанский​: по поводу законов​ число после запятой,​ числа. все время​ с исходными данными,​ а в 5000​

​ 1).End(xlUp))​
​Если значение является​p = 100​ Помогите. Во вложении​
​Спасибо.​
​ в зависимости от​ соседнего кратного.​ V * 10​
​ .. 0,811​
​ZVI​ геодезии с незапамятных​
​: x=123.456 x=int(x*100)/100Но это​
​ округления чисел: на​ которое останется.​ в большую сторону.​ на которых сравнивал​
​ строк вариант без​End With​
​ integer — пропускаем,​
​ / 100 /​

​ файл там всё​​Guest​ применения он имеет​

​ОКРУГЛВНИЗ и ОКРУГЛВВЕРХ —​
​ ^ DecPlaces Then​Guest​Гость​
​ времен, по-видимому, с​
​ отбрасывание разрядов, а​ эту тему есть,​NewStudent07​
​Верунчик​
​ время разных вариантов.​
​ цикла на 12%-17%​Rng.Value = Application.Round(Rng.Value,​ все ОК​ 15 * i​
​ подробно описано.​: Application.RoundUp(3.5, 0)​
​ свои существенные преимущества.​
​ округляют в меньшую​

​ x = x​​: Да, скорее My_Round​: Последний вариант ZVI_Round()​ тех, когда и​
​ не округление. Додумайте​
​ как ни странно,​: Главный вопрос в​
​:​ Так как все​
​ медленнее.​
​ 0)​Если значение -​For x =​
​VikNik​
​округляем вверх 3,5​
​ Стандартное округление (всегда​ или большую сторону.​
​ + 1​ — это только​
​ неправильно отрабатывает округление​ банков (в современном​
​ сами, как сделать​ разные мнения. одно​
​ том, как сделать​
​Верунчик​ приведенные нецикловые варианты​
​lapink2000​

​End Sub​​ дробное число, то:​ 1 To WorksheetFunction.Count(NewData)​: Правильно округляет!​ , 0 знаков​ в большую сторону)​ЦЕЛОЕ — округляет до​ZVI_RoundUp = ZVI_Round(x​ алгоритм :(​ числа 0,5.​ понимании) не было.​
​ округление (добавить 0.01,​ — то которое​ так, чтобы число​, делим a на​ выдают ошибку на​: Последний пост -​ytk5kyky​если значение <​OldPoint = OldData(1,​Кроме RoundUp, есть​
​ после зпт, итого​ в случае выполнения​ целого.​
​ / 10 ^​Вопрос из треьего​Предыдущая версия работает​Да, таким образом​ если отбрасываемая часть​ все проходили в​ заканчивалось на 9. ​ b x =​ тексте «часть места»​ мой :-)​: Господа гуру!​ 0.5, заменяем существующее​ x)​ и RoundDown и​ будет 4.​

​ последующих арифметических операций​ОТБР — отбрасывает дробную​ DecPlaces, DecPlaces)​ ряда аудитории:​ корректно!​ уменьшалась систематическая ошибка​ >=0.005)​ школе, ДРУГОЕ написано​Пример задания: есть​ worksheetfunction.RoundUp(a/b,0)​ при повторном запуске,​ytk5kyky​Не увидел в​ значение на слова​NewPoint = NewData(1,​

​ просто Round. Вот​​Marchuk​ с большим числом​

​Почему MS не​​ZVI​ округления при математической​Апострофф​ в справочниках по​ 5,02 нужно получить​Vlad999​ то в тестовых​
​: По умолчанию кажется,​ Ващих кодах выполнение​ «часть места»​ x)​ тебе просто Round​: sorri, up​ округленных таким методом​ЧЁТН и НЕЧЁТН —​MCH​ привела правила округления​: Все верно, вроде​ обработке геодезических измерений.​: Спокойствие, округляем через​ математике (например Корна).​ 5,09; 6,18 -​:​ данных исключил значения,​

​ что без цикла​​ условия: если значение​иначе округляем по​AnimationArray(1, x) =​

​ нужен.​New​ значений, приводит к​ округляют до соседнего​: =ZVI_RoundUp(2,2;2) = 2,21​ к общему знаменателю,​ исправлял. По крайней​ А вычисления, еще​Int​ они действительно отличаются.​ 6,19; 74,54 -​Казанский​ меньше единицы. У​ быстрее должно быть.​ < 0.5, заменяем​ правилам математики.​
​ OldPoint — (OldPoint​Marchuk​: угу​ накоплению ошибки округления.​ целого: четного или​=ZVI_RoundUp(46,02;4) = 46,0201​на рабочем листе​ мере, у меня​ на моей памяти,​Function Round2(d As​ Но в данном​ 74, 59; 11,19​, спасибо!​
​ меня нецикловые варианты​Я вот могу​ существующее значение на​Вроде, все работает,​ — NewPoint) *​: замени RoundUp на​Cells(i, 9) =​

​ Ниже приведен небольшой​​ нечетного.​=ZVI_RoundUp(17,1;5) = 17,10001​ ЦЕЛОЕ() и ОКРУГЛ()​ в архиве корректный​ проводились с помощью​ Double) As Double​ случае нужно еще​

### Округление

​ — 11,19; 150,0​​Казанский​ в 6-7 раз​ забыть в конце​ слова «часть места»​ но в одном​ p​ RoundDown​
​ WorksheetFunction.RoundUp(Cells(i, 9), 0)​ пример:​

​В следующем примере показано​​=ZVI_RoundUp(128,717;3) = 128,718​ — работают по​ вариант 🙂 Вот​
​ «таблиц семизначных логарифмов»​ Round2 = Int(d​ учитывать машинное представление​ — 150,09 и​: вариант x =​

​ медленнее.​​ цикла next или​​ZVI​​ месте (число 5,6)​
​Next x​Cells(i, 9) =​alexcel​

​Здесь то же самое,​​ действие функции ОКРУГЛ​​и т.п.​​ ПРАВИЛЬНО,​ правильный вариант арифметического​ Вега и конторских​

​ * 100 +​​ чисел. если кто​​ т.д.​​ CInt(a / b​

​Опять же замечу,​​ loop поставить.​: Вы в таможне​ отказывается округлять.​​Range(ChartRange).Value = AnimationArray​​ WorksheetFunction.RoundDown(Cells(i, 9), 0)​: О спасибо​

​ что и в​​ с отрицательным, положительным​​MCH​​а VBA.Int и​ округления, заодно привожу​ счетов, альтернативой были​ 0.5) / 100​ хочет порисуйте 0​Igor_Tr​ + 0.5)​ что для конкретной​Ищи потом его. ​ не работали, часом?​Да и вообще,​DoEvents​Любовь​Marchuk​ первом примере. Округлено​ и равным нулю​: Оказывается VBA Round()​ VBA.Round — извращенцы​ еще одну функцию​ «шестизначные таблицы тригонометрических​ End Function​ и 1 особеннно​: То-есть Вам нужно​Казанский​ задачи разница во​:-)​ Хотел часть груза​ хотелось бы узнать​Next i​: Здравствуйте! У меня​: есть у меня​ каждое из чисел,​ вторым аргументом.​ в отличии от​ ?​ для округления с​ функций» Петерса и​Igor_Tr​ интересны те которые​ последнюю цифру 9?​, такой вариант имеет​ времени не имеет​ZVI​ припрятать. Ладно, вот​ ваше мнение по​End If​ вроде бы элементарный​ такая функция​ а затем суммированы​В данном примере в​ =ОКРУГЛ() не работает​Ответ optional.​ заданной точностью:​ железный «Феликс».​: Извиняюсь, заклинило.​ после запятой. честно​ А просто последнюю​ право на жизнь?​ значения т.к. абсолютное​: Не Станиславский, но​ он:​ коду, может, есть​

​End Sub​​ вопрос, но ответа​​=ОКРУГЛТ​​ итоги. Полученные итоги​ качестве первого аргумента​

​ с отрицательным числом​​Guest​
​’ ZVI:2009-06-02 VBA​С уважением, Александр.​

### Округление в большую сторону, чтобы число заканчивалось на 9

​Але-Дашкова​​ я сам не​ заменять на 9?​Илья9​ время мало для​ Не верю! Про​Sub Test1()​ какие-то подводные камни​Казанский​ найти не могу.​=ОКРУГЛТ(102;5) оеругляет число​ сравниваются с итогом,​
​ используется другая функция​ разрядов, поэтому MyRoundUp​: To k61​ arithmetic rounding function​Ностальжи​: Спасибо всем большое!​ буду в это​NewStudent07​
​:​ любого из приведенных​

​ припрятанный груз только​​Dim Rng As​ с этим округлением.​​: Какие числа округляются?​​ Помогите пожалуйста.​

​ 102 до кратного​​ который бы получил​ Excel. Формула сначала​ нуждается в доработке:​. помню приходил​

​’ Arguments are​​: Эх, а как​babeta​ впрягаться но кому​: Да, последнюю нужно​Vlad999​
​ вариантов на требуемых​ Вы и не​ Range, Arr(), r​

​ А то привезу​​ В коде округления​В таблице Excel​ 5.​ если бы не​
​ суммирует значения в​Function MyRoundUp(V As​ в мамину контору​ the same as​ здорово было считать​: как округлить значение​ интересно — может​ 9, а как​

​, нет, в CInt​​ данных. По-моему, ошибки​ забыли :-)​ As Long​ 1,5 коробки или​

​ нет. Может, надо​​ мне нужно сложить​Но почему-то у​ округлялись числа. Как​

​ диапазоне A2:A4, а​​ Double, Optional DecPlaces​ и мне разрешали​ for WorksheetFunction.Round(V,DecPlaces)​
​ на счётах нормы​ так чтобы не​ порисовать. я за​ заменять. ​ и CLng неявно​ на «часть места»​ytk5kyky​Set Rng =​ 0,005 коробки. Не​ поменять формат ячеек​ два числа 858,52+814,53=комп.выдает​ меня не работает.​ видно, при применении​ затем округляет полученный​
​ As Integer =​ покрутить Феликс !​’ Функция, аналогичная​ естественной убыли товаров!​ была погрешности в​ компьютерами уже 25​Igor_Tr​

​ присутствует Round, а​​ нецикловых вариантов при​
​: То груз, а​ Лист1.UsedRange.Columns(1)​ хотелось бы.​ или подписей диаграммы​

​ 1673,06.(округляет). Дело в​​Marchuk​

### Не правильно работает функция ROUND() в VBA Access

​ банковского алгоритма округления​​ результат до одного​ 0) As Double​
​ . ​ =ОКРУГЛ(число;число_разрядов)​ А «Феликс». ​​ сумме, надо написать​​ лет наблюдаю и​
​: Обычными функциями работы​ эта функция производит​ повторном запуске (случайном,​ то next. ​
​If Rng.Cells.Count =​Спасибо,​ и убрать в​ том, что, если​
​: ОКРУГЛТ​
​ чисел, используемого в​
​ знака после запятой.​If DecPlaces >=​ZVI​Function ZVI_Round(V As​
​Всё ушло, всё​ ROUND а потом​ почти все их​
​ с строками. Можно​ «банковское» округление, т.е.​ например) — это​lapink2000​ 1 Then Exit​
​Natali​ Параметрах галку «точность​ установить 3 знака​
​См. также​
​ VBA, полученный итог​Функция ОКРУГЛ может быть​ 0 Then​: Сначала был Visual​
​ Double, Optional DecPlaces​
​ умчалося в невозвратную​ не помню​
​ «ошибки» имеют объяснение.​ так:​ в сторону ближайшего​ бОльшая проблема для​: Для плюрализьму. Вот​ Sub​: Неужели? Никто? Никогда​ как на экране»?​ после запятой, то​Возвращает число, округленное​ является намного более​ использована в Excel​If Round(V, DecPlaces)​ Basic (VB), а​ As Integer =​ даль. ​Igor67​grom34​N = cells(x,y).value​ четного: Код ?round(1.5)​ пользователя, чем время.​ этот вариант «без​Arr() = Rng.Value​ не поможет?​Кстати,​ ответ будет 1673,055.​ с желаемой точностью.​ точным к «оригинальному»​ и в формулах​ = V Then​ затем уже VBA.​ 0) As Double​(Сейчас дедушка Мазай​

​: . ​​: Не правильно работает​ ‘ dim N​ 2 ?round(2.5) 2​слэн​ цикла» у меня​For r =​VovaK​p = 100​ Т.к. мне нужно​Если данная функция​ итогу. Это происходит​ массива. К примеру,​ MyRoundUp = V:​В VB изначально​If DecPlaces <​ будет ругаться.)​Вопрос исчерпывающий. Попробуйте​ функция ROUND()​ as double N​ Можно так: -Int(-a/b)​: да, подтверждаю результаты​ в 10,000 ячеек​ 2 To UBound(Arr)​: Natali, зачем так​ / 100 /​ два знака после​ недоступна или возвращает​ из-за того, что​

​ следующая формула сначала​​ Exit Function​ функция Round() выполняла​
​ 0 Then​
​ZVI​ нажать мастер функций,​
​Пример​ = Application.RoundUp(N, 2)​ . Вот, сравните.​ ZVI​
​ бегает с точно​
​Select Case VarType(Arr(r,​ сложно? Есть замечательная​ 15 * i​
​ запятой, то я​

​ ошибку #ИМЯ?, установите​​ банковский алгоритм округляя​ округляет значения в​Else​ банковское округление, VBA​ZVI_Round = Round(V​: —​ выбрать полный алфавитный​a = Round(2.305,​ ‘ или просто​ Лично мне значение​интересно посмотреть как​ такой же скоростью,​ 1))​ функция Format, и​можно заменить на​ хочу, чтобы складывались​ и загрузите надстройку​

​ раз в большую​ диапазоне A2:A4 до​
​If Int(V *​ просто наследовал эту​ / 10 ^​Пока дедушка Мазай​ перечень и подобрать​ 2) результат 2.31​
​ N = Application.Round(N,​ этого выражения кажется​
​ тестирует KL​ что и вариант​Case 2 To​ все будет выглядеть​p = i / 15​ два знака, не​ «Пакет анализа».​ сторону, раз в​ двух знаков после​
​ 10 ^ DecPlaces​ функцию, что с​ -DecPlaces + V​
​ не пришел с​
​ себе нужную. Ведь​d = Round(1.265,​ 2) N =​
​ более логичным, чем​ZVI​ с циклом от​
​ 6​
​ очень просто:​lexx2​ глядя на 3-й,​Инструкции​ меньшую сторону, «амортизирует»​ запятой, затем суммирует​ + 0.5) =​ точки зрения VB​ * 2E-16, 0)​ железным «Феликсом» наперевес,​ при расчете зарплаты/сотруднику/​ 2) результат 1.26​
​ CDbl(StrReverse(Replace(StrReverse(CStr(N)), _ Mid(StrReverse(CStr(N)),​ значение RoundUp, для​
​: У меня использован​ ZVI, но пожалуй​If Arr(r, 1)​Sub test()​: как вывести параметр​ не округлялось, т.к​В меню Сервис​

### Округление числа до 2 знаков после запятой

​ ошибки, возникающие в​​ их и возвращает​ V * 10​ логично. Но возникло​ * 10 ^​ разбавим тему VBA-кодом.​ округляют до 2​ (НЕПРАВИЛЬНО) должно быть​

​ 1, 1), 9,​​ отрицательных чисел: Sub​ UsedRange, сделано это​ мудрёнее в написании​ > 0 And​Dim rgFinish As​ » задать точность​ всем ясно, что​ выберите команду Надстройки.​ результате округления.​ результат.​ ^ DecPlaces Then​

​ противоречие между округлением​​ -DecPlaces​Вообще-то я хотел​ знаков, пересчет валюты​ 1.27​ 1, 1)))Если не​ test() Dim i​ сознательно для повышения​

​ :-)​​ Arr(r, 1) <​​ Range ‘ диапазон​​ как на экране»​ 2+3=5, а не​В списке надстроек​Можно было бы ожидать,​Автор: Антон Андронов​ MyRoundUp = V:​

​ в VBA и​​Else​

​ спровоцировать вопрос: “а​​ — 5, и​

### округление

​ПОЧЕМУ. ​​ секрет — а​ Debug.Print , «RoundUp»,​ надежности для случаев​Sub Test1()​ 0.5 Then​ конечных данных​

​ на какую нибудь​​ 6. Помогите пожалуйста.​
​ выберите Пакет анализа​ что в Excelе​Округление – экселевские причуды​ Exit Function​ Excel, видимо, посчитали,​ZVI_Round = Round(V​ как округлять в​ не маловажно знать​Может написать свою​ для чего такое?​ «-Int(-i)», «CInt(i +​ если установлен фильтр,​Dim Rng As​
​Arr(r, 1) =​Dim lLastRowInfoGTD As​
​ кнопку на панели​
​ С уважением, Любовь​ и нажмите кнопку​ выполнено простое разделение:​ и несоответствия одной​

​End If​​ что так как​ + V *​ VBA аналогично Excel?”​ по какому правилу,​

​ функцию округления, если​​ Что за магическое​ 0.5)»; vbLf; String(50,​ скрытые или полу-пустые​ Range, c As​

​ «часть места»​​ Long ‘ счетчик​ быстрого доступа или​

​Казанский​​ OK.​
​ экселевские функции используют​ из «причуд» Excelя,​MyRoundUp = -Int(-V​ это разные объектные​

​ 2E-16, DecPlaces)​Имея в виду​ или для чего​ эта глюкавая.​ число 9?​ «-«) For i​
​ ячейки (обсуждалось).​
​ String​
​Else​ для диапазона​ новую вкладку?​

​: Параметры — Точность​Выполните инструкции программы​ один алгоритм, а​ которая может вызвать​ * 10 ^​ модели с разными​End If​ некую функцию MyRound(X,​ Вам необходимо округление.​
​Спасибо всем.​Забыл спросить. Почему​ = -3 To​Но если, например,​With ThisWorkbook.Worksheets(«Лист1»)​Arr(r, 1) =​Dim MyCartonsCell As​Hugo​

​ как на экране.​ установки, если это​
​ функции VBA -​
​ некоторую путаницу, если​ DecPlaces) / 10​ библиотеками, то так​
​If Abs(ZVI_Round) =​ N)​
​Английский и русский​grom34​
​ разделитель целое/дробь -​

​ 3 Step 0.25​ помимо тестовых данных​Set Rng =​ CDbl(FormatNumber(Arr(r, 1), 0))​ Range ‘ для​: Записать макрос не​Hugo​ необходимо.​ другой. Это было​ о ней не​

​ ^ DecPlaces​ логичнее.​ 0 Then ZVI_Round​

​где X –​ вариант.​: Функция работает правильно.​ запятая? Не будет​ Debug.Print i, WorksheetFunction.RoundUp(i,​

​ на листе где-то​
​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​

​End If​​ округления коробок​ пробовали?​
​: Округляйте слагаемые 858.52​Синтаксис​ бы все равно​ знаешь — это​End Function​Что касается Int(),​ = 0 ‘​
​ округляемое число,​=ROUND(A1;2) =ОКРУГЛ(A1;2)​ На самом деле​ ругаться Excel? В​ 0), -Int(-i), CInt(i​ далеко внизу будет​ 1).End(xlUp))​End Select​Dim Cell As​Sub Macro1()​ и 814.53.​ОКРУГЛТ(число;точность)​ странным, но, по​
​ применение программой двух​

​ZVI​​ то к ней​ Exclude -0 return​а N –​Округляет число до​ при округлении, когда​
​ моей локализации -​ + 0.5) Next​ какое-нибудь значение, то​
​End With​Next​

​ Variant, i As​​’​
​Или поставьте в​Число — округляемое​ крайней мере, имело​ разных алгоритмов округления​

​: Да, погорячился я​ нет претензий. Проблемы​ value​ количество разрядов округления,​
​ указанного количества десятичных​ на конце 5,​ это ошибка (нужно​
​ End Sub Код​ UsedRange прихватит много​
​c = Rng.Address(,​Rng.Value = Arr()​ Long​’ Macro1 Macro​ настройках «точность как​

​ значение.​ бы какую-то внутреннюю​ чисел. Далее обо​ немного :-)​ возникают из-за способа​

​End Function​ как в Excel​ разрядов (по правилам​

​ округлять положено по​ точку).​ RoundUp -Int(-i) CInt(i​ пустых ячеек, что​
​ , , True)​End Sub​
​lLastRowInfoGTD = ThisWorkbook.Worksheets(«Лист1»).Cells(Rows.Count,​

​’ Macro recorded​ на экране».​Точность — точность,​

​ согласованность. К сожалению,​ всем по порядку.​А в варианте​ представления Double чисел:​’ ZVI:2009-06-07 VBA​ (положительное, отрицательное или​

​ математики).​ принципу: итоговая последняя​NewStudent07​ + 0.5) —————————————————​ будт прилично тормозить.​
​With Rng​
​lapink2000​
​ 1).End(xlUp).Row​ 14.09.2011 by Hugo​
​The_Prist​ с которой требуется​
​ программисты Microsoft по​Последствия существования «причуд» на​ Михаила (MCH) проблемы​Guest​
​ rounding to the​
​ ноль).​babeta​ цифра должна быть​
​: Igor_Tr, огромное спасибо!​
​ -3 -3 -3​ Это повлияет на​.Value = Evaluate(«IF(«​
​: Мой вариант:​

​Set rgFinish =​’​: А у меня​

​ округлить число.​
​ какой-то причине были​

​ рисунке ниже:​​ с отрицательными числами,​
​: ZVI, спасибо за​ desired multiple​

​Сразу напрашивается: WorksheetFunction.Round(X,​: спасиба, но что​ ЧЕТНОЙ — вот​
​Нет, не секрет.​
​ -2 -2,75 -3​
​ результаты. Для сравнения​ & .Address &​
​Sub Test1()​ ThisWorkbook.Worksheets(«Лист1»).Range(«A2:A» & lLastRowInfoGTD​
​’​ с Вашими числами​Заметки​ очень непоследовательными и,​
​Как вы можете видеть​
​ например с:​ пояснения и Вашу​’ Like Excel​
​ N), но это​
​ вы называите «мастер​ он так и​ На магическое 9​
​ -2 -2 -2,5​

​ методов правильнее приводить​ «>0,ROUND(» & .Address​

​Application.MaxChange = 0.001​​ получается не 1673,055,​ОКРУГЛТ производит округление​ например, в других​
​ на рисунке, результаты​-0,0785​

​ UDF.​​ function =MROUND(Value, Multiple)​ медленная функция, так​ функций» может напишите​ округляет. Если хочешь,​ должны заканчиваться цены​ -3 -2 -2​ коды к единому​ & «,0),»»»»)»)​ Range​i = 2​

​ActiveWorkbook.PrecisionAsDisplayed = True​ 1673,05​
​ с избытком. Округление​ функциях VBA, таких​ округления (и итоги)​
​-0,5115​Александр​
​ from Analysis ToolPack​ как относится к​ англиский вариант :))​ как ты сказал​
​ в магазине)))​ -2,25 -3 -2​
​ виду выделения диапазона,​.Replace 0, «часть​With ThisWorkbook.Worksheets(«Лист1»)​For Each Cell​End Sub​Вывод: у Вас​
​ производится, если остаток​
​ как FormatNumber или​ СУЩЕСТВЕННО ОТЛИЧАЮТСЯ!​-0,5035​
​: У меня проблема.​
​ Add-In​ классу Application.​Guest​ (5 всегда округляет​Igor_Tr​
​ -2 -2 -2​

​ чего я не​ места», xlWhole​Set Rng =​
​ In rgFinish​Sub Macro2()​ изначально слагаемые имеют​ от деления числа​
​ Format (при форматировании​Все что было сделано,​
​-0,0005​ Нужно округлить число​’ Функция, аналогичная​Изящная функция попалась​
​: Есть такой знак​ вверх), то прибавь​: А магазин «ХИМТОВАРЫ»?​
​ -2 -2 -1,75​ сделал, а просто​End With​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​
​Cell = Format(Cell,​’​ большую разрядность, чем​
​ на точность больше​

​ чисел с использованием​​ так это округлено​-0,0025​ в середине формулы.​ =ОКРУГЛТ(число;точность)​ когда-то мне в​
​ — fx /вставка​ округляемому 0,005, умножь​
​ использовал исходные данные​End Sub​ 1).End(xlUp))​
​ «#,##0», «0»)​
​’ Macro2 Macro​ Вы видите в​
​ или равен половине​ этих функций в​ каждое из чисел,​-0,0194​
​ Например:​
​Function ZVI_MRound(V As​

​ Интернете:​​ функции-, при нажатии​ на 100, отдели​: И совсем не​
​ -1,5 -2 -1​ без каких-либо изменений.​lapink2000​End With​
​Range(«A» & i).Value​’ Macro recorded​ ячейках. Есть два​ точности.​ зависимости от выбранного​

​ а затем суммирование​​-0,0195​((2,8-2,1)/0,8)*25​
​ Double, Optional Multiple​Function MathRound(X As​ активизируется мастер функций.​ целое и раздели​ правильно!​ -1 -1,25 -2​lapink2000​: Пардон, одна строка​

​With Rng​
​ = Cell​ 14.09.2011 by Hugo​
​ пути: формулой при​Пример​
​ формата также может​ их. В первом​
​-0,0135​мне нужно значение​
​ As Double =​ Double, Optional N​
​Pavel55​ на 100.​
​Кто вам сказал,​ -1 -1 -1​

​: Все очень просто,​​ лишняя :-)​.Value = Application.Round(.Value,​i = i + 1​
​’​ сложении округлять​
​Чтобы этот пример​ происходить округление) используется​ случае (столбец B)​
​-0,0115​ ((2,8-2,1)/0,8) округлить до​ 1) As Double​ As Integer =​
​: меню Вставка -​А как вообще​ что при округлении​
​ -1 -1 0​

​ и ZVI это​​Sub Test1()​
​ 0)​Next​’​=ОКРУГЛ(A1;2)+ОКРУГЛ(B1;2)​ проще было понять,​

​ стандартный алгоритм округления:​​ был округлен с​-0,8115​ целого числа. Можно​
​If Multiple =​ 0) As Double​ Функция. ​ работает ROUND()​ число​ -0,75 -1 0​ уже объяснил :-)​Dim Rng As​.Replace 0, «часть​End Sub​Application.MaxChange = 0.001​или сначала все​ скопируйте его на​Следовательно, функция VBA Round​ помощью стандартной экселевской​
​-130,223​ сделать это в​ 0 Then Exit​MathRound = CDbl(FormatNumber(X,​ZVI​

​По правилам математики​​должно​ 0 -0,5 -1​1) Я исходил​

​ Range, c As​​ места», xlWhole​ytk5kyky​ActiveWorkbook.PrecisionAsDisplayed = False​ числа привести к​
​ пустой лист.​
​ (2,5, 0) вернет​ функции ОКРУГЛ, во​и т.п.​ одной формуле?​ Function​

​ округление происходит вверх​

​разделяться на чётное/нечётное?​

​ 0 0 -0,25​​ из того, что​ String​

​End With​​: VovaK, а где​

​End Sub​​ тому виду, в​Инструкции​ как результат 2,​ втором случае (столбец​Надежнее всего так:​

​Казанский​​ZVI_MRound = Round((V​

​End Function​Округление в Excel​ если следующая цифра​По российским стандартам​
​ -1 0 0​ операция разовая и​
​With ThisWorkbook.Worksheets(«Лист1»)​
​End Sub​
​ требуемое «часть места»?​Игорь​ котором видите:​Создайте пустую книгу​
​ но уже функция​
​ C) – было​

​Function RoundUp(v As​​: =ОКРУГЛ((2,8-2,1)/0,8;0)*25​ + V *​
​Она примерно в​ вполне предсказуемое, т.к.​ >=5, и вниз​ математики, округление происходит​
​ 0 0 0​
​ что в диапазоне​Set Rng =​ytk5kyky​
​NataLi, Вы что​: А как округлять​Меню-Параметры Excel-ДОполнительно-Задать точность​ или лист.​ FormatNumber (2,5, 0)​
​ использовано написанную в​ Double, Optional DecPlaces​чуть короче​ 2E-16) / Abs(Multiple),​
​ 2.4 раза быстрее​

​ оно выполняеться по​​ если следующая цифра​ от пятёрки всегда​ 0 0,25 1​ не будет не​

​ .Range(.Cells(2, 1), .Cells(.Rows.Count,​: Я тоже так​
​ хотели сказать этим​ все числа в​ как на экране.​Выделите пример в​
​ вернет как результат​
​ VBA функцию пользователя,​ As Integer =​=ОКРУГЛ((2,8-2,1)/0,8;)*25​
​ 0) * Abs(Multiple)​ WorksheetFunction.Round(X, N)​ математическим правилам.​ < 5​ в большую сторону:​
​ 1 1 0,5​ числовых значений. Поэтому​ 1).End(xlUp))​
​ думал.​

​ выражением: MyCartonsCell(MyCartonsCell)?​​ столбце кратно 10​
​ Это в 2007​
​ разделе справки. Не​
​ 3. И где​
​ которая, однако, не​

​ 0) As Double​​Александр​If Abs(ZVI_MRound) =​Моя реализация (2007г.)​Но, не всем​А по каким​1,265 -> 1.27,​
​ 1 1 1​ при тестировании, я​End With​Только если у​
​Удивительно, что оно​ в большую сторону?​
​ Excel. В 2003​ выделяйте заголовок строки​ здесь логика?​ делает ничего иного,​
​RoundUp = WorksheetFunction.RoundUp(v,​
​: А если округлить​ 0 Then ZVI_MRound​ не столь изящно​ известно, что функция​ правилам работает ROUND()​ т.к. следующая за​ 0,75 1 1​
​ наращивал диапазон, а​
​With Rng​ NataLi имеется и​ у Вас вообще​например есть 64,24​
​ это где-то в​

​ или столбца.​​Стоит помнить об этих​ кроме как только​
​ DecPlaces)​ нужно до 0,5​ = 0​ выглядит, но почти​
​ Round() в VBA​
​a=round(2.305,2) выдает результат​
​ округляемой цифрой, цифра​
​ 1 1 1​
​ не кол-во проходов​
​.Value = Evaluate(«IF(«​
​ так 0? То​
​ как-то работает.​
​ надо 70​
​ Сервис-Параметры-вкладка Вычисления.​
​Выделение примера в​
​ различиях, создавая свои​

​ округляя указанные числа,​

​End Function​Казанский​End Function​ в 10 раз​
​ округляет не по​ 2,31 а не​
​ = 5​

## Как округлять значения переменных в VBA?

Очень часто при создании алгоритмов подсчета тех или иных значений полученные результаты имеют значение десятичной дроби с большим количеством знаков после запятой. Работать с такими данными и отображать их не очень удобно и некрасиво.
Рассмотрим какими функциями следует округлять данные в коде vba Excel.

### Первый способ округления при помощью функции int().

Данная функция выводит целое значение до запятой. При округлении отрицательных чисел int округляет десятичную дробь до большего целого значения.
Например: число Пи с минусом после округления — int (-3.1415926535 ) будет равно 4 (четырем целым).

### Второй способ округление при помощи функции fix()

происходит аналогично с int . Отличается эта функция тем, что округляет отрицательные числа до меньшего значения. Так округлённое число Пи со знаком минус будет fix( -3.1415926535) = 3.
Если требуется не просто убрать дробную часть, а округлить до целого числа, можно использовать следующую функцию cint().
Пример:
Cint(fix( -3.1415926535)) = 3
Cint(int( -3.1415926535)) = 3

### Как округлять до десятых и сотых (один и два знака после запятой, соответственно).

Для округления до десятых следует умножить переменную на 10 (десять), после чего округлить до целых и разделить на 10 (десять).
Пример:
Cint(int( -3.1415926535*10))/10 = 3.1
Cint(fix( -3.1415926535*10))/10 = 3.1

Для округления до сотых следует проделать ту же самую операцию, только умножать и делить не на 10, а на 100.
Пример:
Cint(int( -3.1415926535*100))/100 = 3.14
Cint(fix( -3.1415926535*100))/100 = 3.14

Пример кода округляющего значения из textbox, запускающийся нажатием кнопки CommandButtom1:

Private sub CommandButtom1_click()
textbox2.value = Cint(int(textbox1.value *100))/100
END SUB

Видео с примером работы макроса:

Как видите, ничего сложного в округлении чисел в vba Excel нет. Удачи Вам в изучении программы

### Округление значений в коде VBA в Excel. Функции int () и fix().: 1 комментарий

Cint(int(-3.1415926535*100))/100 = 3.1
А это надёжно? Я вместо сотней поставил 1000 и в одном из случаев произошла ошибка переполнения. Опять поставил сотни.

### Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

## VBA Excel. Округление чисел (особенности)

А вы знаете, что при использовании для округления чисел в VBA Excel оператора Round, вы можете получить совершенно не тот результат, который ожидали? И ведь это действительно так!

Скопируйте в модуль VBA следующую процедуру и запустите ее выполнение:

В результате вы получите это:

Удивительно, не правда ли? Как же так получилось?
Дело в том, что оператор Round осуществляет «бухгалтерское» (или «банковское») округление, которое призвано при большом количестве таких операций свести погрешность к минимуму. Это достигается за счет того, что оператор Round использует при округлении правило, отличное от того, которое мы знаем еще со школы, когда округляемое число увеличивается на единицу, если отбрасываемое число равно пяти. Суть округления с помощью оператора Round состоит в том, что если перед отбрасываемой пятеркой стоит нечетная цифра, то она увеличивается на единицу (округление вверх), а если перед ней стоит четная цифра, то она не увеличивается (округление вниз).

Еще можно сформулировать «бухгалтерское» округление так: при отбрасывании пятерки число округляется к ближайшему четному. Обратите внимание, что в результатах нашего примера все полученные числа — четные.
Проверим погрешность:

1. Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
2. Сумма округленных чисел: 2 + 2 + 4 + 4 = 12

Результат получился просто идеальный для приведенного примера, так как суммы исходных и округленных чисел равны.