从单元格中提取最后一个子字符串

时间:2011-05-26 03:11:08

标签: excel excel-2007 worksheet-function

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

姓氏由右侧的空格分隔。

单元格A2 = Alistair Stevens中的内容我输入了单元格B2中的公式(我需要'Stevens'中的B2}

我尝试使用以下公式:

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

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

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

A3 -> David Mckenzie

B3 -> Mckenzie

9 个答案:

答案 0 :(得分:47)

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

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

如果您想要一切但是姓氏,请查看this answer

如果您的名字中有尾随空格,那么您可能希望通过在上面的公式中将A2的所有实例替换为TRIM(A2)来删除它们。

请注意,您的第一个公式=RIGHT(A2,FIND(" ",A2,1)-1)只适用于Alistair Stevens。这是因为"Alistair"" Stevens"碰巧包含相同数量的字符(如果计算" Stevens"中的前导空格)。

答案 1 :(得分:4)

@Jean提供的答案提供了一个有效但不起眼的解决方案(尽管它不处理尾随空格)

作为替代方案,请考虑使用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)

答案 2 :(得分:1)

如果您想获得文字中倒数第二个单词,可以将此宏用作电子表格中的函数:

Public Function Get2ndText(S As String) As String

Dim sArr() As String
Dim i As Integer
sArr = Split(S, " ")

'get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)

End Function

然后在电子表格B1中作为文字:

CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126
在B2中

你的公式将是:

=Get2ndText(B1)

结果将是

TX

答案 3 :(得分:0)

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

试试这个。希望它有效。

答案 4 :(得分:0)

在Excel中尝试此功能:

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)

最后一个参数是您想要返回的从零开始的索引。因此,如果你拆分空格char,则索引0 =迈克尔,索引1 = Zomparelli

上述功能是.Net功能,但可以很容易地转换为VBA。

答案 5 :(得分:0)

更简单的是: =TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," ",REPT(" ",99)),99))

如果您确定自己的数据不包含任何不需要的空格,则可以使用A2代替TRIM(A2)

基于Rick Rothstein解释的概念: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String

抱歉是捣蛋鬼!

答案 6 :(得分:-1)

RIGHT返回第一个参数右边第二个参数中的任意数量的字符。因此,您希望列A的总长度减去索引。因此:

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

你应该考虑在它出现的任何地方使用TRIM(A2)......

答案 7 :(得分:-1)

试试这个:

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

我能够复制/粘贴公式并且工作正常。

以下是Excel text functions的列表(2011年5月有效,但在下次Microsoft更改其网站时可能会被破坏)。 : - (

如果您期望它们,您可以使用多阶段嵌套的IF()函数来处理中间名称或缩写,标题等。 Excel公式不支持循环,因此您可以执行的操作有一些限制。

答案 8 :(得分:-1)

试试这个:

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