我在excel中有一个字段(列),格式为“LastName,FirstName MiddleInitial”,在姓氏和名字后面有逗号,中间名和第一个名字之间有第二个空格(no逗号后面的逗号)。有没有办法确定哪些单元格在右侧有一个中间的初始值,然后消除所有单元格的中间初始值,使得输出看起来像“LastName,FirstName”?
谢谢!
答案 0 :(得分:1)
您要做的是能够将字段解析为多个字段,然后使用简单的excel公式重新加入。要获取一个字段并将其放入多个列,您可以使用以下方法进行"文本到列"
如果您有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)))))