Mam arkusz kalkulacyjny Excel zawierający listę ciągów. Każdy ciąg składa się z kilku słów, ale liczba słów w każdym z nich jest inna.
Korzystając z wbudowanych funkcji programu Excel (bez VBA), czy istnieje sposób na wyodrębnienie ostatniego słowa w każdym ciągu?
Przykłady:
Czy jesteś sklasyfikowany jako człowiek? -> człowiek? Negatywne, jestem popsicle z mięsa -> popsicle Aziz! Lekki! -> Światło!
excel
excel-formula
e.James
źródło
źródło
Odpowiedzi:
Ten jest przetestowany i działa (na podstawie oryginalnego postu Brada):
Jeśli oryginalne ciągi znaków mogą zawierać pionową kreskę „|” znak, a następnie zamień oba w powyższym na inny znak, który nie pojawi się w twoim źródle. (Podejrzewam, że oryginał Brada został uszkodzony, ponieważ z tłumaczenia usunięto niedrukowalny znak).
Bonus: Jak to działa (od prawej do lewej):
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
- Liczba spacji w oryginalnym ciąguSUBSTITUTE(A1," ","|", ... )
- Zastępuje tylko ostatnią spację za|
FIND("|", ... )
- Znajduje bezwzględną pozycję tego zastąpionego|
(to była ostatnia spacja)Right(A1,LEN(A1) - ... ))
- Zwraca wszystkie znaki po tym|
EDYCJA: aby uwzględnić przypadek, w którym tekst źródłowy nie zawiera spacji, dodaj na początku wzoru:
tworząc teraz całą formułę:
Lub możesz użyć
=IF(COUNTIF(A1,"* *")
składni drugiej wersji.Jeśli oryginalny ciąg może zawierać spację na ostatniej pozycji, dodaj funkcję przycinającą, licząc wszystkie spacje: Wykonując funkcję następującą:
źródło
Oto technika, której użyłem z wielkim sukcesem:
Aby uzyskać pierwsze słowo w ciągu, po prostu zmień z RIGHT na LEFT
Zastąp również A1 komórką zawierającą tekst.
źródło
" "
separatorem. Te dwa100
wydają się ograniczać to do ciągu 100 znaków, jeśli się nie mylę=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
Bardziej solidna wersja odpowiedzi Jerry'ego:
Działa to niezależnie od długości łańcucha, spacji początkowych lub końcowych, czy czegokolwiek innego i nadal jest dość krótkie i proste.
źródło
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
aby uzyskać rozszerzenie pliku.SUBSTITUTE
pozwala mu działać dla dowolnej postaci, nie tylko spacji.=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))
, gdzie „/” to znak ograniczający." ; "
(a średnik otoczony spacjami) o wartości wejściowych:"Technology Sprint 24 ; Sprint 4"
powraca:"; Sprint 4"
. Korzystam z rozwiązania dodanego przez: @PProteus.TRIM(A1)
przez:TRIM(SUBSTITUTE(A1, "strDelimeter", ";"))
we wszystkich miejscach, aby mieć nowy separator znaków:";"
lub jeszcze lepiej, używającchar()
funkcji wyszukiwania jakiś naprawdę nieoczekiwany charakter.TRIM
funkcji po dodaniu drugiejSUBSTITUTE
dla rozwiązania pojedynczego znaku ogólnego przypadku. Formuła zapewnia oczekiwany rezultat eliminując tę część:=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
Znalazłem to w Google, przetestowałem w programie Excel 2003 i działa dla mnie:
[edytuj] Nie mam wystarczającej liczby powtórzeń, aby komentować, więc wydaje się, że to najlepsze miejsce ... Odpowiedź BradCa również nie działa ze spacjami lub pustymi komórkami ...
[2. edycja] właściwie, to nie działa dla pojedyncze słowa ...
źródło
Jest to bardzo solidne - działa w przypadku zdań bez spacji, spacji wiodących / końcowych, wielu spacji, wielu spacji wiodących / końcowych ... i użyłem znaku (7) jako separatora zamiast pionowej kreski "|" na wypadek, gdyby był to pożądany element tekstowy.
źródło
Jest to bardzo czyste i kompaktowe i działa dobrze.
Nie ma pułapki na błędy bez spacji lub jednego słowa, ale łatwo to dodać.
Edycja:
obsługuje końcowe spacje, pojedyncze słowo i scenariusze pustych komórek. Nie znalazłem sposobu, żeby to złamać.
źródło
źródło
Aby dodać do odpowiedzi Jerry'ego i Joe, jeśli chcesz znaleźć tekst PRZED ostatnim słowem, którego możesz użyć:
Z „Mój mały kot” w A1 wynikałoby „Mój mały” (gdzie Joe i Jerry's daliby „kot”
W ten sam sposób, w jaki Jerry i Joe izolują ostatnie słowo, to po prostu pobiera wszystko na lewo od tego (a następnie przycina je z powrotem)
źródło
Wyobraź sobie, że struna może zostać odwrócona. Wtedy jest to naprawdę łatwe. Zamiast pracować na łańcuchu:
pracujesz z
Z
=LEFT(A1;FIND(" ";A1)-1)
w A2 otrzymujesz"My"
z (1) i"tac"
z (2), co jest odwrócone"cat"
, ostatnie słowo w (1).Istnieje kilka VBA do odwrócenia ciągu. Wolę publiczną funkcję VBA
ReverseString
.Zainstaluj powyższe zgodnie z opisem. Następnie z ciągiem znaków w A1, np.
"My little cat"
I tą funkcją w A2:zobaczysz
"cat"
w A2.Powyższa metoda zakłada, że słowa są oddzielone spacjami.
IF
Klauzula komórek zawierających pojedyncze słowa = NO półwyrobów w komórce. Uwaga:TRIM
iCLEAN
oryginalny łańcuch są przydatne również. W zasadzie odwraca cały ciąg z A1 i po prostu znajduje pierwszy odstęp w odwróconym ciągu, który znajduje się obok ostatniego (odwróconego) słowa (tj"tac "
.).LEFT
wybiera to słowo, a inny ciąg znaków odwraca oryginalną kolejność słowa (" cat"
). Na-1
końcuFIND
instrukcji usuwa puste miejsce.Chodzi o to, że łatwo jest wyodrębnić pierwsze (!) Słowo w łańcuchu, używając
LEFT
iFIND
wpisując pierwszy odstęp. Jednak w przypadku ostatniego (!) SłowaRIGHT
funkcja jest złym wyborem, gdy próbujesz to zrobić, ponieważ niestety FIND nie ma flagi dla kierunku, w którym chcesz analizować łańcuch.Dlatego cały ciąg jest po prostu odwrócony.
LEFT
iFIND
działa normalnie, ale wyodrębniony ciąg jest odwrócony. Ale to nic wielkiego, gdy wiesz, jak odwrócić ciąg. PierwszaReverseString
instrukcja w formule spełnia to zadanie.źródło
źródło
Skopiuj do kolumny, wybierz tę kolumnę i HOME> Edycja> Znajdź i wybierz, zamień:
Replace All.
Po gwiazdce jest spacja.
źródło
Przetłumaczyłem na PT-BR, bo tego też potrzebowałem.
(Zwróć uwagę, że zmieniłem spację na,
\
ponieważ potrzebowałem tylko nazwy pliku z ciągami ścieżek).źródło
Innym sposobem osiągnięcia tego jest poniżej
źródło
Miałem też takie zadanie i kiedy skończyłem, używając powyższej metody, pojawiła się nowa metoda: Dlaczego nie zrobisz tego:
Jak to brzmi?
źródło