5

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

这是一个例子:

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 等

4

5 回答 5

3
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)
于 2010-10-26T16:52:40.360 回答
2

将数据复制到列A
选择数据。
Data-> Text to Columns...
Delimited( Next >)
Semicolon
Finish

现在您在 columns 中有数据A-F

G1输入:

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

然后按 Ctrl+衬衫+Enter。向下拖动公式。

于 2010-10-26T08:21:11.867 回答
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
于 2010-10-26T08:23:12.653 回答
0

有一个简单的定界表达式可以帮助您在特定断点处断开字符串。在这种情况下,分号是您要断开字符串的点。您需要做的就是单击顶部菜单中的数据,然后选择包含数据的列,然后在顶部导航中选择 TEXT TO COLUMN。它将在您指定的 breals 处拆分您的数据,在您的情况下,它是您要拆分数据的分号。

我试图发布屏幕截图以提供帮助,但该站点的垃圾邮件检测器不允许我这样做。但是您可能总是会访问我的主页http://nikhilchandra.hubpages.com/。我希望它有帮助:-)

于 2013-01-17T04:27:10.230 回答
0

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

于 2010-10-26T07:42:04.840 回答