none
Como eu descubro se o valor de uma variável é um número? RRS feed

  • Pergunta

  • Olá, estou com o seguinte problema:

      Preciso fazer um gráfico e pego os valores em planilhas distintas. Aí faço uma planilha chamada "Tabela" em que vou colando o nome da planilha na coluna A e o valor da propriedade que eu quero na coluna B. Depois, faço o gráfico. Beleza.

       No entanto, o gráfico não fica bom porque às vezes o "número" que eu, aliás, a macro, coloca na coluna B está entre colchetes ou são dois números isolados por um hífen (10-20, ou seja, o valor varia entre 10 e 20). Daí, pensei em coloca rum replace no caso do colchete e um split no caso do hífen pegando os dois e montando duas linhas para aquele.

      Parece que dá para fazer isso. No entanto, a maioria dos dados já são números e não precisam ficar passando por esse split ou pelo replace. Assim, queria um função para eu colocar dentro do IF "activecell ou a variável que recebeu o valor da célula ativa é um número - inteiro, double, float, importa q seja um número" then "não acontecer nada" Else (...)

     

     

    Enfim, qual função me diz que a variável ou célula é um número (sem colchetes, sem hífem, ou seja, só tem números e vírgulas)?

     

    Obrigado.

    sexta-feira, 4 de fevereiro de 2011 16:43

Respostas

  • No Excel voce pode usar a Função ÉNUM()

    que te retorno True caso o valor seja um Numero.

    caso esteja utilizando codigo vba utilize a função  IsNumeric()

     

    Att,


    Caio Vitullo
    • Marcado como Resposta Marlon Saveri segunda-feira, 7 de fevereiro de 2011 14:52
    sexta-feira, 4 de fevereiro de 2011 21:02

Todas as Respostas

  • No Excel voce pode usar a Função ÉNUM()

    que te retorno True caso o valor seja um Numero.

    caso esteja utilizando codigo vba utilize a função  IsNumeric()

     

    Att,


    Caio Vitullo
    • Marcado como Resposta Marlon Saveri segunda-feira, 7 de fevereiro de 2011 14:52
    sexta-feira, 4 de fevereiro de 2011 21:02
  • Muito obrigado, Caio. Usando IsNumeric() posso construir um gráfico sem ter erro. No entanto, ainda não sei como corrigir valores não numéricos para numéricos.

     

     Meus números podem ser do tipo: "3,45"; "[3,45]"; "3 - 4" ou "3-4". Bem, criei o teste abaixo para estudar esta questão:

    Sub testenumerico()<br/>
      variavel = "[3,45]"<br/>
      If IsNumeric(variavel) Then<br/>
        MsgBox variavel<br/>
      Else<br/>
        corrigido = Split(variavel, "[", "")<br/>
        corrigido = Split(corrigido, "]", "")<br/>
        MsgBox variavel<br/>
      End If<br/>
    End Sub
    

    Se for numérico, então eu já imprimo no lugar certo. Mas, se não for numérico, preciso transformar em numérico. Seja retirando os colchetes ou o hífen, depende do caso. Aí vem as dúvidas.

    1. Erro de execução 13 no código acima. Será que é por que Split só funciona para string?

    2. Ainda que desse, não sei se tem colchete ou hífen, precisaria verificar o que tem no texto para ser retirado.

     

    Se puder solucionar esses problemas. Obrigado.

    segunda-feira, 7 de fevereiro de 2011 13:33
  • Eu estava confundido Replace com Split. Acho que este código resolve:

     

    Sub testenumerico()
      Dim variavel As String
      variavel = "3,45-5"
      If IsNumeric(variavel) Then
        MsgBox variavel
      Else
        corrigido = Replace(variavel, "[", "")
        corrigido = Replace(corrigido, "]", "")
        If IsNumeric(corrigido) Then
          MsgBox corrigido
        Else
          vet = Split(corrigido, "-")
          MsgBox vet(1)
        End If
      End If
    End Sub
    

    segunda-feira, 7 de fevereiro de 2011 14:52
  • Marlon, utilize a seguinte função:

     

    Function NumeroApenas(valor As String) As Double
    Dim n As Integer
    Dim retorno As String
    Dim r As String
      For n = 1 To Len(valor)
      r = Mid(valor, n, 1)
        If IsNumeric(r) Or r = "." Or r = "," Then
          retorno = retorno & CStr(Mid(valor, n, 1))
        End If
      Next
      
      NumeroApenas = CDbl(retorno)
    End Function
    

    Obs, veja que estou absorvendo apenas caracteres numericos, virgula e ponto. se voce precisar de outros caracteres basta incluir no codigo.

    Att,


    Caio Vitullo
    segunda-feira, 7 de fevereiro de 2011 22:04