Vba excel выделить дробную часть
Визуально все меняется, в ячейке действительно "1.25", а не "1,25"
Значение из ячейки требуется подтянуть в документ xml, формируймый макросом из excel, и вот туда ставится "1,25", т.е. системным разделителем является запятая не смотря на настройки
решил проблему так (мне нужен 1 знак после запятой)
но данный способ не подойдет, например, для числа 0,98
что еще можно придумать? лучше было бы конечно что-то поменять в настройках, у меня 2010 офис, поиск в интернете прямого ответа не дал, только то, что я описал в начале
вариант 1. поменять глобально в настройках Windows
вариант 2. задать руками в настройках MS Excel - "Файл" - "Параметры Excel" - "Дополнительно"
убрать галочку с "Использовать системные разделители" и задать нужный вручную
вариант 4. обработать готовый XML файл после выгрузки
p.s.
ничего не проверял.
каждый из вариантов имеет свои достоинства и недостатки. выбирать исходя из конкретных условий.
добавлено.
ваш код лучше не использовать.
на крайний случай можете попробовать такой "хак"
Вариант 1 - нет полномочий
Вариант 2 - пробовал, не помогло
Вариант 3 - тут вроде все нормально
Вариант 4 - возможно, не могли бы дать ссылку на пример?
Вариант 4 - возможно, не могли бы дать ссылку на пример? |
Но плохо не это, плохо то, что непонятно, какие данные у Вас могут быть в XML
допустим, там могут быть строки, содержащие запятые. Их тоже заменять на точки? Универсальное решение не факт, что возможно.
Нужно брать реальные XML файлы и на них тестировать
до полного удовлетворения
а для чего нужен этот "XML"?
чтобы глазами пробежаться? тогда какая разница что там написано 19.25 или 19,25
в любом случае совершенно не задумываясь по контексту человеческий мозг отличит:
что 19. - это не конец предложения, а 25 не начало нового, а это одно число 19 целых 25 сотых
что 19,25 это не два числа 19 и 25, а одно 19 целых 25 сотых
Regular Expression - это тот инструмент, который позволит 3-мя строками решить задачу
1. создать обьект
2. указать маску
3. заменить в тексте
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете Последний раз редактировалось IgorGO; 28.10.2015 в 12:31 .
XML - это стандартный бланк отчетности, который предоставляется через программу с ЭЦП
В Excel происходит расчет данных, и чтобы не перебивать руками, написал макрос
Данными будут только цифры - "10,12" и "10,1225648" - отличаются только количеством знаков после запятой
Обязательный аргумент числоаргумент представляет собой значение типа 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
Приведенные ниже математические функции 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 Excel.
Первый способ округления при помощью функции int().
Второй способ округление при помощи функции 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 и в одном из случаев произошла ошибка переполнения. Опять поставил сотни.
Читайте также: