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

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

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

Você precisa usarDobroem vez deLongo. ComB2como:

insira a descrição da imagem aqui

Este código gerará um erro:

Sub dural()
    Dim d As Long
    d = 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

insira a descrição da imagem aqui

Responder4

Use o Decimaltipo de variável. Você não pode declarar um número, Decimalmas pode armazená-lo em uma Variantvariá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.

informação relacionada