Я использую Microsoft Office Excel 2007.
Предположим, у меня есть число 12500000000000.
Dim value1 as long
value1 = CLng(copyrng2.value)
'where copyrng2 is a range (cell) variable containing 12500000000000
Приведенный выше код не будет выполнен из-за переполнения.
Могу ли я сохранить это число в любой переменной Excel (VBA)? Если нет, что я могу сделать, чтобы сохранить его, желательно в формате (Integer, Long и т. д.), в котором можно выполнять вычисления?
решение1
Существующий ответ правильный в том смысле, что вам нужно использоватьДвойнойтип данных. Это решает проблему, теперь я внесу некоторые технические подробности.
Наибольшее число, которое может хранить тип данных Double (а также наибольшее число, с которым может работать Excel), — 1,79769313486231570 • 10 308. Однако наибольшее число, которое можно поместить в ячейку (без формулы), — 9,9999999999999 • 10 307. Обратите внимание, что при работе с такими огромными числами вы потеряете значительную часть точности — добавление сравнительно небольшого числа к таким величинам, скорее всего, не даст никакого результата.С плавающей точкой могут возникнуть некоторые странности.
Максимальный размер типа данных Long — капля в море по сравнению с диапазоном Double; знаковое 64-битное целое число может достигать только 9 223 372 036 854 775 807. По крайней мере, вы гарантированно ничего не потеряете из-за округления, если только имеете дело только с целыми числами.
Источники:Спецификации и ограничения Excel,сводка типов данных
решение2
Excel может хранить только 15 цифр. Самое большое число — 999999999999999. Если вы попытаетесь ввести 16-значное число, оно округлит последнее число на 0 с 16-го места.
решение3
решение4
Используйте Decimal
тип переменной. Вы не можете объявить число как, Decimal
но вы можете сохранить его в Variant
переменной.
Dim value1 as Variant
value1 = CDec(copyrng2.value)
ПРИМЕЧАНИЕ: При работе с большими числами (12500000000000), если вы попытаетесь сохранить десятичную дробь, Excel, по-видимому, округлит это число до 1 десятичного знака.