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