Vba 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 дает более точные результаты при массовых операциях с округленными числами. Но в повседневной жизни чаще встречается обычное математическое округление.

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

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 to 1 Decimal

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:

Rounding to 1 decimal place with a variable example

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:

Rounding Up to Four Decimal Places using VBA

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!

automacro

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:

Rounding Up to the Nearest Integer using VBA

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 RoundDown

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:

VBA RoundDown to Nearest Integer

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 With Ceiling.Math

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

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

In cell B2 I have variable with the value 297.123 before doing calculations In VBA I would like to round this to 297.12. See the code below as to what I have tried. Both have evaluated fuel to 297. What am I doing wrong?

Dim fuel As Integer
Dim linecount As Long

linecount2 = 2

fuel = Format(ws.Cells(linecount2, 2), "0.00")
fuel = Round(ws.Cells(linecount2, 2), 2)

asked Nov 1, 2018 at 10:32

Anthony's user avatar

AnthonyAnthony

5321 gold badge8 silver badges24 bronze badges

Change Dim fuel As Long -> Dim fuel As Double

And both of your formula will work.

Dim fuel As Double
Dim linecount2 As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")


linecount2 = 2

fuel = Format(ws.Cells(linecount2, 2), "0.00")
fuel = Round(ws.Cells(linecount2, 2), 2)
fuel = WorksheetFunction.Round(ws.Cells(linecount2, 2), 2) '@suggested by T.M.


MsgBox "try"

End Sub
  • Dim Long is for Integers (whole numbers)
  • Dim Double is for numbers with decimal points (can store more decimal
    points, up to 15 digits)
  • Dim Single is for numbers with decimal points (store less decimal
    points, up to 7 digits)

answered Nov 1, 2018 at 10:40

Wizhi's user avatar

WizhiWizhi

6,3684 gold badges24 silver badges47 bronze badges

4

Содержание

  1. Округление значений в коде VBA в Excel. Функции int () и fix().
  2. Первый способ округления при помощью функции int().
  3. Второй способ округление при помощи функции fix()
  4. Как округлять до десятых и сотых (один и два знака после запятой, соответственно).
  5. Округление значений в коде VBA в Excel. Функции int () и fix().: 1 комментарий
  6. Добавить комментарий Отменить ответ
  7. Функции VBA для работы с числовыми значениями
  8. VBA Excel. Округление чисел (особенности)
  9. Оператор Round
  10. VBA Round, RoundUp, and RoundDown Functions
  11. VBA Round
  12. Syntax of the VBA Round Function
  13. VBA Round a Variable
  14. VBA Rounding Results
  15. VBA Round Cell Value
  16. VBA RoundUp Function
  17. VBA Coding Made Easy
  18. RoundUp to the Nearest Whole Number
  19. RoundUp Function Results
  20. VBA RoundDown Function
  21. RoundDown to the Nearest Whole Number
  22. RoundDown Function Results
  23. Other VBA Rounding Functions
  24. VBA Ceiling – RoundUp to A Specified Significance
  25. VBA RoundUp To Specified Significance Results
  26. VBA Floor – RoundDown to A Specified Significance
  27. VBA RoundDown to Specified Significance Results
  28. VBA Code Examples Add-in

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Функции VBA для работы с числовыми значениями

  • ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
  • Int() , Fix() и Round() позволяют по разному округлять числа:
    • Int() возвращает ближайшее меньшее целое;
    • Fix() отбрасывает дробную часть;
    • Round() округляет до указанного количества знаков после запятой.

    Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
    Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
    Т.е. если мы выполним такую строку кода

    MsgBox Round(2.505, 2)

    то результатом будет 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

    Источник

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

    Округление чисел в VBA Excel с помощью оператора Round и встроенной функции рабочего листа WorksheetFunction.Round. Особенности бухгалтерского и обычного округления.

    Оператор Round

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

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

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


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

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

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

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

    Источник

    VBA Round, RoundUp, and RoundDown Functions

    In this Article

    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:

    VBA Round a Variable

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

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

    VBA Rounding Results

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

    VBA Round Cell Value

    You can also round a cell value directly in VBA:

    VBA RoundUp Function

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

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

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

    ROUNDUP(Number, Digits) where:

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

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

    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!

    RoundUp to the Nearest Whole Number

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

    The result delivered:

    RoundUp Function Results

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

    VBA RoundDown Function

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

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

    ROUNDDOWN(Number, Digits) where:

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

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

    RoundDown to the Nearest Whole Number

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

    RoundDown Function Results

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

    Other VBA Rounding Functions

    VBA Ceiling – RoundUp to A Specified Significance

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

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

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

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

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

    VBA RoundUp To Specified Significance Results

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

    VBA Floor – RoundDown to A Specified Significance

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

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

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

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

    VBA RoundDown to Specified Significance Results

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

    VBA Code Examples Add-in

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

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

    Источник

Главная » Функции VBA »

28 Апрель 2011              129132 просмотров

  • 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.

Like this post? Please share to your friends:
  • Vba excel окрашивание ячейки
  • Vba excel окошко да нет
  • Vba excel окно сохранения
  • Vba excel окно с кнопками
  • Vba excel окно для ввода данных