时间:2015-09-20 14:25:50

标签: regex excel excel-vba pattern-matching vba

我正在努力处理一张巨大的Excel工作表(有200K行),我需要从字符串中存在的所有电子邮件地址的某个列(B)列表中提取。

我想要实现的目标:

  1. 从字符串
  2. 中提取电子邮件
  3. (at)转换为@,将(dot)转换为.
  4. 在单独的列中保存姓名和电子邮件
  5. B栏的例子:

    Shubhomoy Biswas <biswas_shubhomoy777(at)yahoo(dot)com>
    Puneet Arora <ar.puneetarora(at)gmail(dot)com>
    Anand Upadhyay <001.anand(at)gmail(dot)com>
    Rajat Gupta <rajatgupta0889(at)gmail(dot)com>
    Sarvesh Sonawane <sarvesh.s(at)suruninfocoresystems.
    

    虽然我希望能够在Excel上执行任何其他基于Windows的实用程序建议会有所帮助。

3 个答案:

答案 0 :(得分:1)

尝试一下:

Sub splitter()
   Dim r As Range, v As String

   For Each r In Intersect(Range("B:B"), ActiveSheet.UsedRange)
      v = r.Text
      If v <> "" Then
         ary = Split(v, " <")
         r.Offset(0, 1).Value = ary(0)
         r.Offset(0, 2).Value = Replace(Replace(Replace(ary(1), ">", ""), "(at)", "@"), "(dot)", ".")
      End If
   Next r
End Sub

enter image description here

此子目录使用 C 列和 D 列作为输出。修改代码以满足您的需求。

答案 1 :(得分:1)

这可以假设它们都是相同的格式,每个单元格只添加1封电子邮件

= SUBSTITUTE(SUBSTITUTE(MID(B1,FIND(&#34;&LT;&#34;,B1)+ 1,LEN(B1) - 查找(&#34;&LT;&#34;,B1) -1)&#34;(在)&#34;&#34; @&#34;),&#34;(点)&#34;&#34;&#34)< / p>

答案 2 :(得分:1)

要提取名称,请尝试= TRIM(LEFT(B1,FIND(“&lt;”,B1)-1))。 user3005775的答案适用于电子邮件。