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

问题描述 投票:0回答:11

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

姓氏从右侧以空格分隔。

单元格

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

我尝试使用以下公式:

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

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

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

预期结果:

B3 -> Mckenzie

实际结果:

B3 -> enzie


excel excel-formula excel-2007
11个回答
61
投票

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

如果您想要除姓氏以外的所有内容,请查看
此答案

如果您的名称中存在尾随空格,则您可能需要通过将上述公式中的所有

A2

实例替换为

TRIM(A2)
来删除它们。

请注意,您的第一个公式

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

适用于

Alistair Stevens
纯属偶然。这是因为
"Alistair"
" Stevens"
恰好包含相同数量的字符(如果计算
" Stevens"
中的前导空格)。
    


6
投票

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

抱歉成为死灵海报!


2
投票

TEXTAFTER(A2," ",-1)

这将返回最后一个空格之后出现的姓氏(-1 个实例从右到左搜索)

对于文件名也非常有用,例如

=HYPERLINK(A2,TEXTAFTER(A2,"\",-1))

如果 A 列中有完整路径,这将创建一个链接以轻松打开文件,同时仅显示文件名


1
投票

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 = Michael,索引 1 = Zomparelli

上述函数是.Net函数,但可以轻松转换为VBA。


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



0
投票
试试这个。希望它有效。


0
投票
CHOOSECOLS

TEXTSPLIT
函数的组合来获得所需的结果。¹
产生预期结果的工作公式如下:

=CHOOSECOLS(TEXTSPLIT(A2, " "), -1)

在此处阅读有关功能的信息:

    选择课程
  • 文本分割
1
不幸的是,这些函数的文档并没有指出引入这些函数的 Excel 版本,因此我目前无法确定支持这些函数的 Excel 的最低版本。为了确保您拥有这些功能,您必须使用最新版本的 Microsoft Office 365。


-1
投票

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

我能够复制/粘贴公式并且效果很好。

这里是

Excel 文本函数

的列表(该功能于 2011 年 5 月运行,但下次 Microsoft 更改其网站时可能会被破坏)。 :-( 如果需要,您可以使用多级嵌套 IF() 函数来处理中间名或缩写、标题等。 Excel 公式不支持循环,因此您可以执行的操作有一些限制。


-1
投票

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.