从一系列不同格式的全名中确定excel中的姓氏



好的,我有一列全名,以几种不同的格式列出:

lastName/firstName
lastName, firstName
firstName lastName
firstName middleInitial lastName
firstName middleName lastName

我需要创建一个从这些格式中提取lastName的公式。

我提出了以下偏公式:

  1. 用于确定"/",如果单元格确实包含"/"=IF(FIND("/",D2)>0,LEFT(D2,FIND("/",D2)-1),"如果D2不包含'/',则会导致可怕的#VALUE!"(

  2. 用于确定",",如果单元格包含","=IF(FIND(",",D2)>0, LEFT(D2, FIND(",",D2)-1),"如果D2不包含‘,’,则会导致#VALUE!而不是此消息"(

当我试图嵌入这些if语句时,我只会得到一个错误,而不是"/"或","类型的结果,而且在"else"情况下,除了错误之外,仍然不会得到任何结果。这是我的尝试:

=IF(FIND("/",D5)>0, LEFT(D5,FIND("/",D5)-1), IF(FIND(",",D5), LEFT(D5,(FIND(",",D5))-1),"这应该是第一个嵌入的‘if’的结束,如果D5不包含‘/’或‘,’而是…#值,则应填充此语句!"(

此外,我还在谷歌上搜索了一个解决方案,如果lastName只有一个单词,就可以提取lastName(如果我想让圣保罗填充,它对John St.Paul不起作用(:

IF(RIGHT(D5,LEN(D5)-FIND(" ",SUBSTITUTE(D2," "," ",LEN(D5)-LEN(SUBSTITUTE(D5," ",""))))))

我不是百分之百地关注这一点,但它花了更多的时间盯着它看。我知道我能理解它在说什么,但在这个时候,我无法在走到这一步之前让我的原始功能不失败。

所以。。。

如果有人很清楚如何写出一个将这三者结合在一起的公式,如果有人对处理罕见情况有很好的想法,我将为lastName提供两个单词的值,我将非常感谢!

最佳,

Andy

我提供这个答案是作为纯基于Excel的解决方案的替代方案,该解决方案非常冗长,难以维护,而且容易出错。使用regex,我们可以很容易地处理您的问题,其模式如下:

^[^s,/]+(?: S+)? |[,/].*$

此模式将在每一行中匹配的所有内容,姓氏除外。然后,在进行正则表达式替换时,您可以简单地将匹配项替换为空字符串。

演示

可以轻松处理这一问题的工具包括Notepad++和大多数IDE,它们也支持regex。

我需要创建一个公式,从这些格式中提取lastName。

Excel不是为文本处理而设计的,有更好的方法,但它可以实现您所寻求的,假设您的示例位于A1开头的第A列,并且您将复制以下内容:

=IF(LEN(A1)>LEN(SUBSTITUTE(A1,"/","")),LEFT(A1,FIND("/",A1)-1),IF(LEN(A1)>LEN(SUBSTITUTE(A1,",","")),LEFT(A1,FIND(",",A1)-1),IF(LEN(A1)=1+LEN(SUBSTITUTE(A1," ","")),MID(A1,FIND(" ",A1)+1,LEN(A1)),MID(MID(A1,FIND(" ",A1)+2,LEN(A1)),FIND(" ",MID(A1,FIND(" ",A1)+1,LEN(A1))),LEN(A1)))))

最新更新