Ich habe eine Tabelle mit Benutzernamen.
Der Vor- und Nachname befinden sich in derselben Spaltenzelle A
.
Gibt es eine Formel, die die ersten beiden Buchstaben des Vornamens (erstes Wort) und die ersten beiden Buchstaben des Nachnamens (zweites Wort) verkettet?
Zum Beispiel John Doe
sollte werden JoDo
.
Ich habe es versucht
=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))
aber das gibt mir JoDoe
als Ergebnis.
Antworten:
Ja; Angenommen, jede Person hat nur einen Vor- und Nachnamen, und dieser ist immer durch ein Leerzeichen getrennt. Sie können Folgendes verwenden:
Ich konnte diese Antwort nur auf diese Annahmen stützen, da dies alles ist, was Sie angegeben haben.
Oder wenn Sie möchten, dass ein Leerzeichen noch enthalten ist:
quelle
FIND()
anstelle vonSEARCH()
;-)) Da Sie davon ausgehen, dass es immer ein Leerzeichen gibt, kann Ihre zweite Formel vereinfacht werden=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
assuming each person only has a First and Last name
TRIM(LEFT(A1,2))
nur für den Fall, dass ihr Vorname nur einen Buchstaben enthält, aber es kann leicht genug sein, diese Sonderfälle auch manuell zu suchen.Um das Ganze abzurunden, gibt es hier eine Lösung, die die ersten beiden Zeichen des Vornamens und die ersten beiden Zeichen des Nachnamens zurückgibt, aber auch den zweiten Vornamen berücksichtigt.
Vielen Dank an @Kyle für den Hauptteil der Formel
quelle
~
anstelle von vier zu verwenden. Wenn Sie befürchten, dass eine Tilda als Teil eines Namens (!) Verwendet wird oder eher versehentlich eingegeben wurde, verwenden Sie einfach ein Zeichen, das auf keiner Tastatur angezeigt wird. Ich benutze lieber§
.¶
ist ein weiterer guter.Dies ist ein anderer Weg ...
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
quelle
=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Zunächst möchte ich sagen, dass die Antwort von PeterH am einfachsten und am einfachsten zu verstehen ist. (Obwohl ich
FIND()
lieber anstelle vonSEARCH()
- zwei Zeichen weniger eingeben möchte, hilft dies, RSI zu vermeiden ;-))Eine alternative Antwort, die weder verwendet
MID()
,LEFT()
nochRIGHT()
verwendetREPLACE()
, um die unerwünschten Teile des Namens zu entfernen, lautet wie folgt:Erläuterung:
Das Innere
REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
entfernt die Zeichen ab dem dritten Zeichen des Nachnamens, während das Äußere die Zeichen vom dritten Zeichen des Vornamens bis einschließlich des Leerzeichens entfernt.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
Nachtrag 1:
Die obige Formel kann auch angepasst werden, um einen einzelnen zweiten Vornamen zuzulassen:
durch Ersetzen
FIND(" ",A1)
durchIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
.FIND(" ", A1, FIND(" ",A1)+1)
findet das zweite Leerzeichen (indem die Suche nach dem Leerzeichen nach dem ersten Leerzeichen gestartet wird) oder Fehler auf andere Weise. findet das erste Leerzeichen, wenn kein zweites Leerzeichen vorhanden ist.IFERROR(find_second_space, FIND(" ",A1))
Diese (langatmige) Version erlaubt eine beliebige Anzahl von zweiten Vornamen:
In diesem Fall
FIND(" ",A1)
wird durch ersetztFIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))
.LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
zählt die Anzahl der Leerzeichen. ersetzt das letzte Leerzeichen durch . findet das erste, was dem Finden des letzten Leerzeichens entspricht.SUBSTITUTE(A1, " ", "§", count_of_spaces)
§
FIND("§", last_space_replaced_string)
§
(Das
§
könnte natürlich durch ein Zeichen ersetzt werden, das garantiert nicht in der vollständigen Namenszeichenfolge vorhanden ist. Eine allgemeinere, sicherere Alternative wäre die VerwendungCHAR(1)
.)Beachten Sie, dass die Antwort von BruceWayne natürlich die einfachste und am einfachsten zu verstehende Lösung ist, die eine beliebige Anzahl von zweiten Vornamen zulässt.Nun, das war es. Bis ich meine andere Antwort gepostet habe , ist das ;-)Nachtrag 2:
Alle Lösungen können so angepasst werden, dass sie nur den Fall eines einzelnen Namens berücksichtigen (wenn ein Ergebnis mit vier Zeichen erforderlich ist), indem sie in eine
IFERROR()
Funktion wie die folgende eingeschlossen werden:=IFERROR(solution, alternate_formula)
Beachten Sie, dass dies eine allgemeine Fallformel ist und möglicherweise eine effizientere Änderung an einer bestimmten Lösung vorgenommen werden kann. Wenn beispielsweise bei einem einzelnen Namen die ersten beiden Buchstaben mit den letzten beiden Buchstaben verbunden werden müssen, kann die Antwort von PeterH auf folgende Weise effizienter angepasst werden:
Um den Fall eines Vornamens eines einzelnen Buchstabens oder einer Initiale zu berücksichtigen (vorausgesetzt, ein Leerzeichen oder ein Punkt ist als zweites Zeichen nicht akzeptabel), kann Folgendes mit jeder Lösung verwendet werden:
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
Beachten Sie, dass das einzelne Zeichen entweder fest codiert oder aus dem Namen berechnet werden kann. (Oder verwenden Sie
""
, um das Leerzeichen oder den Punkt zu entfernen.)Wenn Sie sich wirklich um den Fall kümmern müssen, dass der vollständige Name nur ein einzelnes Zeichen (!) Ist, schließen Sie einfach die Formel mit nur einem Namen in ein anderes ein
IFERROR()
. (Vorausgesetzt natürlich, dass die alternative Formel diesen Sonderfall nicht berücksichtigt.)Nachtrag 3:
Schließlich, endlich (nein, wirklich * ;-)), um mehrere aufeinanderfolgende und / oder führende / nachfolgende Leerzeichen zu berücksichtigen, verwenden Sie
TRIM(A1)
stattdessenA1
.* Ich werde den Fall für einen einzelnen Buchstaben Nachnamen, wie Herr T., als Übung für den Leser verlassen.
quelle
Basierend auf dieser Antwort ist hier eine elegante Lösung, die mit einer beliebigen Anzahl von zweiten Vornamen funktioniert:
Erläuterung:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
Ersetzt die Zwischenworträume durch Leerzeichen, deren Anzahl der Länge der gesamten Zeichenfolge entspricht. Die Verwendung der Zeichenfolgenlänge anstelle einer beliebig großen Zahl garantiert, dass die Formel für Zeichenfolgen mit beliebiger Länge funktioniert, und bedeutet, dass dies effizient funktioniert.RIGHT(space_expanded_string, LEN(A1))
extrahiert das Wort ganz rechts, dem eine Reihe von Leerzeichen vorangestellt ist. * *TRIM(space_prepended_rightmost_word)
extrahiert das Wort ganz rechts.LEFT(rightmost_word, 2)
extrahiert die ersten beiden Zeichen des am weitesten rechts stehenden Wortes (Nachname).* Vorsichtsmaßnahme: Wenn ein Benutzername nachgestellte Leerzeichen enthalten kann, müssen Sie das erste Argument von
SUBSTITUTE()
, dhA1
, durch ersetzenTRIM(A1)
. Führende Leerzeichen und mehrere aufeinanderfolgende Leerzeichen zwischen Wörtern werden nur mit korrekt behandeltA1
.Ihren Versuch korrigieren
Wenn Sie sich Ihren Lösungsversuch genauer ansehen, scheinen Sie einer Arbeitsformel sehr nahe zu sein, um die ersten beiden Buchstaben des ersten Wortes (dh den Vornamen) und die ersten beiden Buchstaben des zweiten Wortes, falls vorhanden, zu verketten .
Beachten Sie, dass, wenn ein Benutzername Zweitnamen enthalten würde, die korrigierte Formel die ersten beiden Buchstaben fälschlicherweise aus dem ersten zweiten Vornamen anstelle des Nachnamens abrufen würde (vorausgesetzt, Sie beabsichtigen tatsächlich, sie aus dem Nachnamen zu extrahieren).
Wenn alle Benutzernamen nur aus einem Vornamen oder einem Vor- und einem Nachnamen bestehen, ist die Formel unnötig kompliziert und kann vereinfacht werden.
Um zu sehen, wie die Formel funktioniert, und sie so zu beheben, ist es einfacher, wenn sie wie folgt verschönert wird:
Um zu verstehen, wie es funktioniert, schauen Sie sich zunächst an, was passiert, wenn
A1
keine Leerzeichen enthalten sind (dh es enthält nur einen einzigen Namen). AlleIFERROR()
Funktionen werden mit ihren zweiten Argumenten ausgewertet, daFIND()
ein#VALUE!
Fehler zurückgegeben wird, wenn die Suchzeichenfolge nicht in der Zielzeichenfolge gefunden wird:Das dritte Argument von wird
MID()
mit Null ausgewertet, sodass die Funktionsausgaben""
und das Formelergebnis die ersten beiden Zeichen des einzelnen Namens sind.Schauen Sie sich nun an, wann es genau zwei Namen gibt (dh es gibt genau ein Leerzeichen). Die erste und die dritte
IFERROR()
Funktion werden nach ihren ersten Argumenten ausgewertet, die zweite nach ihrem zweiten Argument, daFIND(" ", SUBSTITUTE(A1," ","",1))
versucht wird, nach dem Entfernen des ersten und einzigen ein weiteres Leerzeichen zu finden:Gibt eindeutig
MID()
das zweite Wort (dh den Nachnamen) in seiner Gesamtheit zurück, und das Formelergebnis sind die ersten beiden Zeichen des Vornamens, gefolgt von allen Zeichen des Nachnamens.Der Vollständigkeit halber werden wir uns auch den Fall ansehen, in dem es mindestens drei Namen gibt, obwohl es jetzt ziemlich offensichtlich sein sollte, wie die Formel zu korrigieren ist. Dieses Mal
IFERROR()
bewerten alle Funktionen ihre ersten Argumente:Es ist etwas weniger klar als im vorherigen Fall, gibt jedoch
MID()
genau das gesamte zweite Wort (dh den ersten zweiten Vornamen) zurück. Das Formelergebnis sind also die ersten beiden Zeichen des Vornamens, gefolgt von allen Zeichen des ersten zweiten Vornamens.Offensichtlich besteht der Fix
LEFT()
darin, die ersten beiden Zeichen derMID()
Ausgabe abzurufen:Die oben erwähnte Vereinfachung soll ersetzt werden
LEFT(MID(…,…,…), 2)
durchMID(…,…,2)
:oder in einer Zeile:
Dies ist im Wesentlichen die Lösung von PeterH, die so modifiziert wurde, dass sie auch mit einzelnen Namen funktioniert (in diesem Fall sind das Ergebnis nur die ersten beiden Zeichen des Namens).
Hinweis: Die hübschen Formeln funktionieren tatsächlich, wenn sie eingegeben werden.
quelle