重温 Excel 解析

Revisiting Excel parsing

我已经了解了这些的变体,并且每个变体都有不同的解决方案,具体取决于名称在单元格中的位置。让我说清楚。我有一个 excel sheet 包含我大学时代同事的名字。名称没有特定格式。 "Name" 列的名称如下:

1) Dipak C.乔普拉 2) 阿马尔·D·帕萨克 3) 劳拉奈克 4) 瑞诗玛·拉克斯曼·巴夫萨尔

因此可以看出,有些只有中间名首字母,有些带有句号,有些没有,有些则有完整的中间名。我想做的是用姓氏在另一列中重写这些名字,结果如下:

1) Chopra Dipak C. 2) 巴达阿玛 D 3)奈克拉腊 4) Bhavsar Reshma Laxman

我可以做到,但我必须根据单元格中的名称使用不同的公式:例如

=TRIM(RIGHT(B2,LEN(B2)-FIND(" ",B2)) & " " & LEFT(B2,FIND(" ",B2))) for the 3rd entry
=TRIM(RIGHT(B4,LEN(B4)-FIND(" ",B4)-1) & " " & LEFT(B4,FIND(" ",B4)+1)) for the 2nd entry     
=TRIM(RIGHT(B13,LEN(B13)-FIND(" ",B13,FIND(" ",B13)+1))&" "&LEFT(B13,FIND(" ",B13,FIND(" ",B13)+1))) for the 4th entry. 

我的问题是如何修改这个公式以在上述所有情况下都得到我想要的结果?

=IF(ISERROR(FIND(" ",B2)),B2,RIGHT(B2,LEN(B2)-FIND("~",SUBSTITUTE(B2," ","~",LEN(B2)-LEN(SUBSTITUTE(B2," ","")))))&" "&LEFT(B2,FIND("~",SUBSTITUTE(B2," ","~",LEN(B2)-LEN(SUBSTITUTE(B2," ",""))))-1))

它涉及进行反向字符串搜索以找到最后一个 space,然后使用它的位置将姓氏切掉,然后将字符串的其余部分添加到末尾,如果没有 spaces 在字符串中它将只是 return 值是 B2

美化了

   =IF(
    ISERROR(
        FIND(
            " ",
            B2
        )
    ),
    B2,
    RIGHT(
        B2,
        LEN(
            B2
        ) -
        FIND(
            "~",
            SUBSTITUTE(
                B2,
                " ",
                "~",
                LEN(
                    B2
                ) -
                LEN(
                    SUBSTITUTE(
                        B2,
                        " ",
                        ""
                    )
                )
            )
        )
    ) & " " &
    LEFT(
        B2,
        FIND(
            "~",
            SUBSTITUTE(
                B2,
                " ",
                "~",
                LEN(
                    B2
                ) -
                LEN(
                    SUBSTITUTE(
                        B2,
                        " ",
                        ""
                    )
                )
            )
        ) - 1
    )
)