Какое наибольшее значение (число) можно сохранить в переменной Excel VBA?

Какое наибольшее значение (число) можно сохранить в переменной Excel VBA?

Я использую 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

Вам нужно использоватьДвойнойскорее, чемДлинный. СБи 2нравиться:

введите описание изображения здесь

Этот код выдаст ошибку:

Sub dural()
    Dim d As Long
    d = Range("B2").Value
End Sub

Но этот код не будет:

Sub BigNumber()
    Dim d As Double
    d = Range("B2").Value
    MsgBox d
End Sub

введите описание изображения здесь

решение4

Используйте Decimalтип переменной. Вы не можете объявить число как, Decimalно вы можете сохранить его в Variantпеременной.

Dim value1 as Variant
value1 = CDec(copyrng2.value)

ПРИМЕЧАНИЕ: При работе с большими числами (12500000000000), если вы попытаетесь сохранить десятичную дробь, Excel, по-видимому, округлит это число до 1 десятичного знака.

Связанный контент