Макрос для excel округление

Округление чисел в 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. Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
  2. Сумма округленных чисел: 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. Сумма исходных чисел: 1.5 + 2.5 + 3.5 +4.5 = 12
  2. Сумма округленных чисел: 2 + 3 + 4 + 5 = 14

Результат очевиден — в данном случае сумма округленных чисел на 2 единицы больше суммы исходных.

Исходя из этого результата, можно сделать вывод, что «банковское» округление с помощью оператора Round дает более точные результаты при массовых операциях с округленными числами. Но в повседневной жизни чаще встречается обычное математическое округление.

Выбирайте округление, которое вам больше подходит для решаемой задачи!

Очень часто при создании алгоритмов подсчета тех или иных значений полученные результаты имеют значение десятичной дроби с большим количеством знаков после запятой. Работать с такими данными и отображать их не очень удобно и некрасиво. 
Рассмотрим какими функциями следует округлять данные в коде 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 нет. Удачи Вам в изучении программы

 

andre27

Пользователь

Сообщений: 11
Регистрация: 16.08.2016

Задача такая. Есть большой прайс, но при выгрузке из бух программы в Excel файле в колонке price стоят цены, с визуальным отображением двух чисел после запятой, но фактическое значение в ячейках — три знака после запятой. Нужно округлить все цены до двух знаков после запятой, но сделать это не через формулу ОКРУГЛ, а через фактическую замену значений в ячейках, потому что потом этот файл будет импортироваться на сайт.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#2

08.12.2016 14:27:44

Выделить диапазон, запустить макрос

Код
Sub Round2()
Dim cl As Range
For Each cl In Selection.Cells
    cl.Value = Round(cl.Value, 2)
Next
End Sub

Согласие есть продукт при полном непротивлении сторон.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Файл -Параметры -Дополнительно -Точность как на экране. Начиная с 2013 — Файл -Параметры -Дополнительно -Задать указанную точность. И никаких макросов не надо.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

С этим нужно аккуратно. Точность как на экране применится ко всей книге.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#5

08.12.2016 14:46:06

Вить, а я так понял, что это как раз и нужно и это оптимальный вариант, потому что:

Цитата
andre27 написал:
потом этот файл будет импортироваться на сайт

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

andre27

Пользователь

Сообщений: 11
Регистрация: 16.08.2016

Не )) Про точность как на экране я в курсе, это при ручной обработке нормально, а здесь нужен именно макрос, т.к. сам файл будет обрабатываться дальше и выгружаться на сайт в автоматическом режиме. Причем макросу нужно указать колонку со значениями, а то он там все цифры в остальных колонках перелопатит.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#7

08.12.2016 15:05:33

Цитата
andre27 написал:  а здесь нужен именно макрос

у нас есть их! В сообщении #2

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#8

08.12.2016 15:35:50

Если устраивает то, что отображается в ячейке, то можно так:

Код
Range("A1").Value = CDbl(Range("A1").Text)
 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#9

08.12.2016 15:43:09

Цитата
andre27 написал:
в колонке price стоят цены

Можно автоматически найти этот столбец

Код
Sub Andre()
Dim c As Range
  Set c = Cells.Find("price", , xlValues, xlWhole, MatchCase:=False)
  If c Is Nothing Then
    MsgBox "Не найдена ячейка 'price'", vbExclamation
    Exit Sub
  End If
  With Range(c.Offset(1), Cells(Rows.Count, c.Column).End(xlUp))
    .Value = Evaluate(Replace("INDEX(ROUND(~,2),)", "~", .Address(, , Application.ReferenceStyle)))
  End With
End Sub
 

abricos29

Пользователь

Сообщений: 86
Регистрация: 24.02.2017

#10

12.01.2018 11:22:23

Цитата
Sanja написал:
Выделить диапазон, запустить макрос:

Код
Sub Round2()
Dim cl As Range
For Each cl In Selection.Cells 
cl.Value = Round(cl.Value, 2)
Next
End Sub

Тоже понадобился подобный макрос, спасибо, позаимствовал ваше решение, немного дополнив его(в моем случае в диапазоне попадались пустые ячейки, что приводило к неразберихе). Прикрутил выбор диапазона мышью и посадил на кнопку в панели надстройки. Может кому пригодится. Чтобы округлять до нужного Вам значения в данной строчке поменять цифру на нужный разряд            

Код
cl.Value = Round(cl.Value, 2)

Код xml-разметки

Код
<?xml version="1.0" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Init_RibVar_Custom">
   <ribbon>
      <tabs>
         <tab id="excel-vba" label="Тестовая">         
            <group id="groupe_454" label="              ">
               <button id="button_167" size="large" 
               screentip="Что делает макрос__________________________________________________________________________________________" supertip="1. Округляет выбранный диапазон значений до сотых,
2. Можно округлять несвязанные дипазоны(выделенные через Ctrl в разных частях листа)" 
               imageMso="ChartTypeOtherInsertGallery" 
               label="Округлить
до сотых" 
               onAction="Round2"/>
            </group>
            
         </tab>
      </tabs>
   </ribbon>
</customUI>
Код
Sub Round2(control As IRibbonControl)
Dim cl As Range
Dim diapazon As Range

On Error Resume Next
Set diapazon = Application.InputBox("Выделите мышкой диапазон значений для округления:", "", "", Type:=8)

If diapazon Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран
            MsgBox "Отмена выполнения", vbCritical, "Данные не были выбраны!"
            Exit Sub
        diapazon.Clear 'очищаем ячейки
End If

        For Each cl In diapazon
        If cl.Value = "" Then GoTo Jump
            cl.Value = Round(cl.Value, 2)
Jump:
        Next

End Sub

Прикрепленные файлы

  • Rounder.xlam (18.76 КБ)

Изменено: abricos2912.01.2018 11:27:55

Public Function RoundX(ByVal numberToRound As Double, _

ByVal roundBase As Integer)

RoundX = Round(numberToRound / roundBase + 0.5, 0) * roundBase

result = (numberToRound roundBase) * roundBase

If result Mod roundBase > 0 Then result = result + roundBase

If result Mod roundBase > 0 Then result = result + roundBase

‘if >>>numberToRound<<< mod roundBase > 0 then result = result + roundBase

End Function

Private Sub ResultEvent()

intMin = 123

ResultX = RoundX(intMin, 15)

End Sub

Есть функция, но работает она несколько неточно, задача в следующем — округлить до десятков, т.е. есть 3861 + 40% = 5 405,4:

Public Function RoundX(numberToRound As Double, roundBase As Integer)

RoundX = Round(numberToRound / roundBase + 0.5, 0) * roundBase

End Function

Private Sub ResultEvent()

ResultX = RoundX(5405.4, 10)

End Sub

Получили: 5410, тут все правильно. Переходим к следующему числу: 8700+40%=12180, функция тут выдает 12190, что неверно, ведь верно 12180. Сталкивался ли кто с универсальным решением данной задачи? Которое бы округляло до нужных десятков, сотен, тысяч…. всегда вверх. В случае с 8700 некоторое решение: вместо 0,5 подставлять 0,49999, но оно опять же, временное и в некоторых случаях при получении числа 5400.2, ставит 5400, что опять неверно, нужно 5410.

> kiv-1980, > … Которое бы округляло до нужных десятков, сотен, тысяч…. всегда вверх.

result = ( numberToRound roundBase ) * roundBase

if result mod roundBase > 0 then result = result + roundBase

Обшыбка. В условии не та величина if >>>numberToRound<<< mod roundBase > 0 then result = result + roundBase

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

Макрос округления массива (значений в заданном столбце)

  • Разное

Макрос предназначен для округления значений в заданном столбце массива, с заданной точностью и направлением округления

Sub Пример_Округления_Массива()
    Dim arr As Variant
 
    ' считываем данные из диапазона ячеек в массив
    arr = Range("a2:c20").value
 
    ' переводим весь второй столбец в числа (на всякий случай)
    For i = LBound(arr) To UBound(arr)
        arr(i, 2) = Val(Replace(arr(i, 2), ",", "."))
    Next i
 
    ' значения во втором столбце массива округляем до нуля знаков после запятой в бОльшую сторону
    RoundArray arr, 2, 0, 1
 
    ' выводим результат на 4 столбца правее
    Range("a2:c20").offset(, 4).value = arr
End Sub

Код функции округления:

Sub RoundArray(ByRef arr As Variant, ByVal Column&, ByVal DigitsAfterDecimal&, Optional ByVal RoundMode& = 0)
    ' производит округление всех значений в столбце Column& двумерного массива arr
    ' до заданного количества цифр после запятой DigitsAfterDecimal&
    ' RoundMode& - режим округления (0 - до ближайшего, 1 - в бОльшую сторону, 2 - в меньшую сторону)

    On Error Resume Next
    Const stp& = 65000        ' максимум столько чисел принимает функция листа ROUND одновременно
    Dim st_block&, end_block&, i&, rarr, shift&
 
    For st_block& = LBound(arr) To UBound(arr) Step stp&
        end_block& = st_block& + stp& - 1: If end_block& > UBound(arr) Then end_block& = UBound(arr)
        shift& = st_block& - 1
        ReDim rarr(st_block& - shift& To end_block& - shift&)    ' формируем массив размером не более 65 тыс элементов
        For i = st_block& To end_block&: rarr(i - shift&) = arr(i, Column&): Next i      ' копируем в него данные

        ' потом округляем массив, и заносим результат обратно в исходный массив
        Select Case RoundMode&
            Case 0: rarr = Application.Round(rarr, DigitsAfterDecimal&)
            Case 1: rarr = Application.RoundUp(rarr, DigitsAfterDecimal&)
            Case 2: rarr = Application.RoundDown(rarr, DigitsAfterDecimal&)
        End Select
 
        ' округленные числа - обратно в исходный массив arr
        For i = st_block& To end_block&: arr(i, Column&) = rarr(i - shift&): Next i
    Next st_block&
End Sub
  • 8445 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.


You can use the RoundUp method in VBA to round values up.

This function uses the following basic syntax:

Sub RoundUpValue()
    Range("B1") = WorksheetFunction.RoundUp(Range("A1"), 0)
End Sub

This particular example will round up the value in cell A1 to the nearest whole number and display the result in cell B1.

Note that the second argument in the RoundUp method specifies the number of digits to round where:

  • -3 rounds up to the nearest thousand
  • -2 rounds up to the nearest hundred
  • -1 rounds up to the nearest ten
  • 0 rounds up to the nearest whole number
  • 1 rounds up to the nearest tenth (one decimal place)
  • 2 rounds up to the nearest hundredth (two decimal places)
  • 3 rounds up to the nearest thousandth (three decimal places)

And so on.

The following examples show how to use the RoundUp method in practice.

Example 1: Round Up to Nearest Whole Number in VBA

We can create the following macro to round up the value in cell A1 to the nearest whole number and display the result in cell B1:

Sub RoundUpValue()
    Range("B1") = WorksheetFunction.RoundUp(Range("A1"), 0)
End Sub

When we run this macro, we receive the following output:

Notice that the value 1,432.78 in cell A1 has been rounded up to the nearest whole number of 1,433 in cell B1.

Example 2: Round Up to Nearest Hundred in VBA

We can create the following macro to round up the value in cell A1 to the nearest hundred and display the result in cell B1:

Sub RoundUpValue()
    Range("B1") = WorksheetFunction.RoundUp(Range("A1"), -2)
End Sub

When we run this macro, we receive the following output:

Notice that the value 1,432.78 in cell A1 has been rounded up to the nearest hundred of 1,500 in cell B1.

Example 3: Round Up to Nearest Tenth in VBA

We can create the following macro to round up the value in cell A1 to the nearest tenth (i.e. one decimal place) and display the result in cell B1:

Sub RoundUpValue()
    Range("B1") = WorksheetFunction.RoundUp(Range("A1"), 1)
End Sub

When we run this macro, we receive the following output:

Notice that the value 1,432.78 in cell A1 has been rounded up to the nearest tenth of 1,432.8 in cell B1.

Note: You can find the complete documentation for the VBA RoundUp method here.

Additional Resources

The following tutorials explain how to perform other common tasks in VBA:

VBA: How to Write SUMIF and SUMIFS Functions
VBA: How to Write COUNTIF and COUNTIFS Functions
VBA: How to Write AVERAGEIF and AVERAGEIFS Functions

Функция ОКРУГЛ (ROUND) в Excel

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

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

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

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

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

​Функция ОКРУГЛ в 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, 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​Функция ОКРУГЛ в Excel
  2. ​ временах (от 0-2​ места», xlWhole​Похоже без цикла​ до себя самого.​ от того, как​ КОПИИ книги.​ ячейку A1 и​ макросом, может полностью​ для пользовательской функции​Функция ОКРУГЛ в Excel
  3. ​ или после запятой.​ ОКРУГЛВВЕРХ с помощью​ As Double​ = 0) As​ не 3, как​ Полез в Сеть​ 1,27.​ 2,25 3 3​ сек при использовании​End With​ никак.​Функция ОКРУГЛ в Excel

​Но если очень​

office-guru.ru

Округление до целого числа функциями ОКРУГЛ и 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 прописан код​ числа в ячейке​: как вариант:​

код VBA.

​If N =​b = Fix(N)​

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

Функция ОКРУГЛ и 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е, использовался​Функция ОКРУГЛ в 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​

exceltable.com

округление 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)​

​ 1).End(xlUp))​ xlWhole​

​ZVI​​ части)​

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

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

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

​NewStudent07​

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

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

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

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

​With Rng​

​ .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)=» &​ ‘bias’, ошибку, набегающую​
​ 1.26 ; 1.265​ они заканчивались на​

​Михаил С.​​ 0)​ места», 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)=» &​Вот такие интересные​ 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​

​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 и​ Данное значение присваиваю​

​ то у меня​​ :-)​

​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 и 5​Cells(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 = 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​
​ внимательный :({/post}{/quote}​ числа кратного 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. Справки -​Казанский​
​ медленнее.{/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,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​ с большим числом​

​ часть.​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 — (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​ случае нужно еще​

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 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​С уважением, Александр.​

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 неявно​ на «часть места»​ytk5kyky​Set Rng =​ 0,005 коробки…. Не​ поменять формат ячеек​ два числа 858,52+814,53=комп.выдает​ меня не работает.​ видно, при применении​ затем округляет полученный​
​ As Integer =​ покрутить Феликс !​’ Функция, аналогичная​ естественной убыли товаров!​ была погрешности в​ компьютерами уже 25​Igor_Tr​

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

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

CyberForum.ru

Не правильно работает функция 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()​: как вывести параметр​ не округлялось, т.к​В меню Сервис​

CyberForum.ru

Округление числа до 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, и​

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 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​

​Dim Rng As​
​ — 2)​

​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, умножь​
​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​ без каких-либо изменений.​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​

​ 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​

Студворк — интернет-сервис помощи студентам

Вот уже второй день, по просьбам трудящихся, пытаюсь понять, как сделать простейший макросн на округление

в двух словах алгоритм работы:

в выделенной ячейке у нас формула, допустим «=100*1,043*1,077*1,014», на выходе дает какоето значение
в данном примере 113,9037

но нам надо, чтобы это полученное число, в последующих изчислениях считалось округленное до двух знаков
тоесть 113,90 (до копеек округляем)

тоесть мне надо чтобы нажатием горячей клавиши, мое «=100*1,043*1,077*1,014» или любая другая формула
превратилось в
«=ОКРУГЛ(100*1,043*1,077*1,014;2)»

последний этап до которого я самостоятельно дошел был:

Visual Basic
1
2
3
4
5
6
Dim F As String
 
F = ActiveCell.Formula
 
 
 ActiveCell.Formula = "=ROUND(" + F + ";2)"

было похоже пару раз, на то что работало… но в итоге всетаки косяк какойто и нормально ничего не работает…

я вижу как минимум одну проблему — из скопированной ячейки берется знак «=», который будет в центре формулы явно лишний

я вот прямо вижу что решение проблемы очень простое, но совсем незнаком с синтаксисом ВБ

подскажите, как организовать округление одним макросом?

Понравилась статья? Поделить с друзьями:
  • Макрос в microsoft office word 2007
  • Макрос для excel на изменение цвета ячейки
  • Макрос в excel чтобы скрыть строку
  • Макрос для excel на python
  • Макрос в excel чтобы добавить строки