Muszę znaleźć ostatnią przestrzeń w celi XLS

17

Mam arkusz Excela z wartościami tekstowymi, np. W A1: „To jest tekst”. Muszę znaleźć pozycję ostatniego znaku spacji. Czy istnieje formuła programu Excel, która da mi oczekiwany wynik? Próbowałem ZNAJDŹ i WYSZUKAJ, jednak te zaczynają się od lewej, potrzebuję zacząć od prawej.

Dheer
źródło
Cross-site duplicate about the same vintage: stackoverflow.com/q/18617349
Mathieu K.

Odpowiedzi:

28

Jeśli przez pustą wartość rozumiesz „spację”, a przez XLS masz na myśli Excel, możesz użyć tej formuły (zakładając, że test, w którym chcesz znaleźć ostatnią spację, znajduje się A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Możesz podzielić go na 3 części:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))daje liczbę spacji, nazwijmy to x,
  • SUBSTITUTE(A1," ","☃",[x])zastąpi tę xspację (czyli ostatnią) bałwanem,
  • FIND("☃",[...])da ci pozycję bałwana. To jest pozycja ostatniej przestrzeni.
m4573r
źródło
Działa idealnie. Dzięki. Dość czasu zajęło mi ustalenie, dlaczego zadziałało pomimo twojego wyjaśnienia :)
Dheer
5
+1 za miłą, szczegółową odpowiedź i najbardziej kreatywną jak dotąd postać zastępczą.
Doug Glancy
Działa również w LibreOffice Calc i Arkuszach Google.
Mathieu K.
8

Oto inny sposób: dowolne postacie są dozwolone w A1 (nawet bałwany!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND ma trzeci argument, który określa pozycję początkową wyszukiwania, jeśli zastosujesz tablicę wartości całkowitych od 1 do n (gdzie n jest długością A1) do tego parametru, otrzymasz tablicę z powrotem, a ostatnia liczba jest pozycją ostatnia przestrzeń.

LOOKUPnastępnie wyodrębnia tę liczbę, szukając wartości większej niż dowolna wartość, która może być znaleziona w tej tablicy, w którym to przypadku znaleziono ostatnią liczbę

W Excel 2010lub później możesz również użyć AGGREGATEtakiej funkcji

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FINDzwraca tę samą tablicę jak poprzednio i używając 14 jako pierwszego argumentu AGGREGATEi 1 jako ostatni, otrzymujesz największą wartość w tablicy, ignorując błędy [6]

Barry Houdini
źródło
1
działa świetnie. Chociaż byłem programistą jakiś czas temu, wciąż nie mogę zrozumieć, jak i dlaczego działa
INDIRECT
1
Zakładając, że A1 ma 12 znaków, ta część "1:"&LEN(A1)zamienia się w „1:12” - to ciąg, którego ROW nie może przetworzyć, ale INDIRECT konwertuje ciąg na prawidłowe odwołanie, które ROW może obsłużyć, więc ROW (1:12) daje wtedy {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
Barry Houdini
Dzięki za wyjaśnienie. Teraz ma to jakiś sens. Co znaczy znaleźć się implictly współpracuje z tablicy i pobiera wykonywane dla każdej wartości w pozycji wyjściowej ...
Dheer
Zgadza się, FIND zwraca tablicę, np. Jeśli A1 zawiera, barry larry houdiniFIND zwróci tę tablicę, {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}a LOOKUP i / lub AGGREGATE wezmą z niej ostatnią / największą wartość liczbową, tj. 12
barry houdini
Uwaga: działa to w LibreOffice Calc. Nie działa w Arkuszach Google, zamiast znaleźć pierwsze wystąpienie.
Mathieu K.