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)
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)
首先,我想说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, "")