3

Я использую Microsoft Office Excel 2007.

Предположим, у меня есть номер 12500000000000.

Dim value1 as long

value1 = CLng(copyrng2.value)

'where copyrng2 is a range (cell) variable containing 12500000000000

Приведенный выше код не удастся из-за переполнения.

Могу ли я сохранить этот номер в любой переменной Excel (VBA)? Если нет, что я могу сделать, чтобы сохранить его, предпочтительно в формате (целое, длинное и т.д.), Для которого можно выполнить вычисления?

4 ответа4

2

Существующий ответ правильный в том смысле, что вам нужно использовать тип данных Double . Это решает проблему, теперь я приведу некоторые технические детали.

Наибольшее число, которое может хранить тип данных Double (также наибольшее число, с которым может иметь дело Excel):1.79769313486231570 • 10 308. Однако наибольшее число, которое вы можете поместить в ячейку (без формулы), равно 9.99999999999999 • 10 307. Обратите внимание, что при работе с такими огромными числами вы потеряете много точности - добавление сравнительно крошечного числа к вещам такого масштаба имеет хороший шанс ничего не делать. Плавающая точка может стать немного странной.

Максимальный размер типа данных Long - это капля в море по сравнению с диапазоном Double; 64-разрядное целое число со знаком может доходить только до 9 223 372 036 854 775 807. По крайней мере, вы гарантированно ничего не потеряете при округлении, если вы имеете дело только с целыми числами.

Источники: спецификации и ограничения Excel, сводка типов данных

0

Вам нужно использовать Double, а не Long. С B2 вроде:

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

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

0

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

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

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

0

Excel может хранить только 15 цифр. Насколько наибольшее число будет 999999999999999. Если вы попытаетесь набрать 16-значное число, оно округляет последнее число на 0 с 16-го места.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .