如何分割姓名以获取名字和姓氏?

如何分割姓名以获取名字和姓氏?

我有一列包含姓名列表,我希望另外两列包含提取名字和姓氏的函数。到目前为止,我有这个

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

相关内容