我需要在分号之间提取特定的单词,条件是这些单词包含“@”,表示电子邮件。
以下是一个例子:
A1 >> james john;Paris street;p.o. box:12345;tel.987654321;username@site.com;usa
B1 >> david eric;34th street;tel.543212345;name@web.net;canada;ottawa
......等等
请注意,电子邮件没有特定的位置,因此它可以在任何地方。除了“@”之外,没有常用的单词或字符,所以必须有一个公式可以在分号+包含的“@”之间进行选择以提取电子邮件并将其放在A2和B2中等等
答案 0 :(得分:2)
将数据复制到A
列
选择数据
Data
- > Text to Columns...
Delimited
(Next >
)
Semicolon
Finish
现在,您在列A-F
中拥有数据。
在G1
输入:
=INDEX(A1:F1,1,MATCH("~",IF(ISNUMBER(FIND("@",A1:F1)),A1:F1),-1))
然后按Ctrl + Shirt + Enter。拖动公式。
答案 1 :(得分:2)
B1 =FIND("@",A1)
C1 =IF(ISERR(FIND(";",A1,B1)),LEN(A1)+1,FIND(";",A1,B1))
D1 =MAX(IF(ISERR(FIND(";",LEFT(A1,C1-1),ROW(INDIRECT("A1:A"&B1)))),0,FIND(";",LEFT(A1,C1-1),ROW(INDIRECT("A1:A"&B1)))))
E1 =MID(A1,D1+1,C1-D1-1)
如果您愿意,可以将它们组合成一个超级公式。
B1 = the location of the at sign
C1 = the first semicolon after the @
D1 = the semicolon before the at sign (array entered)
答案 2 :(得分:1)
这是一个使用正则表达式的VBA函数:
Function EmailFrom(source As String)
Dim Matches As Object
With CreateObject("VBScript.RegExp")
.Pattern = "(^|;)([^;@]+@[^;@]+);?"
If .Test(source) Then
Set Matches = .Execute(source)
EmailFrom = Matches(0).SubMatches(1)
Else
EmailFrom = CVErr(xlErrNA)
End If
End With
End Function
[更新]或甚至(浓缩)
Function EmailFrom(source As String)
With CreateObject("VBScript.RegExp")
.Pattern = "(^|;)([^;@]+@[^;@]+);?"
With .Execute(source)
If .Count > 0 Then
EmailFrom = .Item(0).SubMatches(1)
Else
EmailFrom = CVErr(xlErrNA)
End If
End With
End With
End Function
答案 3 :(得分:0)
我的猜测是编写一个使用正则表达式的VBA函数,请查看http://www.vbforums.com/showthread.php?t=480272
答案 4 :(得分:0)
有一个简单的分隔表达式可以帮助你在特定的断点处打破字符串。在这种情况下,半冒号是您想要打破字符串的点。 您需要做的就是单击顶部菜单中的DATA,然后选择包含数据的列,然后在顶部导航中选择TEXT TO COLUMN。它会将您的数据拆分为您指定的数据,在您的情况下,它是您想要拆分数据的分号。
我尝试发布屏幕截图来帮助,但本网站的垃圾邮件检测器不允许我这样做。但您也可以随时访问我的中心页面http://nikhilchandra.hubpages.com/。我希望它有所帮助: - )