Qual é o maior valor (número) que posso armazenar em uma variável do Excel VBA?

2

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á por causa do estouro.

Posso armazenar esse número em qualquer variável do Excel (VBA)? Se não, o que posso fazer para armazená-lo, de preferência em um formato (Integer, Long, etc.) no qual os cálculos podem ser realizados?

    
por D.chan 16.02.2016 / 10:58

4 respostas

1

A resposta existente está correta porque você precisa usar o tipo de dados Double . Isso resolve o problema, agora eu 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 uma fórmula), no entanto, é 9.99999999999999 • 10 307 . Note que você perderá uma boa dose de precisão quando estiver trabalhando 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 queda no oceano em comparação com o intervalo de Double; um inteiro de 64 bits assinado pode ir até 9.223.372.036.854.775.807. Pelo menos você está garantido para não perder nada para arredondar lá, contanto que você esteja lidando com apenas números inteiros.

Fontes: Especificações do Excel e limites , Resumo do tipo de dados

    
por 16.02.2016 / 15:56
0

Você precisa usar Double em vez de Long . Com B2 como:

Estecódigoapresentaráumerro:

Subdural()DimdAsLongd=Range("B2").Value
End Sub

Mas este código não irá:

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

    
por 16.02.2016 / 15:33
0

Use o tipo de variável Decimal . Você não pode declarar um número como Decimal , mas pode armazená-lo em uma variável Variant .

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.

    
por 05.06.2018 / 19:50
0

Um excel pode armazenar apenas 15 dígitos. Na medida em que o maior número seja 999999999999999. Se você tentar digitar 16 dígitos, arredonda o último número por 0 a partir do 16º lugar.

    
por 13.11.2018 / 10:24