【问题标题】:Parsing out First and Last name from Excel field从 Excel 字段中解析名字和姓氏
【发布时间】:2015-01-07 08:01:36
【问题描述】:

我在 excel 中有一个字段(列),格式为“LastName,FirstName MiddleInitial”,在姓氏和名字之后的逗号之间有一个空格,中间名和名字之间有第二个空格(没有名字后加逗号)。有没有办法确定哪些单元格的右侧有中间名首字母,然后消除所有单元格的中间名首字母,使输出看起来像“LastName,FirstName”?

谢谢!

【问题讨论】:

    标签: excel format excel-formula data-cleaning


    【解决方案1】:

    您也可以在不更改原始数据的情况下将其用作单元格公式。我使用How to split a string based on “:” in MS-Excel? 上的模型构建了这个,在 SuperUser 上。 假设你在 a1 中有一个名字(Public,John Q):

    =LEFT(A1,FIND(" ",A1)) & LEFT(MID(A1,FIND(" ",A1)+1,LEN(A1)),IFERROR(FIND(" ",MID(A1,FIND(" ",A1)+1,LEN(A1)))-1,LEN(MID(A1,FIND(" ",A1)+1,LEN(A1)))))

    看起来很复杂,其实不然:

    使用这两个组件:

    • 获取字符串中第一个空格左侧的所有内容:LEFT(A1,FIND(" ",A1))
    • 获取字符串中第一个空格右侧的所有内容:MID(A1,FIND(" ",A1)+1,LEN(A1)))

    我们可以抓住这些碎片:

    • 获取姓氏:LEFT(A1,FIND(",",A1)+1)

    • 获取名字和中间名:MID(A1,FIND(" ",A1)+1,LEN(A1)))

    然后通过将“空格左侧”结构放在“字符串右侧”结构周围进行递归:

    MID( LEFT(A1,FIND(",",A1)+1) ,FIND(" ", LEFT(A1,FIND(",",A1)+1 ) )+1,LEN( LEFT(A1,FIND(",",A1)+1) )))

    除非没有第二个空格(当没有中间名时)。这就是 Iferror 的用途 - 在这种情况下,您需要在第一个空格之后得到的整个长度:

    • LEFT(MID(A1,FIND(" ",A1)+1,LEN(A1)),IFERROR(FIND(" ",MID(A1,FIND(" ",A1)+1,LEN(A1)))-1,LEN(MID(A1,FIND(" ",A1)+1,LEN(A1)))))

    将它们放在一起为lastname, firstname

    • =LEFT(A1,FIND(" ",A1)) & LEFT(MID(A1,FIND(" ",A1)+1,LEN(A1)),IFERROR(FIND(" ",MID(A1,FIND(" ",A1)+1,LEN(A1)))-1,LEN(MID(A1,FIND(" ",A1)+1,LEN(A1)))))

    【讨论】:

      【解决方案2】:

      您想要做的是能够将字段解析为多个字段,然后使用简单的 excel 公式重新加入。要获取一个字段并将其放入多个列中,您可以对“文本到列”使用以下方法

      Text to Columns

      一旦您有 3 列文本,您可以在您希望获得值的列中使用 =A1&"、"&B1 等公式将前两列组合在一起。 (在我的示例中,姓氏在 A1 中,名字在 B1 中)

      【讨论】:

      • 谢谢!像魅力一样工作。
      猜你喜欢
      • 2022-12-09
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多