none
Problema ao atribuir o valor de uma variável a uma célula RRS feed

  • Pergunta

  • Pessoal, quem pode me ajudar?

    Tenho o seguinte trecho de código em execução:

    Valor da variável pçunCodFltr(i) = 280124,8

    Vejam o valor de pçunCodFltr(i) !! é 280124,8  este é o valor esperado e que preciso atribuir a uma célula determinada.

    Olha o que acontece quando a variável é atribuída a uma célula:

    Resultado

    Não entendo!!! esse 0,0125 a mais apareceu e não tenho explicação ..... alguém me ajuda ai!!! ...vlw

    a variável pçunCodFltr(i) foi declarada : Private quantCodFltr(1000) As Single, pçunCodFltr(1000) As Single no início do módulo.

    quantCodFltr(i) captura o valor 280124,8 como visto acima de uma célula em outra planilha. já me certifiquei que essa célula contém 280124,8 ,assim mesmo, apenas com uma casa decimal.
    quarta-feira, 14 de junho de 2017 19:30

Todas as Respostas

  • Boa noite hector55!

    Realmente este é um resultado inesperado, mas de fato ocorre. No próprio depurador você pode obter este erro utilizando um "Cdbl(...)".

    A explicação para isto pode não ser agradável, entretanto: provavelmente está associado à inabilidade do Excel em lidar com números de pontos flutuantes (no seu caso ainda pior por ser de precisão simples). Alguns números podem ser "bastante quebrados", ou até mesmo impossíveis de serem representados precisamente pelo Excel (veja um artigo interessante sobre isso: https://support.microsoft.com/pt-br/help/78113/floating-point-arithmetic-may-give-inaccurate-results-in-excel). Esse problema existe tanto para planilha como para o VBA.

    Para confirmar faça o teste:  experimente somar "0,1" muitas vezes (10000, por exemplo) no VBA e veja o resultado (no meu Excel resultou em  1000,00000000016).

    Problemas maiores ocorrem com horas e às vezes pode ser contornado truncando o resultado.

    Felizmente para seu caso o problema deixa de ocorrer se você trocar a declaração de "Single" para "Double" (dupla precisão).

    Abraço.


    Filipe Magno

    quinta-feira, 15 de junho de 2017 00:59
  • Obrigado Filipe

    Vou pesquisar o assunto com suas dicas. Com double já havia tentado e o problema persistiu. Consegui resolver declarando as variáveis como currency, depois usei Format para a saída na planilha, aí deu certo. Pode não ser muito elegante mas funcionou.

    Valeu pela ajuda. Forte abraço

    Hector

    quinta-feira, 15 de junho de 2017 09:00