我有一列包含姓名列表,我希望另外两列包含提取名字和姓氏的函数。到目前为止,我有这个
FirstName: =LEFT(D3,FIND(" ",D3))
LastName: =RIGHT(D3,LEN(D3)-FIND(" ",D3))
这对于“First Last”格式的姓名有效,但是当有额外信息(例如“Mr. First Last”)时则无效。
有没有更好的方法可以解决这个问题?
答案1
没有万无一失的方法,即使忽略标题、后缀等。考虑以下两个名称:
爱德华·范·海伦
戴维·李·罗斯
姓氏分别是“Van Halen”和“Roth”,但没有算法可以区分。
答案2
可能最适合 StackOverflow,但一般来说没有简单的方法。您可以有一个允许的前缀和后缀列表,以使您的算法更好。但请考虑...
Dr. Jack Johnson Smith, PhD
Mr. Jim S. Van De Berg, Jr.
... 仅根据空格进行分割永远不会完全正确。
答案3
也尝试思考不同的文化。
仅举一个荷兰语的例子:全名“Johannes Ernestus Maria van den Brink”分为名字“Johannes”,中间名“Ernestus Maria”,姓氏“van den Brink”(应该归入 B!)。
最好的解决方案(只有 100% 有效)是拥有单独的名称字段和导入方法,让用户可以在正确的字段中输入正确的部分。
所以...祝你好运...
答案4
您可以尝试将(Mr. Mrs. Dr. Ms. Miss 等)的值替换为空,然后尝试以这种方式拆分姓名。尝试测试一下单元格中有多少个空格,看看是否除了“First Last”之外还有更多内容。如果是,请将上面的值替换为空。如果其中仍有超过 1 个空格,请检查逗号并删除从逗号到末尾的所有内容。这应该有助于清理单元格。
—JFV