Как взять целое число в excel vba
Арифметические операции в VBA: сложение, вычитание, умножение, деление и возведение в степень
Подробно рассмотрим то, как VBA выполняет такие арифметические операции, как сложение, вычитание, умножение, деление и возведение в степень, а также особые операции, такие как целочисленное деление и деление по модулю. Ниже, в таблице, представлены знаки операций, используемые при написании арифметических VBA-выражений.
Выражение - это значение либо группа значений, выражающая отдельное значение. Результат выражения - одно значение определенного типа данных. Знаки (обозначения) операций используются для действий над определенными значениями в выражениях. Для присваивания результата выражения переменной используется оператор присваивания (=), который сохраняет любое значение, представленное выражением справа от оператора присваивания в ячейке памяти, на которую ссылается переменная слева от этого оператора.
Во всех операциях приведенных ниже, оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Знак (+) используется для выполнения операции сложения. Слагаемые должны быть численными выражениями, строками, которые VBA может преобразовать в числа либо датами, с которыми также возможны арифметические действия.
1 . Sub Slozhenie()
2. 'Пример арифметического выражения со знаком "+"
3. Dim A1, A2, A3 As Integer 'объявление переменных
4. A1=1 'присваивание значения 1 переменной А1
5. A2=2 'присваивание значения 2 переменной А2
6. A3=A1+A2 'присваивание результата сложения переменной А3
7. MsgBox A3 'вывод А3 в диалоговом окне
Тип данных результата выражения сложения обычно тот же, что и наиболее точный тип в этом выражении за некоторыми исключениями. Все исключения из этого правила наглядно представлены в примерах.
Знак (-) используется для выполнения операции вычитания, а также для обозначения отрицательных чисел (когда ставится перед переменной или выражением и означает тоже самое, что и умножение на -1). Знак минуса, который помещают перед числом для обозначения того, что число отрицательное, называют унарным минусом.
Для определения типа данных результата выражения вычитания VBA следует тем же правилам, что и для выражений, использующих знак операции сложения, но имеются два дополнительные правила.
Правило 1. Если в выражении вычитания один из операндов является типом Date, то и результат выражения будет иметь тип Date.
Правило 2. Если в выражении вычитания оба операнда являются типом Date, то результат выражения будет иметь тип Double.
1 . Sub Vychitanie()
2. 'Пример арифметического выражения со знаком "-"
3. Dim D1, D2 As Date 'объявление переменных
4. D1=Now 'присваивание значения текущей даты переменной D1
5. D2=Now-5 'присваивание значения даты переменной D2
6. MsgBox TypeName(D2), vbOKOnly, "Now-5"
7. MsgBox TypeName(D1-D2), vbOKOnly, "D1-D2"
Знак (*) используется для выполнения операции умножения, результатом этой операции является произведение операндов. Для определения типа данных результата выражения умножения VBA использует те же правила, что и для выражений, использующих сложение. В выражениях умножения все переменные Variant, содержащие значения типа Date, преобразуются в численные значения.
1 . 'Пример арифметических выражений со знаком "*"
2. 4*10 'умножение 4 на 10
3. MyVar*2 'умножение MyVar на 2
4. MyVar*OtherVar 'умножение MyVar на OtherVar
Знак (/) используется для выполнения операции деления, этот знак называют знаком деления действительных чисел. В выражениях деления один операнд делится на другой, а результатом деления является частное.
1 . 'Пример арифметических выражений со знаком "/"
2. 10/4 'деление 10 на 4
3. MyVar/2 'деление MyVar на 2
4. MyVar/OtherVar 'деление MyVar на OtherVar
Если любой операнд в выражении деления имеет значение Null, то результатом выражения также будет Null. Тип данных в выражениях деления действительных чисел обычно Double, но есть и исключение.
Если в выражении деления оба операнда имеют тип Integer или Single, то результат выражения деления имеет тип Single. Если результат переполняет диапазон для типа Single, то VBA преобразует его в тип Double.
Знак (\) используется для выполнения операции целочисленного деления, при котором результатом деления всегда является целое число без дробной части. VBA не округляет частное целочисленного деления, а просто укорачивает его до целого числа, отбрасывая дробную часть.
Тип данных результата выражения целочисленного деления - либо Integer, либо Long. VBA использует наименьший тип данных, который соответствует результату выражения.
1 . 'Пример арифметических выражений со знаком "\"
2. 10\4 'деление 10 на 4; возвращает значение 2
3. MyVar\2 'деление MyVar на 2
4. MyVar\OtherVar 'деление MyVar на OtherVar
Деление по модулю
Знак (Mod) используется для выполнения операции деления по модулю. При делении по модулю выражение возвращает только остаток от деления как целое.
1 . 'Пример арифметических выражений со знаком "Mod"
2. 8 Mod 2 'возвращает значение 0;
3. 5.1 Mod 3 'возвращает значение 2;
4. 6 Mod MyVar 'если MyVar содержит 3, возвращает 0
Доступное для понимания объяснение этой математической операции приведено на одном из форумов программистов . Приведу цитату оттуда: "представь, что есть полная 50л канистра и 3л банка. И ты начинаешь вычерпывать из канистры банкой воду (набирать можно только полную банку). 48л вычерпал, осталось 2 литра. Это и есть остаток от деления 50 на 3 по модулю." Другими словами 50 Mod 3 возвращает 2.
Тип данных результата выражения деления по модулю - это Integer или Long. VBA использует наименьший тип, который подходит для результата выражения.
Возведение в степень
Знак (^) используется для выполнения операции возведения в степень числа или выражения. Показатель степени показывает, сколько раз число или выражение должно быть умножено на само себя.
Приведенные ниже математические функции vba позволяют производить тригонометрические вычисления (нахождение sin, cos и так далее), обрабатывать числовые значения на предмет получения целой части от дробного, округления или генерации случайных чисел.
Если переданный параметр для следующих математических функций vba не будет распознан как числовое значение, возникнет ошибка.
ABS ( num) – Функция возвращает значение числа по модулю.
Exp ( num) – Функция позволяет получить значение экспоненты, передаваемый параметр (максимальное значение ровно 709 782712893) является степенью, в которую нужно возвести экспоненту. Соответственно, если параметр равен 1, то мы получить чистое значение экспоненты.
Fix ( num) – Функция возвращает целую часть от переданного дробного значения. Если переданное значение является отрицательным, то возвращается ближайшее отрицательное целое число, большее, либо равное указанному.
Int ( num) – Математическая функция vba возвращает целую часть от переданного дробного значения. Если переданное значение является отрицательным, то возвращается ближайшее отрицательное целое число, меньшее, либо равное указанному.
Rnd (random) – Функция вернет число, входящее в диапазон от 0 до 1 в случайном порядке, при этом, само число 1 не входит в диапазон, а 0 – входит. Перед вызовом функции надо прописывать конструкцию Randomize, которая отвечает за включение генератора случайных чисел.
В зависимости от значения переданного параметра random, данная математическая функция vba работает следующим образом:
- Параметр отсутствует или больше 0 - Генерация следующего случайного числа в последовательности. Повторный запуск программы генерирует аналогичную последовательность.
- Параметр меньше 0 – Происходит генерация одного и того же числа, опираясь на переданный аргумент.
- Параметр равен 0 - Происходит генерация одного и того же числа, опираясь на число из предыдущего вызова.
Round (num, [accr]) - Округление заданного числа (num) до заданной точности (accr).
Sgn (num) – Данная математическая функция vba позволяет узнать знак числа, переданного как аргумент. Функция vba вернет следующие значения:
- 0 – Число равно 0
- -1 – Число является отрицательным
- 1 – Число является положительным.
Sql (num) – Квадратный корень из переданного числового параметра num.
Следующие математические функции vba являются тригонометрическими. В качестве параметра для большинства указывается значение угла в радианах. Для перевода градусов в радианы используется формула:
Угол (в радианах) = угол (в градусах) * pi / 180, где pi = 3.14159265358979
Atn (par) – Арктангенс переданного числа (угол в радианах), функция вернет значение в диапазоне от -pi/2 до pi/2 радиан
Cos (par) - Косинус переданного числа (угол в радианах), функция вернет значение в диапазоне от -1 до 1.
Sin (par) - Синус переданного числа (угол в радианах), функция вернет значение в диапазоне от -1 до 1.
Tan (par) - Тангенс переданного числа (угол в радианах).
Log (par) – Натуральный логарифм переданного числа.
Я не буду приводить примеры для всех приведенных выше математических функций VBA, а приведу только один пример кода для функций sin и cos. Откройте редактор VBA (комбинация клавиш Alt + F11), добавьте в проект новый модуль (меню Insert/Module). В моем случае имя модуля – module3, в редакторе кода для заданного модуля пропишите следующие строки:
В данном случае мы создаем новый документ Word, добавляем в него форматированный (объект Font) текст, содержащий параметры значений для синуса и косинуса. Я выбрал диапазон значений от 0 до 360 градусов, используя цикл vba do…loop.
Спасибо за внимание. Автор блога Владимир Баталий
Подробно рассмотрим то, как VBA выполняет такие арифметические операции, как сложение, вычитание, умножение, деление и возведение в степень, а также особые операции, такие как целочисленное деление и деление по модулю. Ниже, в таблице, представлены знаки операций, используемые при написании арифметических VBA-выражений.
Выражение - это значение либо группа значений, выражающая отдельное значение. Результат выражения - одно значение определенного типа данных. Знаки (обозначения) операций используются для действий над определенными значениями в выражениях. Для присваивания результата выражения переменной используется оператор присваивания (=), который сохраняет любое значение, представленное выражением справа от оператора присваивания в ячейке памяти, на которую ссылается переменная слева от этого оператора.
Во всех операциях приведенных ниже, оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Сложение
Знак (+) используется для выполнения операции сложения. Слагаемые должны быть численными выражениями, строками, которые VBA может преобразовать в числа либо датами, с которыми также возможны арифметические действия.
Тип данных результата выражения сложения обычно тот же, что и наиболее точный тип в этом выражении за некоторыми исключениями. Все исключения из этого правила наглядно представлены в примерах.
Вычитание
Знак (-) используется для выполнения операции вычитания, а также для обозначения отрицательных чисел (когда ставится перед переменной или выражением и означает тоже самое, что и умножение на -1). Знак минуса, который помещают перед числом для обозначения того, что число отрицательное, называют унарным минусом.
Для определения типа данных результата выражения вычитания VBA следует тем же правилам, что и для выражений, использующих знак операции сложения, но имеются два дополнительные правила.
Правило 1. Если в выражении вычитания один из операндов является типом Date, то и результат выражения будет иметь тип Date.
Правило 2. Если в выражении вычитания оба операнда являются типом Date, то результат выражения будет иметь тип Double.
Умножение
Знак (*) используется для выполнения операции умножения, результатом этой операции является произведение операндов. Для определения типа данных результата выражения умножения VBA использует те же правила, что и для выражений, использующих сложение. В выражениях умножения все переменные Variant, содержащие значения типа Date, преобразуются в численные значения.
Деление
Знак (/) используется для выполнения операции деления, этот знак называют знаком деления действительных чисел. В выражениях деления один операнд делится на другой, а результатом деления является частное.
Если любой операнд в выражении деления имеет значение Null, то результатом выражения также будет Null. Тип данных в выражениях деления действительных чисел обычно Double, но есть и исключение.
Если в выражении деления оба операнда имеют тип Integer или Single, то результат выражения деления имеет тип Single. Если результат переполняет диапазон для типа Single, то VBA преобразует его в тип Double.
Целочисленное деление
Знак (\) используется для выполнения операции целочисленного деления, при котором результатом деления всегда является целое число без дробной части. VBA не округляет частное целочисленного деления, а просто укорачивает его до целого числа, отбрасывая дробную часть.
Тип данных результата выражения целочисленного деления - либо Integer, либо Long. VBA использует наименьший тип данных, который соответствует результату выражения.
Деление по модулю
Знак (Mod) используется для выполнения операции деления по модулю. При делении по модулю выражение возвращает только остаток от деления как целое.
Доступное для понимания объяснение этой математической операции приведено на одном из форумов программистов. Приведу цитату оттуда: "представь, что есть полная 50л канистра и 3л банка. И ты начинаешь вычерпывать из канистры банкой воду (набирать можно только полную банку). 48л вычерпал, осталось 2 литра. Это и есть остаток от деления 50 на 3 по модулю." Другими словами 50 Mod 3 возвращает 2.
Тип данных результата выражения деления по модулю - это Integer или Long. VBA использует наименьший тип, который подходит для результата выражения.
Возведение в степень
Знак (^) используется для выполнения операции возведения в степень числа или выражения. Показатель степени показывает, сколько раз число или выражение должно быть умножено на само себя.
Обязательный аргумент числоаргумент представляет собой значение типа Double или любое допустимое числовое выражение. Если число содержит значение NULL, возвращается NULL.
Функции Int и Fix удаляют дробную часть числа и возвращают полученное целое значение.
Различие между функциями Int и Fix состоит в том, что при отрицательном значении числа функция Int возвращает первое отрицательное целое число, не превышающее число, а функция Fix — первое отрицательное целое число, которое больше числа или равно ему. Например, функция Int преобразует -8,4 в -9, а Fix преобразует -8,4 в -8.
Функция Fix( число) вычисляется следующим образом:
Примеры запросов
ВЫБЕРИТЕ int ([Скидка]) как Выражение1 из Продуктсалес;
Удаляет дробную часть всех значений в поле "скидка" и возвращает результирующие целые значения. Для отрицательных дробей "int" возвращает первое отрицательное целое число, которое меньше или равно. Например, для значения скидки "-223,20" возвращаемое целое число будет равно-224,00.
Выберите команду Fix ([Скидка]) как Выражение1 из Продуктсалес;
Удаляет дробную часть всех значений в поле "скидка" и возвращает результирующие целые значения. Для отрицательных дробей "Fix" возвращает первое отрицательное целое число, большее или равное. Например, для значения скидки "-223,20" возвращаемое целое число будет равно-223,00.
Пример VBA
Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
В данном примере показано, как функции Int и Fix возвращают целые части чисел. Если значением аргумента является отрицательное число, функция Int возвращает первое отрицательное целое число, не превышающее его, а функция Fix — первое отрицательное целое число, которое больше этого значения или равно ему.
Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).
Visual Basic предоставляет несколько числовых типов данных для обработки чисел в различных представлениях. Visual Basic supplies several numeric data types for handling numbers in various representations. Целочисленные типы представляют только целые числа (положительные, отрицательные и нулевые), а Нецелочисленные типы — числа с целой и дробной частями. Integral types represent only whole numbers (positive, negative, and zero), and nonintegral types represent numbers with both integer and fractional parts.
Для таблицы, показывающей параллельное сравнение типов данных Visual Basic, см. в разделе типы данных. For a table showing a side-by-side comparison of the Visual Basic data types, see Data Types.
Целочисленные типы Integral Numeric Types
Целочисленные типы данных — это те, которые представляют только числа без дробных частей. Integral data types are those that represent only numbers without fractional parts.
Производительность Performance
Арифметические операции выполняются быстрее с целочисленными типами, чем с другими типами данных. Arithmetic operations are faster with integral types than with other data types. Они работают быстрее с типами Integer и UInteger в Visual Basic. They are fastest with the Integer and UInteger types in Visual Basic.
Большие целые числа Large Integers
Если необходимо хранить целое число, большее, чем Integer тип данных, можно использовать Long тип данных. If you need to hold an integer larger than the Integer data type can hold, you can use the Long data type instead. Long переменные могут содержать числа от-9223372036854775808 до 9 223 372 036 854 775 807. Long variables can hold numbers from -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807. Операции с Long немного медленнее, чем в Integer . Operations with Long are slightly slower than with Integer .
Если вам нужны еще большие значения, можно использовать тип данных Decimal. If you need even larger values, you can use the Decimal Data Type. Можно хранить числа от-79,228,162,514,264,337,593,543,950,335 до 79,228,162,514,264,337,593,543,950,335 в переменной Decimal , если не используются десятичные разряды. You can hold numbers from -79,228,162,514,264,337,593,543,950,335 through 79,228,162,514,264,337,593,543,950,335 in a Decimal variable if you do not use any decimal places. Однако операции с числами Decimal значительно медленнее, чем с любым другим числовым типом данных. However, operations with Decimal numbers are considerably slower than with any other numeric data type.
Небольшие целые числа Small Integers
Если не требуется полный диапазон Integer типа данных, можно использовать Short тип данных, который может содержать целые числа от-32 768 до 32 767. If you do not need the full range of the Integer data type, you can use the Short data type, which can hold integers from -32,768 through 32,767. Для наименьшего диапазона целых чисел SByte тип данных содержит целые числа от-128 до 127. For the smallest integer range, the SByte data type holds integers from -128 through 127. При наличии очень большого числа переменных, содержащих небольшие целые числа, среда CLR иногда может хранить Short и SByte переменные более эффективно и экономить потребление памяти. If you have a very large number of variables that hold small integers, the common language runtime can sometimes store your Short and SByte variables more efficiently and save memory consumption. Однако операции с Short и SByte несколько медленнее, чем в Integer . However, operations with Short and SByte are somewhat slower than with Integer .
Целые числа без знака Unsigned Integers
Если известно, что переменная никогда не должна содержать отрицательное число, можно использовать неподписанные типы Byte , UShort , UInteger и ULong . If you know that your variable never needs to hold a negative number, you can use the unsigned types Byte , UShort , UInteger , and ULong . Каждый из этих типов данных может содержать положительное целое число в два раза больше, чем соответствующий знаковый тип ( SByte , Short , Integer и Long ). Each of these data types can hold a positive integer twice as large as its corresponding signed type ( SByte , Short , Integer , and Long ). С точки зрения производительности каждый тип без знака является точно таким же эффективным, как и соответствующий тип со знаком. In terms of performance, each unsigned type is exactly as efficient as its corresponding signed type. В частности, UInteger предоставляет общий доступ к Integer отличие наиболее эффективного из всех простейших числовых типов данных. In particular, UInteger shares with Integer the distinction of being the most efficient of all the elementary numeric data types.
Нецелочисленные числовые типы Nonintegral Numeric Types
Нецелочисленные типы данных — это значения, представляющие числа с целой и дробной частями. Nonintegral data types are those that represent numbers with both integer and fractional parts.
Decimal не является типом данных с плавающей запятой. Decimal is not a floating-point data type. Decimal числа имеют двоичное целочисленное значение и целочисленный коэффициент масштабирования, указывающий, какая часть значения является десятичной дробью. Decimal numbers have a binary integer value and an integer scaling factor that specifies what portion of the value is a decimal fraction.
Для денежных значений можно использовать Decimal переменные. You can use Decimal variables for money values. Преимущество — точность значений. The advantage is the precision of the values. Тип данных Double является более быстрым и требует меньше памяти, но он подвергается ошибкам округления. The Double data type is faster and requires less memory, but it is subject to rounding errors. Тип данных Decimal сохраняет полную точность до 28 десятичных разрядов. The Decimal data type retains complete accuracy to 28 decimal places.
Числа с плавающей запятой ( Single и Double ) имеют большие диапазоны, чем Decimal числа, но могут подвергаться ошибкам округления. Floating-point ( Single and Double ) numbers have larger ranges than Decimal numbers but can be subject to rounding errors. Типы с плавающей запятой поддерживают меньше значащих цифр, чем Decimal , но могут представлять значения большей величины. Floating-point types support fewer significant digits than Decimal but can represent values of greater magnitude.
Нецелочисленные числовые значения можно выразить как Мммии, в котором MMM является мантиссаом (значащими цифрами), а ие — экспонентой (степенью 10). Nonintegral number values can be expressed as mmmEeee, in which mmm is the mantissa (the significant digits) and eee is the exponent (a power of 10). Наибольшие положительные значения нецелочисленных типов — 7.9228162514264337593543950335 E + 28 для Decimal , 4028235E E + 38 для Single и 1.79769313486231570 E + 308 для Double . The highest positive values of the nonintegral types are 7.9228162514264337593543950335E+28 for Decimal , 3.4028235E+38 for Single , and 1.79769313486231570E+308 for Double .
Производительность Performance
Double является наиболее эффективным из типов данных дробной части, так как процессоры на текущих платформах выполняют операции с плавающей запятой с двойной точностью. Double is the most efficient of the fractional data types, because the processors on current platforms perform floating-point operations in double precision. Однако операции с Double не так быстро, как с целочисленными типами, такими как Integer . However, operations with Double are not as fast as with the integral types such as Integer .
Небольшие величины Small Magnitudes
Для чисел с наименьшей возможной величиной (ближайшее к 0) Double переменные могут содержать числа в виде мелких, например, 4.94065645841246544 E-324 для отрицательных значений и 4.94065645841246544 E-324 для положительных значений. For numbers with the smallest possible magnitude (closest to 0), Double variables can hold numbers as small as -4.94065645841246544E-324 for negative values and 4.94065645841246544E-324 for positive values.
Небольшие дробные числа Small Fractional Numbers
Если не требуется полный диапазон Double типа данных, можно использовать Single тип данных, который может содержать числа с плавающей запятой в диапазоне от-4028235E E + 38 до 4028235E E + 38. If you do not need the full range of the Double data type, you can use the Single data type, which can hold floating-point numbers from -3.4028235E+38 through 3.4028235E+38. Наименьшими значениями для Single переменных являются-1.401298 E-45 для отрицательных значений и 1.401298 E-45 для положительных значений. The smallest magnitudes for Single variables are -1.401298E-45 for negative values and 1.401298E-45 for positive values. При наличии очень большого числа переменных, содержащих небольшие числа с плавающей запятой, среда CLR может иногда сохранять Single переменные более эффективно и экономить потребление памяти. If you have a very large number of variables that hold small floating-point numbers, the common language runtime can sometimes store your Single variables more efficiently and save memory consumption.
- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int() , Fix() и Round() позволяют по разному округлять числа:
- Int() возвращает ближайшее меньшее целое;
- Fix() отбрасывает дробную часть;
- Round() округляет до указанного количества знаков после запятой.
Однако Round может вернуть не совсем ожидаемый результат. Если мы выполним такую строку кода
MsgBox Round(2.505, 2)
то результатом будет 2,5, хотя предполагалось получить 2,51. Поэтому порой для округления лучше использовать Format :
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
Читайте также: