答案1
您的数据似乎由以下一组项目组成:
- 被分隔开逗号空格
- 可能以电子邮件作为最后一项
如果总是这种情况,那么请考虑以下用户定义函数:
Public Function noemail(s As String) As String
Dim i As Long, L As Long
If InStr(s, "@") = 0 Then
noemail = s
Exit Function
End If
L = Len(s)
For i = L To 1 Step -1
If Mid(s, i, 1) = "," Then
noemail = Left(s, i - 1)
Exit Function
End If
Next i
End Function
它检查字符串@. 如果@存在时,它会寻找前面的逗号并在该点处剪辑字符串:
用户定义函数 (UDF) 非常容易安装并使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
到消除UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
到使用Excel 中的 UDF:
=noemail(A1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
答案2
您还可以使用以下公式:
=LEFT(D2,(FIND((MATCH(TRUE,ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9}&", ",D2)),0)-1)&",",D2)))
解释
FIND({0,1,2,3,4,5,6,7,8,9}&", ",D2)
:查找数字后跟逗号的情况。这将返回 10 个值。只有 1 个是正确的。MATCH(TRUE,ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9}&", ",D2)),0)
:将上面的公式与ISNUMBER
和MATCH
函数结合起来,得到数组常量中数字的索引。FIND((MATCH(TRUE,ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9}&", ",D2)),0)-1)&",",D2)
:使用数组常量的索引返回字符串的位置。LEFT(D2,(FIND((MATCH(TRUE,ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9}&", ",D2)),0)-1)&",",D2)))
:结合以上所有内容,返回除电子邮件地址之外的所有内容
请注意,如果字符串的第二部分以数字后跟逗号结尾,则此公式将不起作用。
答案3
答案4
尽管我很喜欢 Gary's Student 的 UDF,但您也可以使用公式来实现这一点:
=LEFT(D2,SEARCH(TRIM(RIGHT(SUBSTITUTE(TRIM(D2), " ", REPT(" ", 99)), 99)),D2,1))
笔记。我从另一个已被删除的答案中复制了其中的一部分。(如果有人重新发布,我将删除我的答案)