W oparciu o tę odpowiedź oto eleganckie rozwiązanie, które działa z dowolną liczbą drugich imion:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Wyjaśnienie:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
zastępuje spacje między wyrazami spacjami równymi liczbowo długości całego łańcucha. Użycie długości łańcucha zamiast arbitralnie dużej liczby gwarantuje, że formuła działa na łańcuch o dowolnej długości i oznacza, że działa to skutecznie.
RIGHT(space_expanded_string, LEN(A1))
wyodrębnia najbardziej prawe słowo poprzedzone wiązką spacji. *
TRIM(space_prepended_rightmost_word)
wyodrębnia najbardziej prawe słowo.
LEFT(rightmost_word, 2)
wyodrębnia dwa pierwsze znaki najbardziej wysuniętego w prawo słowa (nazwisko).
* Zastrzeżenie: Jeśli jest to możliwe, że nazwa zawiera spacje, należy wymienić pierwszy argument SUBSTITUTE()
, to znaczy A1
, ze TRIM(A1)
. Wiodące spacje i wiele kolejnych spacji między słowami są obsługiwane poprawnie tylko za pomocą A1
.
Naprawianie twojej próby
Przy bliższym przyjrzeniu się próbowanemu rozwiązaniu wygląda na to, że byłeś bardzo blisko działającej formuły, która łączy dwie pierwsze litery pierwszego słowa (tj. Imię) i dwie pierwsze litery drugiego słowa, jeśli takie istniały.
Zauważ, że jeśli nazwa użytkownika miałaby zawierać drugie imiona, poprawiona formuła niepoprawnie przechwyciłaby dwie pierwsze litery z pierwszego drugiego imienia zamiast z nazwiska (zakładając, że naprawdę chcesz wyodrębnić je z nazwiska).
Ponadto, jeśli wszystkie nazwy użytkowników składają się tylko z imienia lub imienia i nazwiska, wówczas formuła jest niepotrzebnie skomplikowana i można ją uprościć.
Aby zobaczyć, jak działa formuła, a więc ją naprawić, łatwiej jest ją wstępnie ująć, na przykład:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Aby zrozumieć, jak to działa, najpierw spójrz na to, co się dzieje, gdy A1
nie zawiera spacji (tzn. Zawiera tylko jedną nazwę). Wszystkie IFERROR()
funkcje oceniają na swoje drugie argumenty, ponieważ FIND()
zwraca #VALUE!
błąd, jeśli szukany ciąg nie został znaleziony w ciągu docelowym:
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Trzeci argument argumentu MID()
jest równy zero, więc funkcja wyprowadza ""
i wynikiem formuły są pierwsze dwa znaki pojedynczej nazwy.
Teraz spójrz na to, kiedy są dokładnie dwie nazwy (tj. Jest dokładnie jedna spacja). Pierwsza i trzecia IFERROR()
funkcja oceniają na pierwsze argumenty, ale druga na drugi argument, ponieważ FIND(" ", SUBSTITUTE(A1," ","",1))
próbuje znaleźć inną spację po usunięciu pierwszego i tylko jednego:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Oczywiście MID()
zwraca drugie słowo (tj. Nazwisko) w całości, a wynikiem formuły są pierwsze dwa znaki imienia, po których następują wszystkie znaki nazwiska.
Dla zachowania kompletności przyjrzymy się również przypadkowi, w którym istnieją co najmniej trzy nazwy, chociaż teraz powinno być dość oczywiste, jak naprawić formułę. Tym razem wszystkie IFERROR()
funkcje oceniają na pierwsze argumenty:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
Jest nieco mniej wyraźny niż w poprzednim przypadku, ale MID()
zwraca dokładnie całe drugie słowo (tj. Pierwsze drugie imię). Tak więc wynikiem formuły są pierwsze dwa znaki pierwszego imienia, po których następują wszystkie znaki pierwszego drugiego imienia.
Oczywiście poprawką jest użycie LEFT()
dwóch pierwszych znaków MID()
wyniku:
=
LEFT(A1,2) &
LEFT(
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
),
2
)
Uproszczenie wspomniałem powyżej jest zastąpienie LEFT(MID(…,…,…), 2)
z MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
lub w jednej linii:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
Jest to zasadniczo rozwiązanie PeterH zmodyfikowane tak, aby działało również z pojedynczymi nazwami (w takim przypadku wynikiem są tylko dwa pierwsze znaki nazwy).
Uwaga: wstępnie zapisane formuły faktycznie działają, jeśli zostaną wprowadzone.