Verifique se o texto da célula do Excel é numérico usando apenas a fórmula

13

Eu tenho que descobrir se o texto das minhas células é um valor numérico e queria usar um método não VBA elegante que não impeça seu estado ou valor atual.

O que eu descobri é que a ISNUMBER()função só funciona se as células estiverem com formatação numérica ou se não houver espaços se a formatação de texto, por exemplo:

número como exemplos de texto

Nos três primeiros que usei =ISNUMBER(...)e minha última tentativa é =ISNUMBER(TRIM(...)).

O único método que usei que não usa o VBA é substituir meus valores atuais usando texto para colunas e, em seguida, usar a =ISNUMBER()função

Nota: Sou proficiente em VBA e Excel e entendo que poderia criar uma função definida pelo usuário. Mas não quero, pois isso impõe uma pasta de trabalho ou um suplemento de macro necessário para instalação, o que posso e já fiz em alguns casos.

Agradeço qualquer conselho, opinião (mesmo que me digam que não pode ser feito) ou soluções VBA (no entanto, não serão marcadas como resposta).

glh
fonte
4
Uma alternativa ao FWIW ISNUMBERé a raramente usada N. Algo assim=NOT(ISERR(N(--A1)))
brettdj
1
@brettdj obrigado por isso! Para uma resposta que usa o menor número de caracteres e é rápida e suja, agora tenho =N(-A1). Também não sabia que existia.
GLH
Qual é o objetivo do (s) hífen (es) na frente da referência da célula? E por que cada um de vocês tem um número diferente de hífens?
Youcantryreachingme

Respostas:

30

Tente multiplicar o valor da célula por 1 e, em seguida, execute as funções IsNumbere Trim, por exemplo:

=IsNumber(Trim(A1)*1)

David Zemens
fonte
2
+1 para velocidade e uma boa resposta. É chato quando as coisas estão bem na sua cara, mas você não pode vê-las!
GLH
1
Também descobri que você nem precisa usar trim. Meus cumprimentos.
GLH
2
@glh às vezes é preciso apenas outro par de olhos para ver o que está bem na sua frente. :)
David Zemens
5

Supondo que o valor que você deseja converter esteja em A1, você pode usar a seguinte fórmula:

=ISNUMBER(VALUE(TRIM(CLEAN(A1)))

Aqui, as funções clean e trim estão removendo espaços em branco e nenhum caractere imprimível. O valor da função converte uma string em um número e, com a string convertida, podemos verificar se o valor é um número.

Sam Plus Plus
fonte
3
+1. Como rápido e sujo, eu gosto, =VALUE(A1)pois meus dados não serão necessários CLEAN(). Eu não sabia que a VALUE()função existia. Apenas para observar o TRIM()que não faz nada, já que os espaços são ignorados.
GLH
3

A resposta mais curta que tenho para minha pergunta é:

=N(-A1)

Obrigado brettdj

glh
fonte
2

Eu sei que este post é antigo, mas achei muito útil. Nesse caso, eu tinha uma fórmula que retornava (333), mesmo que seja um número e ISNUMBER dirá que é um número, mesmo que eu não quisesse uma resposta se tivesse. caracteres que não sejam dígitos. O seguinte funcionou para mim.

=IF(AND(ISNUMBER(--(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))),"Is Number","")

Funciona se houver QUALQUER caractere além de dígitos. Se você quer apenas um falso verdadeiro, solte o IF

=AND(ISNUMBER(--(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))))

Como David Zemens afirmou

=IsNumber(Trim(A1)*1)

Funciona, mas se houver um "-" ou se o número estiver entre parênteses, ele dirá que é um número.

Espero que isso ajude você ou outras pessoas.

Mouthpear
fonte
0

se alguém precisar filtrar células que contenham algo que não seja numérico:

=AND(SUMPRODUCT(--ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))=LEN(A1),A1<>"")

resultado decimal e negativo FALSE

robotik
fonte