/ / Znajdź ostatnią liczbę w ciągu tekstowym - Excel

Znajdź ostatnią liczbę w ciągu tekstowym - Excel

Chcę znaleźć pozycję ostatniej cyfry w ciągu tekstowym i używam tego wzoru, aby to zrobić;

MAX (JEŻELI (ISERROR (ZNAJDŹ ({1; 2; 3; 4; 5; 6; 7; 8; 9; 0}, A1)), "", ZNAJDŹ ({1; 2; 3; 4; 5; 6; 7; 8; 9; 0}, A1))

Jednak to nie działa, jeśli zawiera ciągpowtarzanie liczb. Na przykład, gdy ciąg znaków to "10ABC2010ABC", zwróci 7 zamiast 9. Kiedy łańcuch ma wartość "10ABC2131ABN", zwraca 8 zamiast 9.

Jakieś pomysły, co się dzieje?

Odpowiedzi:

5 dla odpowiedzi № 1

Oto działająca formuła:

=MAX(IF(ISNUMBER(VALUE(MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1))),ROW(INDIRECT("1:" & LEN(A1)))))

naciśnij CTRL+PRZESUNIĘCIE+WCHODZIĆ żeby to ocenić.

Wyjaśnienie:

  • ROW(INDIRECT("1:" & LEN(A1))) zwraca tablicę {1,2,3,...,Len(A1)}
  • używając tej tablicy możemy wziąć każdą postać A1 komórka: MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)
  • za pomocą VALUE(...) staramy się przekonwertować każdy znak na liczbę. Powraca #VALUE! błąd dla wszystkich postaci z wyjątkiem 1,2,3,4,5,6,7,8,9,0
  • za pomocą ISNUMBER(...) sprawdzamy, czy VALUE(..) zwraca liczbę lub błąd, a jeśli zwraca numer, zapamiętujemy jego pozycję.
  • ostatni krok - użycie Max(..) znajdujemy ostatnią pozycję o charakterze numerycznym

3 dla odpowiedzi № 2

FIND tylko znajduje pozycję pierwsza instancja każdego numeru, więc nie będzie działać zgodnie z Twoimi wymaganiami. Spróbuj użyć tej formuły

=MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),0))

potwierdzone przy pomocy CTRL+PRZESUNIĘCIE+WCHODZIĆ

To również wykorzystuje FIND ale ROW(INDIRECT część rozpoczyna wyszukiwanie dalej wzdłuż ciągu znaków przy każdej okazji. Jeśli w A1 nie ma cyfr, w wyniku otrzymuje się zero (w razie potrzeby można popełnić błąd)

Inną możliwością, jeśli korzystasz z programu Excel 2010 lub nowszego, jest użycie funkcji AGREGATUJ w następujący sposób: [untested]

=AGGREGATE(14,6,FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

To nie wymaga "wpisu tablicy"

Widzieć tutaj dla przykładowego skoroszytu z sugerowanymi formułami


2 dla odpowiedzi nr 3

A ta formuła tablicowa też będzie działała ... ok, ok ... Wiem, że używa przesunięcia :)

=1+LEN(A1)-MATCH(1;ISNUMBER(LEFT(RIGHT(A1;ROW(OFFSET(A1;0;0;LEN(A1);1))))*1)*1;0)