从不同格式的全名范围确定excel中的姓氏

从不同格式的全名范围确定excel中的姓氏,excel,if-statement,excel-formula,Excel,If Statement,Excel Formula,好的,我有一列全名,以几种不同的格式列出: lastName/firstName lastName, firstName firstName lastName firstName middleInitial lastName firstName middleName lastName 我需要创建一个从这些格式中提取lastName的公式 我提出了以下部分公式: 用于确定“/”,如果单元格不包含“/”,则该选项有效 =IF(FIND(“/”,D2)>0,LEFT(D2,FIND(“/”,D2)-

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

lastName/firstName
lastName, firstName
firstName lastName
firstName middleInitial lastName
firstName middleName lastName
我需要创建一个从这些格式中提取lastName的公式

我提出了以下部分公式:

  • 用于确定“/”,如果单元格不包含“/”,则该选项有效
    =IF(FIND(“/”,D2)>0,LEFT(D2,FIND(“/”,D2)-1)
    ,“如果D2不包含“/”,则会产生可怕的值!”,而不是显示此消息。”

  • 用于确定“,”,当单元格包含“,”时,该选项起作用
    =IF(FIND(“,”,D2)>0,左(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不包含“/”或“,”,而是包含…#value!”,则应填充此语句)

    另外,我在谷歌上搜索了一个解决方案,可以在姓氏只有一个单词的情况下提取姓氏(如果我想让圣保罗填充,这对约翰·圣保罗不起作用):

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

    所以

    如果有人有一个好主意如何写一个公式,将所有这三个结合起来,如果有人有一个好主意处理罕见的时间,我将有一个两个字的lastName值我会非常感谢

    最好的


    Andy

    我提供此答案作为纯Excel解决方案的替代方案,该解决方案将非常冗长、难以维护且容易出错。我们可以通过以下模式使用正则表达式轻松处理您的问题:

    ^[^\s,\/]+(?: \S+)? |[,\/].*$
    
    此模式将在每一行中匹配除姓氏以外的所有内容。然后,在执行正则表达式替换时,您可以简单地用空字符串替换匹配项

    可以轻松处理此问题的工具包括Notepad++和大多数IDE,它们也支持正则表达式

    我需要创建一个从这些格式中提取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)))))
    

    回答得很好。这可以在VBA中使用
    VBScript.RegExp
    对象。这在最后两个字上失败names@chrisneilsen无法辨别
    FIRST MIDDLE LAST
    FIRST LAST1 LAST2
    @Tim Biegeleisen:“无法辨别”:正确,如果不使用AI,就无法从全名字符串中检测名称部分。即使是人类有时也会失败,因此即使是AI有时也会失败。@AxelRichter真正的问题是OP收集了未规范化的全名数据,其中所有内容都混合在一起。在以下两个示例中,如何识别姓氏les?Frank Bruno先生和Bruno Frank先生…该订单是否也存在Lastname、Firstname、middlename?这太棒了!不幸的是,对于姓氏为两个单词的人,例如Lastname=“St.Pierre”,该订单仍然不起作用,但这对其他一切来说都太完美了!谢谢你花时间来构建它!我也许可以暂时不使用它。。。
    =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)))))