まず、PeterHの答えが最も簡単で理解しやすいと思います。(私の好みは-のFIND()
代わりに使用することですが、SEARCH()
2つの少ない文字を入力するとRSIを回避するのに役立ちます;-))
どちらの用途があることの代替答えMID()
、LEFT()
でもRIGHT()
、その代わりに使用してREPLACE()
、次のように名前の不要な部分を削除するには、次のとおりです。
=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")
説明:
インナーREPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
は姓の3文字目以降の文字を削除し、アウターは名の3文字目からスペースまでの文字を削除します。REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
補遺1:
上記の式は、単一のミドルネームを許可するように調整することもできます。
=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")
と置き換えることFIND(" ",A1)
によりIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
。
FIND(" ", A1, FIND(" ",A1)+1)
(最初のスペースの後にスペースの検索を開始することによって)2番目のスペースを見つけるか、それ以外の場合はエラーを見つけます。2番目のスペースがない場合は、最初のスペースを検索します。
IFERROR(find_second_space, FIND(" ",A1))
この(長い)バージョンでは、ミドルネームをいくつでも使用できます。
=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")
この場合FIND(" ",A1)
はに置き換えられFIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))
ます。
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
スペースの数を数えます。最後のスペースをに置き換えます。最後のスペースを見つけることと同じである最初を見つけます。
SUBSTITUTE(A1, " ", "§", count_of_spaces)
§
FIND("§", last_space_replaced_string)
§
(§
もちろん、完全な名前の文字列に存在しないことが保証されている任意の文字に置き換えることができます。より一般的で安全な代替手段は、を使用することCHAR(1)
です。)
もちろん、BruceWayneの答えは、ミドルネームをいくつでも許可する最も簡単で理解しやすい解決策であることに注意してください。まあそうだった。私が他の答えを投稿するまで、それは;-)
補遺2:
すべてのソリューションは、次のIFERROR()
ような関数内でそれらをラップすることにより、単一の名前のみのケース(4文字の結果が必要な場合)に対応するように適合させることができます。
=IFERROR(solution, alternate_formula)
上記は一般的なケースの式であり、特定のソリューションをより効率的に修正できる可能性があることに注意してください。たとえば、単一の名前の場合の要件が最初の2文字と最後の2文字を結合することである場合、PeterHの回答は次のようにしてより効率的に適応できます。
=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)
1文字のファーストネームまたはイニシャル(大文字またはスペースまたはドットが2番目の文字として受け入れられないと想定)のケースを考慮に入れるために、以下を任意のソリューションで使用できます。
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
単一の文字は、ハードコーディングすることも、名前から計算することもできます。(または""
、スペースまたはドットを削除するために使用します。)
最後に、フルネームが1文字のみ(!)である場合に本当に対応する必要がある場合は、単一名のみの式を別ので ラップしIFERROR()
ます。(もちろん、代替式はその特殊なケースを処理しないと仮定します。)
補遺3:
最後に、最後に(いいえ、本当に* ;-))複数の連続するスペース、および/または先頭/末尾のスペースに対応するTRIM(A1)
には、の代わりにを使用しますA1
。
*読者のために、T氏のように1文字の姓の場合はそのままにしておきます。
ヒント: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")