喂!
我在excel中遇到了一些真正的脏数据(很好!)的问题,我很乐意帮助。
我的单元格有很长的文本字符串。其中有电子邮件地址。我试图只提取电子邮件地址。我尝试使用FIND
函数和substitute
我的字符串中的所有其他内容,但字符串太长了。
我的第二个解决方案是简单地将整个字符串发送到列,然后在其中找到带有“@”的单元格,并将它们放在不同的工作表中。出于某种原因,我完全陷入困境,现在我的大脑已经融化了,所以我希望你们中的一些人能帮助我!
目前,我在
=COUNTIF(Email!D8:ZZ8,"*@*")
这给了我大量列中@的数量。但是,我似乎无法在第二张纸上找到实际打印电子邮件的方式。我在考虑使用INDEX或MATCH,但似乎无法找到该死的东西。
简而言之:我正在尝试在非常大的列范围内获取包含@的单元格的值,或者在非常大的文本字符串中提取电子邮件。我的大脑已经融化了。
谢谢!
编辑:示例文本,因为我被问到数据是什么样的:
其中有机密信息,因此我已将其更改为隐藏所有机密信息的内容,但会让您了解格式:
从网络自动生成1800个字符的内容 表单,发送到excel文档,虽然优化不佳,因为 政府在计算机方面非常糟糕。内容有 从Web表单自动生成1800个字符,发送到 excel文档,虽然因政府很好而优化不佳 可怕的电脑东西。电子邮件是由A HUMAN通过电子邮件服务器发送的,这是一个允许电子邮件的网站 一些各种各样的事情。根据网络协议A NUMBER 我们已将此电子邮件的FROM字段设置为我们的通用无回复 地址在EMAILFORWARDIDONTWANT@example.com,但是提供了A HUMAN 我们的电子邮件地址(thisistheemailadressIwant@gmail.com) 包含在REPLY-TO字段中。请回复人类 thisistheemailadressIwant@gmail.com了解有关AN EMAIL的更多信息 SERVER访问webadress.com了解有关Web协议A NUMBER的更多信息 访问:网站/ http://anemailserver.emailautomaticallysent.com/wf/open?upn=a0CozdHDIYk-2F-2FE-27BDepiWoypG2sQgscftG6HHFFnds8gumLwFG5a91q5dYWchJq-2FS-2FxPwyA-2BRmi77imC9JC2ukUdYS8sqn0WplhHLgUkBT4OVuD4FxAUMSv1sBHGrqdEvBLARp6Ppqth1SdmKl2k4kG5IXQ73J2qGBxZ2FFgSa5wmQXQ9XyFyUsLSPvy4goLbRzaMIfl3u-2BNA1zx5FC2P6mN0komOQDVcbfPsUv2Qm57Fwc95UAD0E2f7ZsxOBXRKmwKSQjnA9ImBwK3wf3TY8vgTeV4N0jD05Oj4F8IK3JIssog6GVNNZ1-2BvLQnZmlVGa7h0WeuauDrGVDCeFcuFa-2BeXVdzpcwlWii2i
答案 0 :(得分:0)
将以下代码复制到工作簿的VBA模块中。
(如果您对VBA模块和宏一无所知,请参阅http://www.excel-easy.com/vba/examples/run-code-from-a-module.html)
运行Extract
宏,选择包含电子邮件的单元格,单击“确定”,电子邮件将放置在活动单元格及其下方。
GetEmails
函数也可以直接从一个范围调用(数组公式)。
Function GetEmails(Text As String)
Set Regex = CreateObject("vbscript.regexp")
Regex.Pattern = "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
Regex.Global = True
Set Matches = Regex.Execute(Text)
Dim I As Integer, Count As Integer, Arr()
Count = Matches.Count
If Count Then
ReDim Arr(1 To Count, 1 To 1)
For I = 1 To Count
Arr(I, 1) = Matches(I - 1)
Next
GetEmails = Arr
Else: GetEmails = xlErrNA
End If
End Function
Sub Extract()
Dim Cell As Range
On Error GoTo Err
Set Cell = Application.InputBox("Select the cell containing emails.", Type:=8)
On Error GoTo 0
Dim Arr, P As Range
Arr = GetEmails(Cell(1).Value)
If TypeName(Arr) <> "Variant()" Then Exit Sub
Set P = ActiveCell.Resize(UBound(Arr, 1))
P = Arr
P.Select
Err:
End Sub