结合名字的前两个字母和姓氏的前两个字母

prw*_*weq 9 worksheet-function microsoft-excel microsoft-excel-2013

我有一个用户名电子表格。

名字和姓氏位于 column 的同一单元格中A

是否有一个公式可以连接名字的前两个字母(第一个单词)和姓氏的前两个字母(第二个单词)?

例如John Doe,应该成为JoDo

我试过

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))
Run Code Online (Sandbox Code Playgroud)

但这给了我JoDoe结果。

Pet*_*erH 15

是的; 假设每个人只有一个名字和姓氏,并且这始终由一个空格分隔,您可以使用以下内容:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)
Run Code Online (Sandbox Code Playgroud)

我只能根据这些假设来回答这个问题,因为这是您提供的全部内容。

或者,如果您希望仍然包含一个空间:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)
Run Code Online (Sandbox Code Playgroud)

  • @RajeshS 我知道。这就是为什么我的回答以“假设每个人只有名字和姓氏”开头的原因 (4认同)
  • @prweq 没有​​问题,如果它适合你,就接受它 (2认同)
  • [程序员相信名字的谎言](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/); 并不是说如果您的软件没有国际影响力,从一开始就处理所有这些情况是有意义的 (2认同)

Bru*_*yne 11

为了解决这个问题,这里有一个解决方案,它将返回名字的前两个字符和姓氏的前两个字符,也考虑中间名。

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

感谢@Kyle 提供公式的主要部分

  • @Chronocidal 现在我们正在深入研究[程序员对名称的看法](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) (2认同)

Ste*_*ese 9

这是另一种方式...

工作表截图

  • 一个名字
  • 乙—— =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))


rob*_*CTS 5

首先,我想说PeterH 的回答是最简单易懂的。(虽然我更喜欢使用FIND()而不是SEARCH()- 少输入两个字符有助于避免 RSI ;-) )

另一种既不使用MID()LEFT()也不使用,RIGHT()而是用于REPLACE()删除名称中不需要的部分的替代答案如下:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")
Run Code Online (Sandbox Code Playgroud)

解释:

内部REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")删除从姓氏的第三个字符开始的字符,而外部删除从名字的第三个字符到空格的字符。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,"")
Run Code Online (Sandbox Code Playgroud)

通过替换FIND(" ",A1)IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)找到第二个空格(通过在第一个空格之后开始搜索空格)或错误。如果没有第二个空格,则查找第一个空格。
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,"")
Run Code Online (Sandbox Code Playgroud)

在这种情况下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()函数中来适应仅单个名称的情况(如果需要四个字符的结果),如下所示:

=IFERROR(solution, alternate_formula)

请注意,以上是通用案例公式,可能可以对特定解决方案进行更有效的修改。例如,如果在单个名称的情况下要求将前两个字母与后两个字母连接起来,可以通过这种方式更有效地调整PeterH 的答案

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)
Run Code Online (Sandbox Code Playgroud)


为了允许使用单个字母的名字或首字母(假设第二个字符不接受空格或点),以下可以与任何解决方案一起使用:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

请注意,单个字符可以是硬编码的,也可以是根据名称计算出来的。(或用于""删除空格或点。)


最后,如果你真的需要满足全名只有一个字符的情况(!),只需用另一个 IFERROR(). (当然,假设替代公式不处理这种特殊情况。)


附录 3:

最后,最后(不,真的* ;-) )来满足多个连续和/或前导/尾随空格的需要,使用TRIM(A1)代替A1.


* 我将保留单个字母姓氏的案例,例如 T 先生,作为读者练习。

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