我的情况是,我想编写一个方便的公式来帮助加快某些速度,其中之一就是将各种格式的名称转换为统一的格式。
这些名称可能看起来像以下三种情况之一:
Smith, John
Fry, Philip J
Green, Gregory (Greg)
我正在尝试编写一个公式,以便这三种情况如下所示:
John Smith
Philip Fry
Greg Green
我已经写了一些公式,但是我遇到了困难。到目前为止,我所拥有的是:
=IF(ISNUMBER(SEARCH("(",A7)),TEXTJOIN(" ",TRUE,MID(A7,SEARCH("(",A7)+1,SEARCH(")",A7)-SEARCH("(",A7)-1),LEFT(A7,FIND(",",A7,1)-1)),TEXTJOIN(" ",TRUE,"first",LEFT(A7,FIND(",",A7,1)-1)))
这有点乱,但这是我目前能得到的。这将给我以下结果:
first Smith
first Fry
Greg Green
因此,当某人没有括号中的昵称时,我有一个占位符用于获取名字。但是,我似乎无法想出公式的其余部分,以便获取逗号后的名字(以及由此产生的空格),但忽略中间名首字母之前的任何空格(如果存在)。
有人能帮我或者给我一些指点吗?谢谢!
答案1
它首先查找是否存在任何单词()
,然后删除介于两者之间的所有内容,
,(
然后创建一个伪 xml 语句,FILTERXML 首先将第二个名称再将第一个名称传递给 TEXTJOIN:
=TEXTJOIN(" ",TRUE,FILTERXML("<a><b>"&SUBSTITUTE(TRIM(LEFT(A1,FIND(",",A1)-1)& " " &MID(LEFT(A1,FIND(")",A1&")")-1),IFERROR(FIND("(",A1)+1,FIND(",",A1)+1),999))," ","</b><b>")&"</b></a>","//b["&{2,1}&"]"))
根据版本的不同,退出编辑模式时可能需要使用 Ctrl-Shift-enter 而不是 Enter。
答案2
我在数组公式方面遇到了一些问题,所以我继续使用替换函数完成公式,以检查姓名中有多少个空格。如果某人有多个姓氏,我通过仅检查姓和名之间逗号后的空格来解决这个问题。
可行的(并且非常丑陋的)公式是:
=IF(ISNUMBER(SEARCH("(",A1)),TEXTJOIN(" ",TRUE,MID(A1,SEARCH("(",A1)+1,SEARCH(")",A1)-SEARCH("(",A1)-1),LEFT(A1,FIND(",",A1,1)-1)),TEXTJOIN(" ",TRUE,IF(LEN(RIGHT(A1,LEN(A1)-FIND(",",A1)))-LEN(SUBSTITUTE(RIGHT(A1,LEN(A1)-FIND(",",A1))," ",""))=1,RIGHT(A1,LEN(A1)-FIND(",",A1)-1),LEFT(RIGHT(A1,LEN(A1)-FIND(",",A1)-1),FIND(" ",RIGHT(A1,LEN(A1)-FIND(",",A1)-2)))),LEFT(A1,FIND(",",A1,1)-1)))