Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 按域名在不同列中分隔电子邮件地址_Excel_Vba_Conditional Formatting - Fatal编程技术网

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

Excel 按域名在不同列中分隔电子邮件地址,excel,vba,conditional-formatting,Excel,Vba,Conditional Formatting,我有一个电子邮件地址列表(列)(@Gmail.com、@Hotmail.com、@live.com等)和一些其他公司的域地址 我需要将@Gmail.com、@Hotmail.com、@live.com地址与其他地址分开,并将它们写在下一栏中 我知道通过使用条件格式,我可以在单独的列中突出显示和复制/粘贴它们,但我真的不知道从何处开始,也不知道如何使用Excel VBA执行相同的操作 例如: 更新: 有关完整信息,请遵循-假设您的电子邮件位于A列,并且您希望它们转到B: Sub splitmai

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

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

我知道通过使用条件格式,我可以在单独的列中突出显示和复制/粘贴它们,但我真的不知道从何处开始,也不知道如何使用Excel VBA执行相同的操作

例如:

更新:
有关完整信息,请遵循-

假设您的电子邮件位于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()
暗淡的光线和长的一样
暗淡的cel As范围
lrow=板材(“板材1”)。单元格(板材(“板材1”)。行。计数,“A”)。结束(xlUp)。行
对于范围内的每个cel(“A2:A”和lrow)
如果InStr(UCase(cel.Value),“HOTMAIL”)或InStr(UCase(cel.Value),“GMAIL”),那么
范围(“B”和单元格行)。值=单元格值
cel.ClearContents
其他的
如果结束
下一个
端接头

此操作不需要VBA:

  • 在命名范围[Domain_List]中写入要分离的域(不带“@”)
  • 假设要分开的列表在A列中
B列的公式为:

=IF(IFERROR(VLOOKUP(RIGHT($A1,LEN($A1)-FIND("@",$A1)),Domain_List,1),"")<>"",$A1,"")
=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)
=IF(IFERROR(VLOOKUP(RIGHT($A1,LEN($A1)-FIND(“@“,$A1)),Domain_List,1),“”),“”,“”,$A1)

您的方法没有将电子邮件转移到下一个后续单元格,而是创建一个没有空白单元格的列表。我更新了图片来详细说明。请帮助使用
foreach
循环可以完成此操作,但速度会明显减慢。我会看看以后是否有时间更新我的答案,并给你按预期完成的选项。@IbneAshiq好了,让我知道它是否适合你。