【发布时间】:2020-01-15 16:00:42
【问题描述】:
在我的 excel 文件列 G 中,我有姓氏 + 名字 + 中间名的名字。
例如 Tasha,William P 是样本名称,Tasha 是姓氏,William 是名字,P 是中间名。我能够通过=LEFT(G2, FIND(",", G2)-1) 提取姓氏,但不知道提取中间名和名字的好方法是什么。如何用excel公式提取名字和中间名?
【问题讨论】:
标签: excel excel-formula extract
在我的 excel 文件列 G 中,我有姓氏 + 名字 + 中间名的名字。
例如 Tasha,William P 是样本名称,Tasha 是姓氏,William 是名字,P 是中间名。我能够通过=LEFT(G2, FIND(",", G2)-1) 提取姓氏,但不知道提取中间名和名字的好方法是什么。如何用excel公式提取名字和中间名?
【问题讨论】:
标签: excel excel-formula extract
=RIGHT(G2,1)
中间名。
=LEFT(G2,(FIND(",",G2,1)-1))
名字。
=TRIM(MID(SUBSTITUTE(G2, " ", REPT(" ", 99)),2 * 99 - 98,99))
姓氏。
【讨论】:
方法一使用LEFT+RIGHT+MID+FIND函数
名字:=MID(A2,FIND(",",A2)+2,FIND(" ",A2,FIND(" ",A2)+1)-FIND(",",A2)-2)
中间名:=RIGHT(A2,LEN(A2)-FIND(" ",A2,FIND(" ",A2)+1))
姓氏:=LEFT(A2,FIND(",",A2)-1) 和你一样
First Name 的查找逻辑是查找,(space) 和第二个(space) 的位置并返回其间的字符。 Middle Name 的逻辑是找到第二个(space) 并返回右边的任何内容。
方法二使用FILTERXML+SUBSTITUTE函数
名字:=FILTERXML("<data><a>"&SUBSTITUTE(SUBSTITUTE(A7,",","")," ","</a><a>")&"</a></data>","/data/a[2]")
中间名:=FILTERXML("<data><a>"&SUBSTITUTE(SUBSTITUTE(A7,",","")," ","</a><a>")&"</a></data>","/data/a[3]")
姓氏:=FILTERXML("<data><a>"&SUBSTITUTE(SUBSTITUTE(A7,",","")," ","</a><a>")&"</a></data>","/data/a[1]")
逻辑是使用 SUBSTITUTE 将全名转换为如下内容:
<data><a>姓氏</a><a>名字</a><a>中间名</a></data>
然后使用 FILTERXML 根据其在 XML 脚本中的顺序 1, 2 or 3 返回所需的名称。
关于这个公式背后的逻辑,你可以阅读这篇文章:Extract Words with FILTERXML。
【讨论】: