Округление чисел в VBA Excel с помощью оператора Round и встроенной функции рабочего листа WorksheetFunction.Round. Особенности бухгалтерского и обычного округления.
Оператор Round
А вы знаете, что при использовании для округления чисел в VBA Excel оператора Round, вы можете получить совершенно не тот результат, который ожидали? И ведь это действительно так!
Скопируйте в модуль VBA следующую процедуру и запустите ее выполнение:
Sub Test_1() Dim a1 As Single, a2 As Single, a3 As Single, a4 As Single a1 = Round(1.5, 0) a2 = Round(2.5, 0) a3 = Round(3.5, 0) a4 = Round(4.5, 0) MsgBox «Round(1.5, 0)=» & a1 & vbNewLine & _ «Round(2.5, 0)=» & a2 & vbNewLine & _ «Round(3.5, 0)=» & a3 & vbNewLine & _ «Round(4.5, 0)=» & a4 End Sub |
В результате вы получите это:
Удивительно, не правда ли? Как же так получилось?
Дело в том, что оператор Round осуществляет «бухгалтерское» (или «банковское») округление, которое призвано при большом количестве таких операций свести погрешность к минимуму. Это достигается за счет того, что оператор Round использует при округлении правило, отличное от того, которое мы знаем еще со школы, когда округляемое число увеличивается на единицу, если отбрасываемое число равно пяти. Суть округления с помощью оператора Round состоит в том, что если перед отбрасываемой пятеркой стоит нечетная цифра, то она увеличивается на единицу (округление вверх), а если перед ней стоит четная цифра, то она не увеличивается (округление вниз).
Еще можно сформулировать «бухгалтерское» округление так: при отбрасывании пятерки число округляется к ближайшему четному. Обратите внимание, что в результатах нашего примера все полученные числа — четные.
Проверим погрешность:
- Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
- Сумма округленных чисел: 2 + 2 + 4 + 4 = 12
Результат получился просто идеальный для приведенного примера, так как суммы исходных и округленных чисел равны.
Оператор WorksheetFunction.Round
Если вам необходимо общепринятое математическое округление, используйте встроенную функцию рабочего листа — WorksheetFunction.Round.
Скопируйте в модуль VBA процедуру с использованием WorksheetFunction.Round и запустите ее выполнение:
Sub Test_2() Dim a1 As Single, a2 As Single, a3 As Single, a4 As Single a1 = WorksheetFunction.Round(1.5, 0) a2 = WorksheetFunction.Round(2.5, 0) a3 = WorksheetFunction.Round(3.5, 0) a4 = WorksheetFunction.Round(4.5, 0) MsgBox «WorksheetFunction.Round(1.5, 0)=» & a1 & vbNewLine & _ «WorksheetFunction.Round(2.5, 0)=» & a2 & vbNewLine & _ «WorksheetFunction.Round(3.5, 0)=» & a3 & vbNewLine & _ «WorksheetFunction.Round(4.5, 0)=» & a4 End Sub |
Результат будет следующий:
Получилось то, что мы и ожидали.
Проверим погрешность:
- Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
- Сумма округленных чисел: 2 + 3 + 4 + 5 = 14
Результат очевиден — в данном случае сумма округленных чисел на 2 единицы больше суммы исходных.
Исходя из этого результата, можно сделать вывод, что «банковское» округление с помощью оператора Round дает более точные результаты при массовых операциях с округленными числами. Но в повседневной жизни чаще встречается обычное математическое округление.
Выбирайте округление, которое вам больше подходит для решаемой задачи!
In this Article
- VBA Round
- Syntax of the VBA Round Function
- VBA Round a Variable
- VBA Rounding Results
- VBA Round Cell Value
- VBA RoundUp Function
- RoundUp to the Nearest Whole Number
- RoundUp Function Results
- VBA RoundDown Function
- RoundDown to the Nearest Whole Number
- RoundDown Function Results
- Other VBA Rounding Functions
- VBA Ceiling – RoundUp to A Specified Significance
- VBA RoundUp To Specified Significance Results
- VBA Floor – RoundDown to A Specified Significance
- VBA RoundDown to Specified Significance Results
VBA Round
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:
Sub Round1()
Msgbox Round(7.25, 1)
End Sub
The resulting MessageBox:
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.
Sub RoundUsingVariable()
Dim unitcount As Double
unitcount = 7.25
MsgBox "The value is " & Round(unitcount, 1)
End Sub
The result is:
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:
Sub RoundCell()
Range("A1").Value = Round(Range("A1").Value, 2)
End Sub
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:
roundupUnitcount = Application.WorksheetFunction.RoundUp(unitcount, 3)
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:
Sub RoundUp()
Dim unitcount As Double
Dim roundupUnitcount As Double
unitcount = 7.075711
roundupUnitcount = Application.WorksheetFunction.RoundUp(unitcount, 4)
MsgBox "The value is " & roundupUnitcount
End Sub
The result is:
VBA Coding Made Easy
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!
Learn More
RoundUp to the Nearest Whole Number
You can round up to the nearest whole number by specifying 0 as the number of decimal places:
Sub RoundUpWhole()
MsgBox Application.WorksheetFunction.RoundUp(7.1, 0)
End Sub
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:
Sub RoundDown()
Dim unitcount As Double
Dim rounddownUnitcount As Double
unitcount = 5.225193
rounddownUnitcount = Application.WorksheetFunction.RoundDown(unitcount, 4)
MsgBox "The value is " & rounddownUnitcount
End Sub
The result is:
VBA Programming | Code Generator does work for you!
RoundDown to the Nearest Whole Number
You can round down to the nearest whole number by specifying 0 as the number of decimal places:
Sub RoundDownWhole()
MsgBox Application.WorksheetFunction.RoundDown(7.8, 0)
End Sub
The result is:
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:
Sub RoundUpToSignificance()
Dim unitcount As Double
Dim ceilingmathUnitcount As Double
unitcount = 4.1221
ceilingmathUnitcount = Application.WorksheetFunction.Ceiling_Math(unitcount, 5)
MsgBox "The value is " & ceilingmathUnitcount
End Sub
The result is:
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 |
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
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:
Sub RoundDownToSignificance()
Dim unitcount As Double
Dim floormathUnitcount As Double
unitcount = 4.55555559
floormathUnitcount = Application.WorksheetFunction.Floor_Math(unitcount, 2)
MsgBox "The value is " & floormathUnitcount
End Sub
The result is:
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 |
Очень часто при создании алгоритмов подсчета тех или иных значений полученные результаты имеют значение десятичной дроби с большим количеством знаков после запятой. Работать с такими данными и отображать их не очень удобно и некрасиво.
Рассмотрим какими функциями следует округлять данные в коде 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 »
28 Апрель 2011 129134 просмотров
- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int(), Fix() и Round()позволяют по разному округлять числа:
- Int() возвращает ближайшее меньшее целое;
- Fix() отбрасывает дробную часть;
- Round() округляет до указанного количества знаков после запятой.
Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
Т.е. если мы выполним такую строку кодато результатом будет 2,5, хотя предполагалось получить 2,51. Поэтому порой для округления лучше использовать Format:
MsgBox Format(2.505, "#,##0.00")
но в этом случае мы получим не число в чистом виде, а текст. И если нужно именно число, то придется производить дополнительные преобразования:
MsgBox CDbl(Format(2.505, "#,##0.00"))
Так же, для математического округления, можно использовать и такой вариант:
MsgBox Application.Round(2.505, 2)
Но здесь стоит учитывать, что это не чистый VB и этот метод сработает только в Excel, т.к. по сути мы обращаемся к встроенной в Excel функции округления ОКРУГЛ(ROUND), которая применяет именно математическое округление.
- Rnd и команда Randomize используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях). Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел.
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
- Sgn() — позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, -1, если отрицательное и 0, если проверяемое число равно 0.
- Mod() — Делит два числа и возвращает только остаток. Например, выражение 8 Mod 3 вернет число 2, т.к. без остатка(в виде дроби у результата деления) 8 делится на 3 только до 2-х(8 / 3 = 2,66666666666667).
При этом функция Mod учитывает и знак числа — если первое число или оба числа отрицательные, то результатом будет отрицательное число. Если же отрицательное только второе число — то результат будет положительным числом.
При попытке получить остаток при делении чисел с плавающей запятой результат может быть не тем, который ожидается, потому что перед выполнением деления оба числа округляются по математическим законам(5 и выше до большего, 4 и ниже — до меньшего). Например, выражение 8 Mod 3.5 вернет 0, а выражение 8 Mod 3.4 — 2.
Функция ОКРУГЛ (ROUND) в Excel
Смотрите также: =ОКРУГЛТ(_число_;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, подскажите
-
As Double, Optional
Public Function ZVI_Round(X
- В частности:
- знал, что ROUNDИ в руссифицированном 2 1,75 2
- — основной фактор & «,0),»»»»)»)Будем иметь вместо
- число целое, тоapplication.roundup(64.24,-1) уже НЕОБРАТИМО, поэтому
CTRL+C Как вы можете Round(). Чтобы посмотреть указанного количества разрядов, пожалуйста, а как ByVal N As
Полезная информация
- As Double, OptionalRound(1.5)=2, ничего необычного; у нас такая Excel функция ОКРУГЛ(1,265;2)
- 2 2 2 различия при малых
- .Replace 0, «часть неотправки «часть места» оно и округлится
- А дальше зависит испытывать советую на
- На листе выделите видеть, результат, возвращаемый
- соответствующий код макроса т.е. знаков до реализовать функцию аналогичную Integer = 0)
Примеры использования функции ОКРУГЛ в Excel
- N As IntegerНо Round(2.5)=2, а шибко умная! ) даст вам значение 2 2 2
- временах (от 0-2 места», xlWholeПохоже без цикла до себя самого. от того, как КОПИИ книги. ячейку A1 и макросом, может полностью для пользовательской функции
- или после запятой. ОКРУГЛВВЕРХ с помощью As Double = 0) As не 3, как Полез в Сеть 1,27. 2,25 3 3 сек при использованииEnd With никак.
Но если очень
office-guru.ru
Округление до целого числа функциями ОКРУГЛ и FormatNumber в VBA
задать столбец, естьik нажмите сочетание клавиш отличаться от ожидаемого. нажмите комбинацию горячих Например, при помощи VBADim B As Double обычно ожидается. за разъяснениями:
Разный результат округления в Excel и VBA
А в американском 3 2,5 3
ScreenUpdating=False)End Subdl хочется:
ли в нем: можно так: CTRL+V.Как уже выше упоминалось, клавиш ALT+F11: нее можно округлитьMCH DoubleDim b#Упрощенно, для одного1. Гипотеза, почему VBA, «Round» - 3 3 2,752) Поскольку ZVIdl: Sub Test1()If Not Int(MyCartonsCell.Value) формулы или только=сумм(округл(A1:A10;2))Чтобы переключиться между один алгоритм неВ Module1 прописан код числа в ячейке: как вариант:
If N =b = Fix(N)
десятичного знака правило
Функция ОКРУГЛ и Round VBA округляют по-разному?
так странно ведёт 1,26. 3 3 3 использовал масщтабирование с: увы недосмотрел, всёDim Rng As = MyCartonsCell.Value Then константы, есть липрим. просмотром результатов и является лучше или пользовательской макро-функции. А2 с двухFunction MyRoundUp(V As 0 ThenIf N < банковского округления такое: себя Round:
Это разные стандарты, 3 3 3 помощью цикла, произошло таки пусто опрятней RangeЕще рекомендую почитать нечисловые значения.1. А1:А10 - просмотром формул, возвращающих хуже другого. Каждый символов после запятой Double, Optional DecPlacesMyRound = 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 AsWith ThisWorkbook.Worksheets(«Лист1») VBA. Basic 6.02. формула массива (апостроф) или в алгоритм дает результаты, стандартный алгоритм, в всегда округляет вIf Round(V, DecPlaces)ElseZVI_Round = Round(X с избытком, а абзац)
Несоответствия функций округления в Excel и VBA
— в галлонах…Казанский способа выбора диапазона. RangeSet Rng =Вот одна ссылка:ФункцияHugo меню Сервис укажите которые мы «ожидаем», котором «половинки» (пятерки противоположную сторону от = V ThenB = 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служит для округления
Максим формул и выберите банковского алгоритма, который, десятичной дроби) округлены Следующий пример демонстрируетElseMyRound = 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
exceltable.com
округление VBA
——,
в моем кодеSet Rng =
With Rng Лузер, Владимир. точности (число значащих
макрос для создания формул.
удивляет результатами. сторону. То естьОКРУГЛ(число; число_разрядов)
* 10 ^
Int(Abs(X) / BZVI_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)
1).End(xlUp)) xlWhole
ZVI части)
арботает но он2 алгоритма были реализованы
3; 10,345 до
В качестве аргументов функции ^ DecPlacesEnd If
2.222E-16, b) Это удобно банкам,
Inconsistently Implemented’, где в заблуждение тех,
NewStudent07
3) В итоге,End With
Set Rng0 =: Вполне приличный код,Функция округляет числа. Как3
одновременно, кроме того,
10,35 и т. ОКРУГЛ могут выступать
End IfEnd FunctionEnd If но знают ли
написано, что в кто его читает: Есть столбец А,
мои результаты были
With Rng
.SpecialCells(xlCellTypeFormulas, 2) nataLi, если учесть
Round сделать чтобы не4
довольно хаотичным образом.
д. Это именно числа, текстовые представленияEnd Functionk61If 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(ByValA 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)=» & ‘bias’, ошибку, набегающую
1.26 ; 1.265 они заканчивались на
Михаил С. 0) места», xlWhole Можно немного переделать: тип которого совпадаетConst DataRange =
ближайшего числа, кратного и экселевская функция из нас.Число As Integer = — Г89573), логарифмическая 3-х вариантов. Round(1.5) & vbCr при сложении нескольких -> 1.27 ; 9 (столбец В).: Маленький офтоп. Если.Replace 0, «частьEnd WithSub Test1() с типом переданного «$A$26:$M$32″ 3 (9) ОКРУГЛ (в конце
В случае использования доступных(number) – значение, 0) As Double
линейка, счёты (mini).— _
округляемых чисел). 1.268 -> 1.27 Можна ли это
кому интерсно - места», xlWholeRng0.Replace «часть места»,Dim Rng As аргумента
Const ChartRange ==ОКРУГЛТ(-10; -3) Округляет концов, в английской в VBA функций, которое требуется округлить.Dim x#Всё поддерживается в
ZVI
& «Round(2.5)=» &Вот такие интересные Function RoundMath(Tochn As как-то автоматизировать и
результаты теста изEnd With 0, xlWhole Range, Arr(), rПараметры «B24:M24″
число -10 до версии Excelя, она (кроме Round ()Число_разрядовx = Fix(V
исправном состоянии наZVI
Round(2.5), _
результаты.
Double, iR As написать макрос. post_61633.xls на разных
Rng0.Replace «часть места»,
End Sub As Long
NumberDim NewData As ближайшего числа, кратного называется также - это также CByte(num_digits) — количество * 10 ^ случай энергетического каллапса.
: —vbExclamation, «Crazy VBA
Кстати, ROUND - Integer) As Double
Пример задания: есть операционках и версиях
0, xlWholeZVI
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 ExitNumDigitAfterDecimalDim 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 и Данное значение присваиваю
то у меня :-)
For r =
указывающее, сколько знаков Long сообщение об ошибке, Cells(i, 9) / округляются раз в(num_digits) может быть:ZVI_RoundUp = Round(x
planetaexcel.ru
Round
Функция Round
коде My_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 и 5Cells(i, 9).Value = раз в меньшую часть исходного значения |
DecPlaces, DecPlaces +
время не получался 0 Then VBA функцию Round(число,2),
если кто-то подскажет,
10 ^ iR
excelworld.ru
VBA — округление — просьба глянуть код
большое спасибо. переменной все время разница незаметна, а
использован медленный FormatNumber 1)) опущен, то дробнаяDim x As
имеют разные знаки Int(Cells(i, 9)) сторону, всегда к
(справа от запятой). 1) ноль. А теперь
b = 10 принося тем самым
как написать программу, TTochn = HTochnIgor_Tr в большую сторону?
в 5000 строкGuest
Case 2 To часть отбрасывается Integer (#ЧИСЛО!)
Cells(i, 9).Value = ближайшему четному. ПоэтомуРавным нулю – значениеEnd Function сравните оуругление до ^ -b кому-то убытки, а округляющую число до * 10 HTochnCroped: А чем не
Подскажите пожалуйста. И
вариант без цикла: 1) Если речь 6
ПримерDim i AsMarchuk 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) ‘возвращается 123Dim p As внимательный :(
End If экселевской функции, будетОтрицательным – округляется целая
отрицательных DecPlaces, правильнее…X…ZVI_Round…My_Round x * 1E-16,
банковского округления можно использовать функцию Int. 10 IDelta =?: Округлять до какого
о коде предложенном то у меня
End Select retval=Round(A,3) ‘возвращается 123.457
DoublealexcelЯ так округляю округлено до 6.
часть исходного значения
так, с использованием
0,0785 .. 0,079 0) * b прочесть здесь:
Igor_Tr
TTochn — TTochnCropedNewStudent07 какого знака после DL, то у
в XL2007 наNextКатегорияIf Target.Address =: вот я не
числа до ближайшего
Однако VBA поступит (слева от запятой). ZVI_Round, приведенной выше:
.. 0,078Else
Реализация (на мой: У Вас уникальная If (IDelta >=
: А как ее
запятой? меня в XL2007
примере используемом здесьRng.Value = Arr()
Математические функции DropDownList Then
внимательный :({/post}{/quote} числа кратного 5
иначе, например, с
Если в качестве аргумента
’ZVI:2012-02-09 VBA ROUNDUP
0,5115 .. 0,512
ZVI_Round = Round(x взгляд, не очень способность поднимать настроение.
5) Then Rounded
надо преминить, чтобыЕсли округлять до
на примере используемом
разница незаметна, аEnd SubNatali
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 As0,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_RoundZVI
— ЭТО ЦЕЛОЕ / (10 ^
Excel. Справки -Казанский
медленнее.{/post}{/quote} о коде предложенном
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,013End Function
: В дополнение к тогда округлять то, RoundMath = Rounded
VBA это будетShersh теста, может, и меня в XL2007With ThisWorkbook.Worksheets(«Лист1»)Задача была следующая:AnimationArray = NewDataalexcel по матиматическим правилам(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 ThenGuestГость
времен, по-видимому, с
отбрасывание разрядов, а эту тему есть,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 с большим числом
часть.End Function
Почему 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 — (OldPointMarchuk: угу накоплению ошибки округления. целого: четного или=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 случае нужно еще
planetaexcel.ru
Округление
— 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 xCells(i, 9) =alexcel
Здесь то же самое, действие функции ОКРУГЛи т.п. ПРАВИЛЬНО, правильный вариант арифметического Вега и конторских
* 100 + чисел. если кто т.д. CInt(a / b
Опять же замечу, loop поставить.: Вы в таможне отказывается округлять.Range(ChartRange).Value = AnimationArray WorksheetFunction.RoundDown(Cells(i, 9), 0): О спасибо
что и в с отрицательным, положительнымMCHа VBA.Int и округления, заодно привожу счетов, альтернативой были 0.5) / 100 хочет порисуйте 0Igor_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С уважением, Александр.
CyberForum.ru
Округление в большую сторону, чтобы число заканчивалось на 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 неявно на «часть места»ytk5kykySet Rng = 0,005 коробки…. Не поменять формат ячеек два числа 858,52+814,53=комп.выдает меня не работает. видно, при применении затем округляет полученный
As Integer = покрутить Феликс !’ Функция, аналогичная естественной убыли товаров! была погрешности в компьютерами уже 25Igor_Tr
присутствует Round, а нецикловых вариантов при
: То груз, а Лист1.UsedRange.Columns(1) хотелось бы. или подписей диаграммы
1673,06.(округляет). Дело вMarchuk
CyberForum.ru
Не правильно работает функция ROUND() в VBA Access
банковского алгоритма округления результат до одного 0) As Double
… =ОКРУГЛ(число;число_разрядов) А «Феликс»… сумме, надо написать лет наблюдаю и
: Обычными функциями работы эта функция производит повторном запуске (случайном, то next…
If Rng.Cells.Count =Спасибо, и убрать в том, что, если
: ОКРУГЛТ
чисел, используемого в
знака после запятой.If DecPlaces >=ZVIFunction ZVI_Round(V As
Всё ушло, всё ROUND а потом почти все их
с строками. Можно «банковское» округление, т.е. например) — этоlapink2000 1 Then Exit
Natali Параметрах галку «точность установить 3 знака
См. также
VBA, полученный итогФункция ОКРУГЛ может быть 0 Then: Сначала был Visual
Double, Optional DecPlaces
умчалося в невозвратную не помню
«ошибки» имеют объяснение. так: в сторону ближайшего бОльшая проблема для: Для плюрализьму… Вот Sub: Неужели? Никто? Никогда как на экране»? после запятой, тоВозвращает число, округленное является намного более использована в ExcelIf Round(V, DecPlaces) Basic (VB), а As Integer = даль…Igor67grom34N = 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 =VovaKp = 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 банковское округление, VBAZVI_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(): как вывести параметр не округлялось, т.кВ меню Сервис
CyberForum.ru
Округление числа до 2 знаков после запятой
ошибки, возникающие в их и возвращает V * 10 логично. Но возникло * 10 ^ разбавим тему VBA-кодом. округляют до 2 (НЕПРАВИЛЬНО) должно быть
1, 1), 9, отрицательных чисел: Sub UsedRange, сделано это мудрёнее в написании > 0 AndDim rgFinish As » задать точность всем ясно, что выберите команду Надстройки. результате округления. результат. ^ DecPlaces Then
противоречие между округлением -DecPlacesВообще-то я хотел знаков, пересчет валюты 1.27 1, 1)))Если не test() Dim i сознательно для повышения
:-) Arr(r, 1) < Range ‘ диапазон как на экране» 2+3=5, а неВ списке надстроекМожно было бы ожидать,Автор: Антон Андронов MyRoundUp = V:
в VBA иElse
спровоцировать вопрос: “а — 5, и
CyberForum.ru
округление
ПОЧЕМУ??? секрет — а 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 AsHugo
как на экране. установки, если это
функции 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 SelectDim Cell AsSub Macro1() и 814.53.ОКРУГЛТ(число;точность) странным, но, по
применение программой двух
ZVI то к ней Exclude -0 returnа N –Округляет число до при округлении, когда
моей локализации - + 0.5) Next какое-нибудь значение, то
End WithNext
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
Dim Rng As
— 2)
Application.MaxChange = 0.001 получается не 1673,055,ОКРУГЛТ производит округление например, в других
на рисунке, результаты-0,0785
UDF. function =MROUND(Value, Multiple) медленная функция, так функций» может напишите округляет. Если хочешь, должны заканчиваться цены -3 -2 -2 коды к единому & «,0),»»»»)») Rangei = 2
ActiveWorkbook.PrecisionAsDisplayed = True 1673,05
с избытком. Округление функциях VBA, таких округления (и итоги)
-0,5115Александр
from Analysis ToolPack как относится к англиский вариант :)) как ты сказал
в магазине))) -2,25 -3 -2
виду выделения диапазона,.Replace 0, «частьWith ThisWorkbook.Worksheets(«Лист1»)For Each CellEnd SubВывод: у Вас
производится, если остаток
как FormatNumber или СУЩЕСТВЕННО ОТЛИЧАЮТСЯ!-0,5035
: У меня проблема.
Add-In классу Application.Guest (5 всегда округляетIgor_Tr
-2 -2 -2
чего я не места», xlWholeSet Rng =
In rgFinishSub 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, умножь
nadmin -2 -1 -1
использовал исходные данныеEnd Sub 1).End(xlUp))
«#,##0», «0»)
’ Macro2 Macro Вы видите в
или равен половине этих функций в каждое из чисел,-0,0194
Например:
Function ZVI_MRound(V As
Интернете: функции-, при нажатии на 100, отдели: И совсем не
-1,5 -2 -1 без каких-либо изменений.lapink2000End With
Range(«A» & i).Value’ Macro recorded ячейках. Есть два точности. зависимости от выбранного
а затем суммирование-0,0195((2,8-2,1)/0,8)*25
Double, Optional MultipleFunction MathRound(X As активизируется мастер функций. целое и раздели правильно! -1 -1,25 -2lapink2000: Пардон, одна строка
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 SubApplication.MaxChange = 0.001или сначала все скопируйте его наСледовательно, функция VBA Round помощью стандартной экселевской
-130,223 сделать это в 0 Then ExitMathRound = CDbl(FormatNumber(X,ZVI
По правилам математикидолжно 0 -0,5 -11) Я исходил
Range, c As места», xlWholeytk5kykyActiveWorkbook.PrecisionAsDisplayed = False числа привести к
пустой лист.
(2,5, 0) вернет функции ОКРУГЛ, вои т.п. одной формуле? Function
N)): —
округление происходит вверх
разделяться на чётное/нечётное?
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
planetaexcel.ru
1 2 1,25