nov
05

Como saber se um texto é um número? (VBA)

por João Henrique

Nada mais comuns em uma macro do que fazer contas. A gente pega o valor de uma célula, ou de uma caixa de texto, multiplica com o de outra célula, soma com o de outra, e assim vai. Mas o que acontece quando a gente manda multiplicar A1 por 10 e em A1 está escrito uma palavra?


É isso mesmo, aparece uma mensagem de erro dizendo "Tipos incompatíveis". Afinal, multiplicar um texto por um número, hmmmm... não tem como dar certo, né? O que a gente pode fazer para evitar esse tipo de erro é verificar se o dado em questão é realmente um número.

Para isso, a gente pode fazer um pequeno if como esse:
If IsNumeric(dado) And Not IsEmpty(dado) Then comando
, onde a gente vai substituir 'dado' pelo dado que queremos usar e 'comando' pelo comando ou conta que queremos fazer.

Agora explicando: a função IsNumeric diz se o valor passado como argumento (entre parênteses) é um número. No entanto, ela também considera como número a célula em branco, ou a variável vazia, por isso que usamos também a função IsEmpty. A função IsEmpty diz se o valor passado como argumento é vazio.

Traduzindo o IF: Se o dado é um número, e o dado NÃO é vazio, então execute o comando.

Exemplos com célula:
Sub exemplo1()
If IsNumeric(Range("a1")) And Not IsEmpty(Range("a1")) Then MsgBox "O valor de A1 é número e a célula não está em branco"
End Sub
Traduzindo: se o valor da célula a1 for realmente um número, mostre uma mensagem dizendo que O valor de A1 é número e a célula não está em branco

Sub exemplo2()
If IsNumeric(Range("a1")) And Not IsEmpty(Range("a1")) Then MsgBox A1*10
End Sub
Traduzindo: se o valor da célula a1 for realmente um número, mostre uma mensagem com o resultado da multiplicação do valor de A1 por 10

Exemplo com variável:

Sub exemplo3()
Dim variavel1
variavel1 = 5
If IsNumeric(variavel1) And Not IsEmpty(variavel1) Then MsgBox "A variável1 é número e não é vazia"
End Sub
Traduzindo: se o valor da variável1 for realmente um número, mostre uma mensagem dizendo que A variavel1 é número e não é vazia

Quando uma caixa de texto está em branco, a função IsNumeric dá False, ou seja, ela diz que o valor da caixa de texto NÃO é um número. Por isso não precisamos usar a função IsEmpty ao usar caixas de texto.

Exemplo com caixa de texto:

Sub CommandButton1_Click()
If IsNumeric(TextBox1) Then MsgBox "O valor da caixa de texto é mesmo um número, e ela não está em branco"
End Sub
Traduzindo: se o valor da TextBox1 for realmente um número, mostre uma mensagem dizendo que O valor da caixa de texto é mesmo um número e ela não está em branco

Gostou deste artigo? Então compartilhe com seus amigos e assine para receber mais dicas de Excel por e-mail.