从Excel中的分隔字符串中提取单词?

时间:2010-10-26 07:37:27

标签: excel worksheet-function

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

以下是一个例子:

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中等等

5 个答案:

答案 0 :(得分:2)

将数据复制到A列 选择数据 Data - > Text to Columns...
DelimitedNext >
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/。我希望它有所帮助: - )