【问题标题】:Excel formula to rearrange LastName, Firstname MiddleInitial to FirstName LastnameExcel 公式重新排列姓氏,名字 MiddleInitial 到 FirstName Lastname
【发布时间】:2015-07-07 23:20:24
【问题描述】:

我需要一些关于重新排列名称的公式的帮助。我发现很多公式在某些情况下有效,但没有一个可以处理我遇到的所有情况。

简而言之,这是名称列表和所需的输出:

Original names              Desired Output
John, James J               James John
Junior, Lake                Lake Junior
Mitchel, Fields M           Fields Mitchel
Rothschild Jr., Michael K   Michael Rotschild
Sally, Sue L                Sue Sally
Rinkel, Michael             Michael Rinkel
Rivel, Nicholas L           Nicholas Rivel
Hurwitz Sr., Susan          Susan Hurwitz

我目前的公式是: =TRIM(PROPER(TRIM(IF(ISERROR(FIND(",",A1,1)),A1,MID(A1,FIND(",",A1,1)) +1,IF(ISERROR(FIND(" ",A1,FIND(",",A1,1)+2)),LEN(A1),FIND(" ",A1,FIND(",",A1,1 )+2))-FIND(",",A1,1))))&" "&LEFT(A1,IF(ISERROR(FIND(",",A1,1)),LEN(A1),FIND(" ,",A1,1)-1))))

它是由我发现的其他一些公式拼凑而成的,如果存在则消除中间声母,但如果存在则不消除 Sr. 或 Jr.。

【问题讨论】:

  • Howell III, Thurston 呢?
  • 确定吗?不知道你的意思...

标签: excel excel-formula


【解决方案1】:

解析名称有很多细微差别,只要您认为自己已经涵盖了所有可能性,就会有新的可能性出现。如果您保留用户定义的公式(又名 UDF),您可以快速添加新的编码流程来解决新问题。

Public Function fcn_First_Last_Name(sNAM As String)
    Dim sTMP As String, v As Long, vDELs As Variant, vNAMs As Variant
    sTMP = Application.Trim(sNAM)
    vDELs = Array(" Jr.", " Sr.", " III", " II")
    sTMP = Replace(sTMP, Chr(160), Chr(32))
    For v = LBound(vDELs) To UBound(vDELs)
        sTMP = Replace(sTMP, vDELs(v), vbNullString, compare:=vbTextCompare)
    Next v
    If Asc(Mid(sTMP, Len(sTMP) - 1, 1)) = 32 Then sTMP = Trim(Left(sTMP, Len(sTMP) - 1))
    vNAMs = Split(sTMP, Chr(44))
    If CBool(UBound(vNAMs)) Then
        fcn_First_Last_Name = vNAMs(UBound(vNAMs)) & Chr(32) & vNAMs(LBound(vNAMs))
    Else
        fcn_First_Last_Name = vNAMs(UBound(vNAMs))
    End If
End Function

这应该让你开始。当您添加新的例程以应对新的困难时,这也应该被证明是一种很好的学习体验。

一旦您在 VBA 代码模块表中使用它,就可以像使用任何其他工作表公式一样使用它。示例:

        

【讨论】:

  • 谢谢吉普!过去几个月我一直在学习 VBA,但仍在使用 50/50 w/ 公式。
【解决方案2】:

另一种可能性,但非常笨拙:

=MID(A2,FIND(", ",A2,1)+2,IFERROR((FIND(" ",A2,FIND(", ",A2,1)+2)-4)-FIND(", ",A2,1)+2,LEN(A2)))&" "&IFERROR(LEFT(A2,FIND(" ",LEFT(A2,FIND(", ",A2,1)-1))-1),LEFT(A2,FIND(", ",A2,1)-1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多