Sprawdź, czy tekst komórki Excel jest numeryczny, używając tylko formuły

13

Muszę dowiedzieć się, czy tekst w moich komórkach jest wartością liczbową i chciałem zastosować elegancką metodę inną niż VBA , która nie wpływa na jej obecny stan ani wartość.

Odkryłem, że ISNUMBER()funkcja działa tylko wtedy, gdy komórki formatują liczby lub nie ma spacji, jeśli formatuje tekst, np .:

numer jako przykłady tekstowe

Przez pierwsze trzy użyłem, =ISNUMBER(...)a moja ostatnia próba to =ISNUMBER(TRIM(...)).

Jedyną metodą, której użyłem, która nie używa VBA, jest zastąpienie moich bieżących wartości za pomocą tekstu do kolumn, a następnie użycie =ISNUMBER()funkcji.

Uwaga: biegle posługuję się językami VBA i Excel i rozumiem, że mogę utworzyć funkcję zdefiniowaną przez użytkownika. Ale nie chcę, ponieważ nakłada to skoroszyt wymagany na makro lub dodatek do zainstalowania, co mogę i zrobiłem w niektórych przypadkach.

Będę wdzięczny za wszelkie porady, przemyślenia (nawet jeśli powiedzą mi, że nie da się tego zrobić) lub rozwiązania VBA (jednak nie zostaną oznaczone jako odpowiedzi).

glh
źródło
4
FWIW jest alternatywą dla ISNUMBERrzadko używanej N. Coś w tym stylu=NOT(ISERR(N(--A1)))
brettdj 30.04.13
1
@brettdj dzięki za to! Dla odpowiedzi, która wykorzystuje najmniejszą liczbę postaci i jest szybka i brudna, mam już =N(-A1). Nie wiedziałem, że to istnieje.
glh
Jaki jest cel łączników przed odwołaniem do komórki? I dlaczego każdy z was ma inną liczbę łączników?
youcantryreachingme

Odpowiedzi:

30

Spróbuj pomnożyć wartość komórki przez 1, a następnie uruchom funkcje IsNumberi Trim, np .:

=IsNumber(Trim(A1)*1)

David Zemens
źródło
2
+1 za szybkość i dobrą odpowiedź. To jest do bani, gdy wszystko jest w porządku, ale nie możesz ich zobaczyć!
glh 30.04.13
1
Dowiedziałem się również, że nie musisz nawet używać trim. Moje pozdrowienia.
glh 30.04.13
2
@glh czasami wystarczy kolejny zestaw oczu, aby zobaczyć, co jest przed tobą. :)
David Zemens
5

Zakładając, że wartość, którą chcesz przeliczyć, znajduje się w A1, możesz użyć następującej formuły:

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

W tym przypadku funkcje czyszczenia i przycinania usuwają spacje i nie drukują znaków. Wartość funkcji konwertuje ciąg na liczbę, a za pomocą przekonwertowanego ciągu możemy sprawdzić, czy wartość jest liczbą.

Sam Plus Plus
źródło
3
+1. Lubię szybkie i brudne, =VALUE(A1)ponieważ moje dane nie będą miały takiej potrzeby CLEAN(). Nie wiedziałem, że VALUE()funkcja istnieje. Wystarczy zauważyć, że TRIM()nic nie robi, ponieważ i tak spacje są ignorowane.
glh 30.04.13
3

Najkrótsza odpowiedź Mam na moje pytanie:

=N(-A1)

Dzięki brettdj

glh
źródło
2

Wiem, że ten post jest stary, ale znalazłem to bardzo przydatne w tym przypadku miałem formułę, która zwróciła (333), mimo że jest to liczba i ISNUMBER powie, że jest to liczba, mimo że nie chciałbym odpowiedzi, gdyby znaki inne niż cyfry. Poniższe działało dla mnie.

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

Działa, jeśli DOWOLNE są inne znaki niż cyfry. Jeśli chcesz tylko prawdziwego fałszywego upuść IF

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

Jak stwierdził David Zemens

=IsNumber(Trim(A1)*1)

Działa, ale jeśli występuje „-” lub liczba jest w nawiasach, oznacza to, że jest to liczba.

Mam nadzieję, że to pomoże tobie lub innym.

Gruszka
źródło
0

jeśli ktoś musi filtrować komórki zawierające coś, co nie jest liczbowe:

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

wyniki dziesiętne i ujemne FALSE

robotik
źródło