我在一栏中有名字。我需要将该列中的姓氏拆分到另一列中。
姓氏从右侧以空格分隔。
单元格
A2 = Alistair Stevens
中的内容,我在单元格B2
中输入公式(我需要单元格'Stevens'
中的B2
)
我尝试使用以下公式:
=RIGHT(A2,FIND(" ",A2,1)-1)
=RIGHT(A2,FIND(" ",A2))
这两个公式都适用于此单元格,但是当我将其填写/复制并粘贴到下面的单元格时,它不起作用。我得到了错误的值!!
A3 -> David Mckenzie
预期结果:
B3 -> Mckenzie
实际结果:
B3 -> enzie
=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"
中的前导空格)。 作为替代方案,请考虑使用 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)
TEXTAFTER(A2," ",-1)
这将返回最后一个空格之后出现的姓氏(-1 个实例从右到左搜索)
对于文件名也非常有用,例如
=HYPERLINK(A2,TEXTAFTER(A2,"\",-1))
如果 A 列中有完整路径,这将创建一个链接以轻松打开文件,同时仅显示文件名
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。
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
试试这个。希望它有效。
=RIGHT(A2, LEN(A2)-FIND(" ", A2, 1))
您应该考虑在出现的任何地方使用 TRIM(A2)...
Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))