Estoy usando Microsoft Office Excel 2007.
Supongamos que tengo el número 12500000000000.
Dim value1 as long
value1 = CLng(copyrng2.value)
'where copyrng2 is a range (cell) variable containing 12500000000000
El código anterior fallará debido a un desbordamiento.
¿Puedo almacenar ese número en cualquier variable de Excel (VBA)? Si no, ¿qué puedo hacer para almacenarlo, preferiblemente en un formato (entero, largo, etc.) en el que se puedan realizar cálculos?
Respuesta1
La respuesta existente es correcta porque necesita usar elDobletipo de datos. Eso resuelve el problema, ahora traeré algunos detalles técnicos.
El número más grande que puede almacenar el tipo de datos Double (también el número más grande que Excel puede manejar) es 1.79769313486231570 • 10 308 . Sin embargo, el número más grande que puedes poner en una celda (sin fórmula) es 9,99999999999999 • 10 307 . Tenga en cuenta que perderá mucha precisión cuando trabaje con números tan grandes: agregar un número comparativamente pequeño a cosas de esa magnitud tiene muchas posibilidades de no hacer nada.El punto flotante puede volverse un poco extraño.
El tamaño máximo del tipo de datos Long es una gota en el océano en comparación con el rango de Double; un entero de 64 bits con signo sólo puede llegar hasta 9.223.372.036.854.775.807. Al menos tienes la garantía de no perder nada al redondear allí, siempre y cuando trabajes solo con números enteros.
Fuentes:Especificaciones y límites de Excel,resumen de tipo de datos
Respuesta2
Un excel puede almacenar sólo 15 dígitos. Hasta que el número más grande sea 999999999999999. Si intenta escribir un número de 16 dígitos, redondeará el último número a 0 desde el puesto 16.
Respuesta3
Respuesta4
Utilice el Decimal
tipo de variable. No puedes declarar un número como Decimal
pero puedes almacenarlo en una Variant
variable.
Dim value1 as Variant
value1 = CDec(copyrng2.value)
NOTA: Con los números grandes con los que está tratando (12500000000000), si intenta almacenar un decimal, Excel parece redondear ese número a 1 decimal.