Kombination der ersten beiden Buchstaben vom Vornamen und der ersten beiden Buchstaben vom Nachnamen

9

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 Doesollte 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 JoDoeals Ergebnis.

prweq
quelle
2
Grundlegende Lektüre: Falschheit Programmierer glauben an Namen
StackOverthrow
Ist eine der Antworten der Trick? (Wenn ja, können Sie es bitte als die Antwort markieren, indem Sie auf das Häkchen links neben dem Beitrag
klicken

Antworten:

15

Ja; Angenommen, jede Person hat nur einen Vor- und Nachnamen, und dieser ist immer durch ein Leerzeichen getrennt. Sie können Folgendes verwenden:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

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:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)
PeterH
quelle
2
@prweq keine Probs, akzeptiere es als richtig, wenn es für dich funktioniert
PeterH
Einfachste und am einfachsten zu verstehende Lösung. (Nun, außer für die Verwendung FIND()anstelle von SEARCH();-)) Da Sie davon ausgehen, dass es immer ein Leerzeichen gibt, kann Ihre zweite Formel vereinfacht werden=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS
4
@ RajeshS Ich weiß. Deshalb beginnt meine Antwort mitassuming each person only has a First and Last name
PeterH
2
Falschheitsprogrammierer glauben an Namen ; nicht, dass es sinnvoll wäre, all diese Fälle von
Aaron
1
Ich schlage vor, 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.
Ingenieur Toast
11

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.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

Geben Sie hier die Bildbeschreibung ein

Vielen Dank an @Kyle für den Hauptteil der Formel

Bruce Wayne
quelle
1
Du hast mich geschlagen ;-) (Es war weit nach Mitternacht und ich muss schlafen - hatte vor, dies später zu meiner Antwort hinzuzufügen.) Eine leichte Verbesserung Ihrer Formel wäre, eine einzelne ~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.
RobinCTS
@BruceWayne ,, Ihre Formel ist kompetenter ,,, da nur auf Firts & Last Name zugegriffen wird, wird der zweite Vorname ignoriert ,,, Up Voted ☺
Rajesh S
@ RajeshS Was ist mit Leuten mit spanischen Namen , wie dem ehemaligen F1-Fahrer Fernando Alonso Díaz , der 1 Vornamen, 2 Nachnamen und keinen zweiten Vornamen hat? (Oder sogar König Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Chronocidal
2
@Chronocidal jetzt gehen wir das Kaninchenloch hinunter, was Programmierer über Namen glauben
BruceWayne
1
@robinCTS - Guter Anruf! Ich habe die Formel aus einer anderen Antwort (bearbeitet in) erhalten und nicht wirklich viel tiefer gegraben. Danke für die Tipps!
BruceWayne
9

Dies ist ein anderer Weg ...

Screenshot des Arbeitsblatts

  • Ein Name
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Stese
quelle
Sie könnten noch weiter gehen und all diese zusätzlichen Spalten entfernen, indem Sie sie zusammenführen=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH
Ja, das habe ich ein paar Momente später gemacht!
Stese
Ja, ich habe bemerkt, dass du die Antwort bearbeitet hast. Schöne Antwort!
PeterH
5

Zunächst möchte ich sagen, dass die Antwort von PeterH am einfachsten und am einfachsten zu verstehen ist. (Obwohl ich FIND()lieber anstelle von SEARCH()- zwei Zeichen weniger eingeben möchte, hilft dies, RSI zu vermeiden ;-))

Eine alternative Antwort, die weder verwendet MID(), LEFT()noch RIGHT()verwendet REPLACE(), um die unerwünschten Teile des Namens zu entfernen, lautet wie folgt:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

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:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

durch Ersetzen FIND(" ",A1)durch IFERROR(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:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

In diesem Fall FIND(" ",A1)wird durch ersetzt FIND("§", 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 Verwendung CHAR(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:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


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 einIFERROR() . (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)stattdessen A1.


* Ich werde den Fall für einen einzelnen Buchstaben Nachnamen, wie Herr T., als Übung für den Leser verlassen.

Hinweis: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")

robinCTS
quelle
1
Wie immer sehen Ihre Antworten so aus, als stammten sie aus einem erweiterten Excel-Benutzerhandbuch! Dies wäre die am besten gewählte Antwort, wenn Sie sie früher gepostet hätten!
PeterH
@ PeterH Danke für die Ergänzung. Ich bin erst über die Frage gestolpert, als sie auf der Hot Network Questions-Liste stand, also war ich etwas spät zur Party ;-)
robinCTS
2

Basierend auf dieser Antwort ist hier eine elegante Lösung, die mit einer beliebigen Anzahl von zweiten Vornamen funktioniert:

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

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(), dh A1, durch ersetzen TRIM(A1). Führende Leerzeichen und mehrere aufeinanderfolgende Leerzeichen zwischen Wörtern werden nur mit korrekt behandelt A1.


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:

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  IFERROR(
    FIND(" ", SUBSTITUTE(A1," ","",1)),
    LEN(A1)
  )
  - IFERROR(FIND(" ",A1), LEN(A1))
)


Um zu verstehen, wie es funktioniert, schauen Sie sich zunächst an, was passiert, wenn A1keine Leerzeichen enthalten sind (dh es enthält nur einen einzigen Namen). Alle IFERROR()Funktionen werden mit ihren zweiten Argumenten ausgewertet, da FIND()ein #VALUE!Fehler zurückgegeben wird, wenn die Suchzeichenfolge nicht in der Zielzeichenfolge gefunden wird:

=
LEFT(A1,2) &
MID(
  A1,
  LEN(A1) + 1,
  LEN(A1)
  -LEN(A1)
)

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, da FIND(" ", SUBSTITUTE(A1," ","",1))versucht wird, nach dem Entfernen des ersten und einzigen ein weiteres Leerzeichen zu finden:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  LEN(A1)
  - FIND(" ",A1)
)

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:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  FIND(" ", SUBSTITUTE(A1," ","",1))
  - FIND(" ",A1)
)

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 der MID()Ausgabe abzurufen:

=
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
)


Die oben erwähnte Vereinfachung soll ersetzt werden LEFT(MID(…,…,…), 2)durch MID(…,…,2):

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  2
)

oder in einer Zeile:

=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)

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.

robinCTS
quelle