按域名分隔不同列中的电子邮件地址

Separate Email addresses in different column by their domain name

我有一个电子邮件地址列表(列)(@Gmail.com、@Hotmail.com、@live.com 等)和一些其他公司的域地址。

我需要将@Gmail.com、@Hotmail.com、@live.com地址与其他地址分开,写在下一栏。

我知道通过使用条件格式,我可以在单独的列中突出显示和 copy/paste 它们,但我真的不知道从哪里开始或如何使用 Excel-VBA.

例如:

更新: 如需完整信息,请关注 - https://youtu.be/zjF7oLLgtms

假设您的电子邮件在 A 列,并且您希望它们转到 B:

Sub splitmail2()
Dim lrow As Long
lrow = Sheets("sheet1").Cells(Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
Sheets("sheet1").Range("A:A").AutoFilter Field:=1, Criteria1:="*" & "hotmail" & "*", Operator:=xlOr, Criteria2:="*" & "gmail" & "*", Operator:=xlOr
Sheets("sheet1").Range("A2:A" & lrow).SpecialCells(xlCellTypeVisible).Copy
Range("B2").PasteSpecial xlPasteValues
Range("A2:A" & lrow).SpecialCells(xlCellTypeVisible).ClearContents
Sheets("sheet1").AutoFilterMode = False
End Sub

根据您的评论,如果您想将结果与它们的来源放在同一行,下面的循环就可以解决问题。但是,如果用于大型数据集,它会比以前的方法慢得多。

Sub splitmail3()
Dim lrow As Long
Dim cel As Range
lrow = Sheets("sheet1").Cells(Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
For Each cel In Range("A2:A" & lrow)
If InStr(UCase(cel.Value), "HOTMAIL") Or InStr(UCase(cel.Value), "GMAIL") Then
Range("B" & cel.Row).Value = cel.Value
cel.ClearContents
Else
End If
Next
End Sub

为此您不需要 VBA:

  • 在命名范围内写入要分隔的域(不带“@”)[Domain_List]
  • 假设您要分隔的列表在 A 列中

B 列的公式为:

=IF(IFERROR(VLOOKUP(RIGHT($A1,LEN($A1)-FIND("@",$A1)),Domain_List,1),"")<>"",$A1,"")

C 列的公式为:

=IF(IFERROR(VLOOKUP(RIGHT($A1,LEN($A1)-FIND("@",$A1)),Domain_List,1),"")<>"","",$A1)