Vérifiez si le texte des cellules Excel est numérique à l'aide d'une formule uniquement

13

Je dois savoir si le texte de mes cellules est une valeur numérique et je voulais utiliser une méthode élégante non VBA qui n'entrave pas son état ou sa valeur actuelle.

Ce que j'ai trouvé, c'est que la ISNUMBER()fonction ne fonctionne que si les cellules sont au format numérique ou n'a pas d'espaces si le formatage du texte est par exemple:

nombre comme exemples de texte

Pour les trois premiers, j'ai utilisé =ISNUMBER(...)et ma dernière tentative est =ISNUMBER(TRIM(...)).

La seule méthode que j'ai utilisée qui n'utilise pas VBA est de remplacer mes valeurs actuelles en utilisant du texte dans les colonnes, puis d'utiliser la =ISNUMBER()fonction.

Remarque: Je maîtrise VBA et Excel et je comprends que je pourrais créer une fonction définie par l'utilisateur. Mais je ne veux pas car cela impose l'installation d'un classeur requis par macro ou d'un complément, ce que je peux et ai fait dans certains cas.

J'apprécierai tous les conseils, pensées (même s'ils me disent que cela ne peut pas être fait) ou les solutions VBA (ne seront pas marquées comme réponse cependant).

glh
la source
4
FWIW une alternative à ISNUMBERest rarement utilisé N. Quelque chose comme ça=NOT(ISERR(N(--A1)))
brettdj
1
@brettdj merci pour ça! Pour une réponse qui utilise le moins de caractères et qui soit rapide et sale que j'ai maintenant =N(-A1). Je ne savais pas non plus que cela existait.
2013
À quoi servent les tirets devant la référence de cellule? Et pourquoi avez-vous chacun un nombre différent de tirets?
youcantryreachingme

Réponses:

30

Essayez de multiplier la valeur de la cellule par 1, puis exécutez les fonctions IsNumberet Trim, par exemple:

=IsNumber(Trim(A1)*1)

David Zemens
la source
2
+1 pour la vitesse et une bonne réponse. Ça craint quand les choses sont en face de vous mais vous ne pouvez pas les voir!
glh
1
J'ai également découvert que vous n'avez même pas besoin d'utiliser trim. Mes salutations.
glh
2
@glh parfois, il suffit d'un autre regard pour voir ce qui se trouve juste devant vous. :)
David Zemens
5

En supposant que la valeur que vous souhaitez convertir est en A1, vous pouvez utiliser la formule suivante:

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

Ici, les fonctions de nettoyage et de suppression suppriment les espaces et aucun caractère imprimable. La valeur de la fonction convertit une chaîne en nombre, et avec la chaîne convertie, nous pouvons vérifier si la valeur est un nombre.

Sam Plus Plus
la source
3
+1. Aussi rapide et sale que j'aime =VALUE(A1)car mes données n'en auront pas besoin CLEAN(). Je ne savais pas que la VALUE()fonction existait. Juste pour noter que TRIM()cela ne fait rien car les espaces sont ignorés de toute façon.
glh
3

La réponse la plus courte que j'ai à ma question est:

=N(-A1)

Merci brettdj

glh
la source
2

Je sais que ce message est ancien mais j'ai trouvé cela très utile dans ce cas, j'avais une formule qui retournait (333), même si c'est un nombre et ISNUMBER dira que c'est un nombre même si je ne voulais pas de réponse si elle avait caractères autres que des chiffres. Ce qui suit a fonctionné pour moi.

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

Cela fonctionne s'il y a des caractères autres que des chiffres. Si vous voulez juste une vraie fausse goutte, l'IF

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

Comme l'a déclaré David Zemens

=IsNumber(Trim(A1)*1)

Fonctionne mais s'il y a un "-" ou si le nombre est entre parenthèses, il dira que c'est un nombre.

J'espère que cela vous aide ou aide les autres.

Mouthpear
la source
0

si quelqu'un a besoin de filtrer les cellules contenant tout ce qui n'est pas numérique:

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

résultat décimal et négatif FALSE

robotik
la source