我在列中有名字。我需要将该列中的姓氏拆分为另一列。
姓氏由右侧的空格分隔。
单元格A2 = Alistair Stevens
中的内容我输入了单元格B2
中的公式(我需要'Stevens'
中的B2
}
我尝试使用以下公式:
=RIGHT(A2,FIND(" ",A2,1)-1)
=RIGHT(A2,FIND(" ",A2))
这个公式的工作这两个公式但是当我将其填充/复制并粘贴到下面的单元格时,它不起作用。我得到错误的价值!!
A3 -> David Mckenzie
B3 -> Mckenzie
答案 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]," "))