Excel: Wyciągnij liczbę z ciągu tekstowego

  • Udostępnij To
Michael Brown

Tutorial pokazuje jak wyodrębnić liczbę z różnych ciągów tekstowych w Excelu za pomocą formuł i narzędzia Wyodrębnij.

Jeśli chodzi o wyodrębnienie części ciągu tekstowego o danej długości, Excel udostępnia trzy funkcje Substring (Left, Right i Mid), które szybko radzą sobie z tym zadaniem. Jeśli chodzi o wyodrębnienie liczb z ciągu alfanumerycznego, Microsoft Excel udostępnia... nic.

Aby uzyskać liczbę z łańcucha w Excelu, potrzeba trochę pomysłowości, odrobiny cierpliwości i mnóstwa różnych funkcji zagnieżdżonych w sobie. Możesz też uruchomić narzędzie Wyciąg i wykonać zadanie jednym kliknięciem myszy. Poniżej znajdziesz pełne informacje na temat obu metod.

    Jak wyodrębnić liczbę z końca ciągu tekstowego

    Gdy masz kolumnę ciągów alfanumerycznych, gdzie liczba pojawia się po tekście, możesz użyć następującej formuły, aby ją uzyskać.

    PRAWDA( komórka , LEN( komórka ) - MAX(IF(ISNUMBER(MID( komórka , ROW(INDIRECT("1:"&LEN( komórka )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( komórka ))), 0)))

    Logikę formuły omówimy nieco później. Na razie wystarczy zastąpić komórka z odwołaniem do komórki zawierającej oryginalny ciąg (A2 w naszym przypadku), i wprowadź formułę w dowolnej pustej komórce w tym samym wierszu, powiedzmy w B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    Formuła ta pobiera numer tylko z końca. Jeśli ciąg ma również numery na początku lub w środku, są one ignorowane:

    Ekstrakcja odbywa się za pomocą funkcji PRAWDA, która należy do kategorii funkcji tekstowych.Wyjściem tej funkcji jest zawsze tekst W naszym przypadku wynikiem jest podciąg numeryczny , co w kontekście Excela jest również tekstem, a nie liczbą.

    Jeśli chcesz, aby wynik był numer (które możesz wykorzystać w dalszych obliczeniach), a następnie zawiń formułę do funkcji WARTOŚĆ lub wykonaj operację arytmetyczną, która nie zmieni wyniku, powiedzmy pomnóż przez 1 lub dodaj 0. Aby wychwycić błędy w ciągach, które nie zawierają pojedynczej liczby, użyj funkcji IFERROR. Na przykład:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    lub

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    Uwaga. w programie Dynamic Array Excel (Office 365 i 2021) formułę wprowadzasz w zwykły sposób za pomocą klawisza Enter. W Excelu 2019 i wcześniejszych działa ona tylko jako formuła tablicowa, więc pamiętaj, aby nacisnąć Ctrl + Shift + Enter, aby ją uzupełnić.

    Jak działa ta formuła:

    Aby wyodrębnić liczbę z ciągu alfanumerycznego, pierwszą rzeczą, którą musisz wiedzieć, jest to, gdzie rozpocząć ekstrakcję. Pozycja ostatniego nie-numerycznego znaku w ciągu jest określana za pomocą tego podstępnego wzoru:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    Aby zrozumieć logikę, zbadajmy ją od środka:

    Kombinacja ROW(INDIRECT("1:"&LEN(A2))) tworzy ciąg liczb odpowiadający sumie znaków w ciągu źródłowym (A2) i te kolejne liczby podajemy MID-owi jako numery startowe:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    Funkcja MID wyciąga każdy pojedynczy znak z A2 i zwraca je jako tablicę:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Ponieważ MID jest funkcją tekstową, jej wyjście jest zawsze tekstem (jak można zauważyć, wszystkie znaki są ujęte w cudzysłów). Aby zamienić jedynki na liczby, mnożymy tablicę przez 1 (podwójna negacja --MID() da ten sam efekt). Wynikiem tej operacji jest tablica liczb oraz błędów #VALUE! reprezentujących znaki nienumeryczne:

    ISNUMBER({0;5;#WARTOŚĆ!;#WARTOŚĆ!;#WARTOŚĆ!;0;1})

    Funkcja ISNUMBER ocenia każdy element tablicy i podaje swój werdykt w postaci wartości boolowskich - TRUE dla liczb, FALSE dla wszystkiego innego:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE}

    Ta tablica przechodzi do testu logicznego funkcji IF, gdzie każdy element tablicy jest porównywany z FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)

    Dla każdego FALSE (wartość nienumeryczna), kolejna funkcja ROW(INDIRECT()) zwraca jego względną pozycję w łańcuchu. Dla każdego TRUE (wartość numeryczna), zwracane jest zero. Wynikowa tablica wygląda następująco:

    {0;0;3;4;5;6;0;0}

    Reszta jest prosta. Funkcja MAX znajduje najwyższą liczbę w powyższej tablicy, która jest pozycją ostatniej nie-numerycznej wartości w łańcuchu (6 w naszym przypadku). Po prostu, odejmij tę pozycję od całkowitej długości łańcucha zwróconej przez LEN, i przekaż wynik do RIGHT, aby dać mu znać, ile znaków ma wyodrębnić z prawej strony łańcucha:

    RIGHT(A2, LEN(A2) - 6)

    Zrobione!

    Jak wyodrębnić liczbę z początku ciągu tekstowego

    Jeśli pracujesz z rekordami, w których tekst pojawia się po numerze, możesz wyodrębnić numer z początku ciągu, używając tej ogólnej formuły:

    LEWA( komórka , MATCH(FALSE, ISNUMBER(MID( komórka , ROW(INDIRECT("1:"&LEN( komórka )+1)), 1) *1), 0) -1)

    Mając oryginalny ciąg w A2, użyj następującej formuły, aby uzyskać liczbę:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Bez względu na to, ile cyfr znajduje się w środku lub na końcu, tylko numer początkowy jest wyodrębniany:

    Uwaga. W Excelu 365 i Excelu 2021, ze względu na obsługę tablic dynamicznych, zwykła formuła działa dobrze. W Excelu 2019 i wcześniejszych należy nacisnąć Ctrl + Shift + Enter, aby jawnie uczynić ją formuła macierzowa .

    Jak działa ta formuła:

    Tutaj ponownie wykorzystujemy kombinację funkcji ROW, INDIRECT i LEN do utworzenia ciągu liczb równego sumie znaków w ciągu źródłowym plus 1 (rola tego dodatkowego znaku stanie się jasna nieco później).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID i ISNUMBER wykonują to samo zadanie co w poprzednim przykładzie - MID wyciąga poszczególne znaki, a ISNUMBER zamienia je na wartości logiczne. Powstała w ten sposób tablica TRUE i FALSE trafia do funkcji MATCH jako tablica lookup:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE}, 0)

    MATCH oblicza względną pozycję pierwszego FALSE, dając nam pozycję pierwszego nie-numerycznego znaku w łańcuchu (3 w A2). Aby wyodrębnić poprzedzające go liczby, od pozycji pierwszego znaku tekstowego odejmujemy 1 i podajemy różnicę do num_chars argument funkcji LEFT:

    LEWA(A2, 3-1)

    Teraz wracamy do "dodatkowego" znaku w ciągu wygenerowanym przez ROW(INDIRECT()+1)). Jak już wiesz, ten ciąg stanowi punkty wyjścia dla funkcji MID. Bez +1, MID wyodrębniłby dokładnie tyle znaków, ile jest w oryginalnym ciągu. Jeśli ciąg zawiera tylko liczby, ISNUMBER zwróci tylko TRUE, podczas gdy MATCH potrzebuje przynajmniej jednego FALSE. Aby to zapewnić, dodajemy jedenwięcej znaków do całkowitej długości łańcucha, który funkcja MID przekonwertowałaby na łańcuch pusty. Na przykład w B7 MID zwraca taką tablicę:

    {"1"; "2"; "3"; "4";""}

    Uwaga. Podobnie jak w przypadku funkcji RIGHT, LEFT również zwraca wartość podciąg numeryczny , co technicznie jest tekstem, a nie liczbą. Aby uzyskać wynik jako liczbę, a nie ciąg liczbowy, zagnieżdż formułę w funkcji VALUE lub pomnóż wynik przez 1, jak pokazano w pierwszym przykładzie.

    Jak uzyskać liczbę z dowolnej pozycji w ciągu znaków

    Jeśli Twoje zadanie zakłada wyodrębnienie liczby z dowolnego miejsca w ciągu znaków, możesz skorzystać z następującej, zadziwiającej formuły opublikowanej na forum MrExcel:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Gdzie A2 to oryginalny ciąg tekstowy.

    Złamanie tej formuły wymagałoby osobnego artykułu, więc możesz po prostu skopiować ją do swojego arkusza, aby upewnić się, że naprawdę działa :)

    Po przeanalizowaniu wyników można jednak zauważyć jedną nieistotną wadę - jeśli ciąg źródłowy nie zawiera liczby, formuła zwraca zero, jak w wierszu 6 na powyższym zrzucie ekranu. Aby to naprawić, można zawinąć formułę w instrukcję IF, której test logiczny sprawdza, czy ciąg źródłowy zawiera jakąś liczbę. Jeśli tak, formuła wyciąga tę liczbę, w przeciwnym razie zwraca puste miejsce.sznurek:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Jak widać na zrzucie ekranu poniżej, poprawiona formuła działa pięknie (kudos do Alexa, naszego guru Excela, za to ulepszenie):

    W przeciwieństwie do wszystkich poprzednich przykładów, wynikiem tego wzoru jest numer Aby się o tym przekonać, wystarczy zauważyć wyrównane do prawej wartości w kolumnie B i obcięte wiodące zera.

    Porada. W Excelu 365 - Excel 2019 istnieje znacznie prostsze rozwiązanie z pomocą funkcji TEKSTJOIN. Zobacz Jak usunąć tekst i zachować liczby.

    Wyodrębnij numer z ciągu tekstowego za pomocą Ultimate Suite

    Jak właśnie zobaczyłeś, nie ma trywialnej formuły Excela, aby wyciągnąć liczbę z ciągu tekstowego. Jeśli masz trudności ze zrozumieniem formuł lub dostosowaniem ich do swoich zestawów danych, może spodoba ci się ten prosty sposób na uzyskanie liczby z ciągu w programie Excel.

    Dzięki naszemu Ultimate Suite dodanemu do wstążki Excela, w ten sposób można szybko pobrać liczbę z dowolnego ciągu alfanumerycznego:

    1. Idź do Dane Ablebits tab> Tekst grupę, a następnie kliknij Wyciąg :

    2. Zaznacz wszystkie komórki z ciągami źródłowymi.
    3. W okienku narzędzia Extract wybierz Wyciągnij numery przycisk radiowy.
    4. W zależności od tego, czy wyniki mają być formułami czy wartościami, wybierz opcję Wstaw jako formułę lub pozostawić niezaznaczone (domyślnie).

      Radzę zaznaczyć to pole, jeśli chcesz, aby wyodrębnione liczby aktualizowały się automatycznie, gdy tylko zostaną wprowadzone jakiekolwiek zmiany w ciągach źródłowych. Jeśli chcesz, aby wyniki były niezależne od oryginalnych ciągów (np. w przypadku, gdy planujesz usunąć dane źródłowe w późniejszym czasie), nie zaznaczaj tego pola.

    5. Kliknij przycisk Wkładka Wyniki Gotowe!

    Podobnie jak w poprzednim przykładzie, wyniki ekstrakcji to. numery , co oznacza, że możesz swobodnie liczyć, sumować, uśredniać lub wykonywać za ich pomocą jakiekolwiek inne obliczenia.

    W tym przykładzie postanowiliśmy wstawić wyniki jako wartości , a dodatek zrobił dokładnie to, o co go poproszono:

    Jeśli Wstaw jako formułę pole wyboru było zaznaczone, można by zaobserwować formuła Chcesz wiedzieć, który z nich? Pobierz wersję próbną Ultimate Suite i przekonaj się sam :)

    Dostępne pliki do pobrania

    Excel Extract Number - przykładowy skoroszyt (plik .xlsx)

    Ultimate Suite - wersja próbna (plik .exe)

    Michael Brown jest oddanym entuzjastą technologii z pasją do upraszczania złożonych procesów za pomocą narzędzi programowych. Dzięki ponad dziesięcioletniemu doświadczeniu w branży technologicznej doskonalił swoje umiejętności w programach Microsoft Excel i Outlook, a także w Arkuszach i Dokumentach Google. Blog Michaela jest poświęcony dzieleniu się swoją wiedzą i doświadczeniem z innymi, dostarczając łatwych do zastosowania wskazówek i samouczków w celu poprawy produktywności i wydajności. Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy początkującym, blog Michaela oferuje cenne spostrzeżenia i praktyczne porady dotyczące maksymalnego wykorzystania tych niezbędnych narzędzi programowych.