Estou usando o Microsoft Office Excel 2007.
Suponha que eu tenha o número 12500000000000.
Dim value1 as long
value1 = CLng(copyrng2.value)
'where copyrng2 is a range (cell) variable containing 12500000000000
O código acima falhará devido ao estouro.
Posso armazenar esse número em qualquer variável do Excel (VBA)? Caso contrário, o que posso fazer para armazená-lo, de preferência em um formato (Inteiro, Longo, etc.) no qual os cálculos possam ser realizados?
Responder1
A resposta existente está correta porque você precisa usar oDobrotipo de dados. Isso resolve o problema, agora vou trazer alguns detalhes técnicos.
O maior número que o tipo de dados Double pode armazenar (também o maior número com o qual o Excel pode lidar) é 1.79769313486231570 • 10 308 . O maior número que você pode colocar em uma célula (sem fórmula), entretanto, é 9,99999999999999 • 10 307 . Observe que você perderá muita precisão ao trabalhar com números tão grandes - adicionar um número comparativamente pequeno a coisas dessa magnitude tem uma boa chance de não fazer nada.O ponto flutuante pode ficar um pouco estranho.
O tamanho máximo do tipo de dados Long é uma gota no oceano comparado ao intervalo de Double; um número inteiro assinado de 64 bits só pode ir até 9.223.372.036.854.775.807. Pelo menos você não perderá nada com o arredondamento, desde que esteja lidando apenas com números inteiros.
Fontes:Especificações e limites do Excel,resumo do tipo de dados
Responder2
Um Excel pode armazenar apenas 15 dígitos. Desde que o maior número seja 999999999999999. Se você tentar digitar um número de 16 dígitos, ele arredondará o último número em 0 a partir da 16ª posição.
Responder3
Responder4
Use o Decimal
tipo de variável. Você não pode declarar um número, Decimal
mas pode armazená-lo em uma Variant
variável.
Dim value1 as Variant
value1 = CDec(copyrng2.value)
OBSERVAÇÃO: Com os números grandes com os quais você está lidando (12500000000000), se você tentar armazenar um decimal, o Excel parece arredondar esse número para 1 casa decimal.