从Excel字段中解析出名字和姓氏

时间:2014-11-10 21:47:20

标签: excel format excel-formula data-cleaning

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

Text to Columns

如果您有3列文字,则可以在要获得该值的列中使用类似= A1&","& B1的公式将前两列组合在一起。 (在我的例子中,姓氏将在A1中,而名字在B1中)

答案 1 :(得分:0)

您也可以在不更改原始数据的情况下将其作为单元格公式。我使用在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)))))