从单元中提取最后一个子string

我在一列中有名字。 我需要将该列中的姓氏拆分成另一列。

姓氏由右侧的空格分隔。

A2 = Alistair Stevens单元格中的内容A2 = Alistair Stevens和我在单元格B2input公式(我需要单元格B2 'Stevens' ),

我尝试使用以下公式:

 =RIGHT(A2,FIND(" ",A2,1)-1) =RIGHT(A2,FIND(" ",A2)) 

这两个公式都适用于这个单元格,但是当我将其填充/复制并粘贴到下面的单元格时,它不起作用。 我得到了错误的价值!

 A3 -> David Mckenzie B3 -> Mckenzie 

即使有中间名,这也是有效的:

 =MID(A2,FIND(CHAR(1),SUBSTITUTE(A2," ",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,LEN(A2)) 

如果你想要的一切,但最后的名字,看看这个答案 。

如果名称中有尾随空格,则可能需要通过上述公式中的TRIM(A2)replaceA2的所有实例来删除它们。

请注意,只有纯粹的机会,你的第一个公式=RIGHT(A2,FIND(" ",A2,1)-1)才能为Alistair Stevens 。 这是因为"Alistair"" Stevens"碰巧包含相同数量的字符(如果您计算" Stevens"的领先空间)。

由@Jean提供的答案提供了一个工作但模糊的解决scheme(尽pipe它不处理尾随空格)

作为替代考虑一个vba用户定义函数(UDF)

 Function RightWord(r As Range) As Variant Dim s As String s = Trim(r.Value) RightWord = Mid(s, InStrRev(s, " ") + 1) End Function 

在工作表中使用
=RightWord(A2)

尝试这个:

 =RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND(" ",TRIM(A2))) 

我能够复制/粘贴公式,它工作正常。

下面是一个Excel文本函数列表(2011年5月份,但在下次微软更改网站时会被打破)。 🙁

如果您期望,可以使用多阶段嵌套的IF()函数来处理中间名或首字母,标题等。 Excel公式不支持循环,所以你可以做什么有一些限制。

 Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)"))))) 

尝试这个。 希望它的作品。

在Excel中试试这个function:

 Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String Dim s() As String = Split(Text, SplitAt) If ReturnZeroBasedIndex <= s.Count - 1 Then Return s(ReturnZeroBasedIndex) Else Return "" End If End Function 

你这样使用它:

名字(A1)| 姓氏(A2)

单元格A1中的值= Michael Zomparelli

我想要列A2中的姓氏。

 =SPLITTEXT(A1, " ", 1) 

最后一个参数是您想要返回的从零开始的索引。 所以如果你分裂的空间字符索引0 =迈克尔和索引1 = Zomparelli

上述function是.Netfunction,但可以轻松转换为VBA。

RIGHT返回第一个参数右侧的第二个参数中的任意数量的字符。 所以,你想要你的列A的总长度 – 减去索引。 因此:

 =RIGHT(A2, LEN(A2)-FIND(" ", A2, 1)) 

而且你应该考虑在任何地方使用TRIM(A2)…

尝试这个:

 Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))