Mam arkusz kalkulacyjny nazw użytkowników.
Imiona i nazwiska znajdują się w tej samej komórce kolumny A
.
Czy istnieje formuła, która połączy dwie pierwsze litery imienia (pierwsze słowo) i dwie pierwsze litery nazwiska (drugie słowo)?
Na przykład John Doe
powinien zostać JoDo
.
próbowałem
=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))
ale to daje mi JoDoe
wynik.
Odpowiedzi:
Tak; zakładając, że każda osoba ma tylko imię i nazwisko, a to zawsze jest oddzielone spacją, której możesz użyć poniżej:
Mógłbym oprzeć tę odpowiedź tylko na tych założeniach, ponieważ jest to wszystko, co podałeś.
Lub jeśli chcesz, aby miejsce było nadal uwzględniane:
źródło
FIND()
zamiastSEARCH()
;-)) Ponieważ=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
assuming each person only has a First and Last name
TRIM(LEFT(A1,2))
na wypadek, gdyby ich imię zawierało tylko jedną literę, ale może być również łatwe ręczne sprawdzenie tych specjalnych przypadków.Podsumowując, oto rozwiązanie, które zwróci pierwsze dwa znaki imienia i pierwsze dwa znaki nazwiska, ale także uwzględni drugie imię.
Dzięki @Kyle za główną część formuły
źródło
~
zamiast czterech. Jeśli obawiasz się, że Tilda może być używana jako część nazwy (!) Lub, co bardziej prawdopodobne, została przypadkowo wpisana, po prostu użyj znaku, który nie pojawia się na żadnej klawiaturze. Wolę używać§
.¶
jest kolejnym dobrym.To inny sposób ...
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
źródło
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Po pierwsze, chciałbym powiedzieć, że odpowiedź PeterH jest najprostsza i najłatwiejsza do zrozumienia. (Chociaż wolę używać
FIND()
zamiastSEARCH()
- wpisanie dwóch mniej znaków pomaga uniknąć RSI ;-))Alternatywna odpowiedź, która ani nie używa
MID()
,LEFT()
aniRIGHT()
zamiast tego wykorzystujeREPLACE()
do usunięcia niechcianych części nazwy, jest następująca:Wyjaśnienie:
Wewnętrzne
REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
usuwa znaki od trzeciego znaku nazwiska, a zewnętrzne usuwa znaki od trzeciego znaku imienia do spacji włącznie.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
Dodatek 1:
Powyższą formułę można również dostosować, aby umożliwić utworzenie jednego drugiego imienia:
zastępując
FIND(" ",A1)
zIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
.FIND(" ", A1, FIND(" ",A1)+1)
znajduje drugą spację (rozpoczynając wyszukiwanie spacji po pierwszej spacji) lub w przeciwnym razie popełnia błędy. znajdzie pierwszą spację, jeśli nie ma drugiej spacji.IFERROR(find_second_space, FIND(" ",A1))
Ta wersja (z długim nawinięciem) pozwala na dowolną liczbę drugich imion:
W takim przypadku
FIND(" ",A1)
jest zastąpiony przezFIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))
.LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
liczy liczbę spacji. zamienia ostatnią spację na . znajduje pierwszą, która jest taka sama jak znalezienie ostatniej spacji.SUBSTITUTE(A1, " ", "§", count_of_spaces)
§
FIND("§", last_space_replaced_string)
§
(
§
Oczywiście można je zastąpić dowolnym znakiem, który nie istnieje w ciągu pełnej nazwy. Można by użyć bardziej ogólnej, bezpieczniejszej alternatywyCHAR(1)
).Zauważ, że oczywiście odpowiedź BruceWayne jest najprostszym i najłatwiejszym do zrozumienia rozwiązaniem, które pozwala na dowolną liczbę drugich imion.Tak było. Dopóki nie opublikowałem innej odpowiedzi , to znaczy ;-)Dodatek 2:
Wszystkie rozwiązania można dostosować tak, aby uwzględniały tylko jedną nazwę (jeśli wymagany jest wynik czterech znaków), zawijając je w
IFERROR()
funkcji takiej jak ta:=IFERROR(solution, alternate_formula)
Zauważ, że powyższe jest ogólną formułą przypadku i może być możliwe dokonanie bardziej wydajnej modyfikacji konkretnego rozwiązania. Na przykład, jeśli w przypadku pojedynczego imienia wymagane jest połączenie dwóch pierwszych liter z dwiema ostatnimi literami, odpowiedź PeterH można skuteczniej dostosować w ten sposób:
Aby uwzględnić przypadek pojedynczego imienia lub inicjału (zakładając, że spacja lub kropka nie są dopuszczalne jako drugi znak), można zastosować następujące rozwiązanie w przypadku dowolnego rozwiązania:
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
Pamiętaj, że pojedynczy znak może być zakodowany na stałe lub obliczony na podstawie nazwy. (Lub użyj,
""
aby usunąć spację lub kropkę.)Na koniec, jeśli naprawdę potrzebujesz uwzględnić przypadek, w którym pełna nazwa jest tylko jednym znakiem (!), Po prostu owiń formułę zawierającą tylko jedną nazwę inną
IFERROR()
. (Zakładając oczywiście, że alternatywna formuła nie zajmuje się tym szczególnym przypadkiem).Dodatek 3:
Wreszcie, wreszcie (nie, naprawdę * ;-)), aby obsłużyć wiele kolejnych i / lub wiodących / końcowych spacji, użyj
TRIM(A1)
zamiastA1
.* Opuszczę skrzynkę dla pojedynczego nazwiska, takiego jak pan T, jako ćwiczenie dla czytelnika.
źródło
W oparciu o tę odpowiedź oto eleganckie rozwiązanie, które działa z dowolną liczbą drugich imion:
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 znaczyA1
, zeTRIM(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:
Aby zrozumieć, jak to działa, najpierw spójrz na to, co się dzieje, gdy
A1
nie zawiera spacji (tzn. Zawiera tylko jedną nazwę). WszystkieIFERROR()
funkcje oceniają na swoje drugie argumenty, ponieważFIND()
zwraca#VALUE!
błąd, jeśli szukany ciąg nie został znaleziony w ciągu docelowym: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: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: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ówMID()
wyniku:Uproszczenie wspomniałem powyżej jest zastąpienie
LEFT(MID(…,…,…), 2)
zMID(…,…,2)
:lub w jednej linii:
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.
źródło