从Excel中的分隔string中提取单词?

我需要提取分号之间的特定单词,条件是这些单词包含意味着电子邮件的“@”。

这里是一个例子:

A1 >> james john;Paris street;po box:12345;tel.987654321;username@site.com;usa B1 >> david eric;34th street;tel.543212345;name@web.net;canada;ottawa 

… 等等

请注意,电子邮件没有特定的位置,所以它可能在任何地方。 除了“@”之外,还没有常用的单词或字符,所以必须有一个公式来select分号+包含的“@”来提取电子邮件,并把它放在A2和B2等等

将数据复制到A列。
select数据。
Data – > Text to Columns...
DelimitedNext >
Semicolon
Finish

现在你有AF栏中的数据。

G1input:

 =INDEX(A1:F1,1,MATCH("~",IF(ISNUMBER(FIND("@",A1:F1)),A1:F1),-1)) 

并按下Ctrl + Shirt + Enter。 将公式向下拖动。

 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) 

这是一个使用正则expression式的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 

我很快猜测会写一个使用正则expression式的VBA函数,查看http://www.vbforums.com/showthread.php?t=480272

有一个简单的分隔expression式,可以帮助您在特定的中断点打断string。 在这种情况下,分号就是你想要打断string的地方。 您只需点击顶部菜单中的DATA,然后select您的数据列,然后在顶部导航栏中selectTEXT TO COLUMN。 它会根据您指定的数据分割您的数据,而您的情况则是您想分割数据的分号。

我试图张贴屏幕截图帮助,但本网站的垃圾邮件检测器不允许我。 但是,你可能总是访问我的hubpage http://nikhilchandra.hubpages.com/相同。 我希望这有助于:-)