我正在尝试修复excel文件中的一堆电子邮件地址。出于某种原因,在过去,一些导入程序决定切掉一些太长或不知何故的电子邮件地址,删除了最后一封信。这是我们公司的通讯列表。
所以我的列表中有100封电子邮件以.ne或.co或.or而不是.net,.com或.org结尾。
我可以使用Excel的替换实用程序通过使用* .ne的搜索字词并选择仅查找完全匹配来查找损坏的电子邮件。
但是当我指出我要用* .net替换找到的项目时,违规者的实际内容将替换为:* .net而不是电子邮件地址的第一部分。
在这种情况下,是否有任何功能或者我可以使用该工具查找和替换?
的问候; 瑞奇
答案 0 :(得分:5)
我刚刚写了这个宏并在三个不同的电子邮件地址上测试了它们,这些地址以.com,.net和.org结尾。没有错误检查,此宏假定电子邮件地址位于A-Z列中的某个位置。它也可以尝试将“m”,“t”或“g”附加到与“.co”等标准相匹配的其他数据。
此宏基本上扫描A1和Z30000之间的单元格(正如您所提到的,您有许多地址)并查找以.co .ne或.or结尾的任何内容。它附加了正确的字母以使地址“完整”。我希望这会有所帮助。
Sub Fix_Email()
Dim i As Integer
Dim rngEmail As Range
Set rngEmail = Range("A1:A30000")
For i = 1 To 30000
'Checks to see if the last 3 characters of a cell's value end in .co, .ne, or .or
If Right(rngEmail(i).Value, 3) = ".co" Then
rngEmail(i).Value = rngEmail(i).Value & "m"
ElseIf Right(rngEmail(i).Value, 3) = ".ne" Then
rngEmail(i).Value = rngEmail(i).Value & "t"
ElseIf Right(rngEmail(i).Value, 3) = ".or" Then
rngEmail(i).Value = rngEmail(i).Value & "g"
ElseIf Right(rngEmail(i).Value, 2) = ".c" Then
rngEmail(i).Value = rngEmail(i).Value & "om"
ElseIf Right(rngEmail(i).Value, 2) = ".n" Then
rngEmail(i).Value = rngEmail(i).Value & "et"
ElseIf Right(rngEmail(i).Value, 2) = ".o" Then
rngEmail(i).Value = rngEmail(i).Value & "rg"
End If
Next i
End Sub
答案 1 :(得分:4)
只需要遍历单元格并将其拆分为'。'然后检查变量数组中的最后一个元素是否正确。沿着这些方向做点什么。
Sub fixEmails()
ScreenUpdating = False
For Each cell In ActiveSheet.Cells
Dim v As Variant
If cell.Value <> "" Then
v = Split(cell.Value, ".")
If v(UBound(v)) = "ne" Then
cell.Value = cell.Value + "t"
Else
If v(UBound(v)) = "co" Then
cell.Value = cell.Value + "m"
Else
If v(UBound(v)) = "or" Then
cell.Value = cell.Value + "g"
End If
End If
End If
End If
Next
ScreenUpdating = True
End Sub
答案 2 :(得分:3)
我建议添加一个使用公式显示所需字母的列。然后再使用一列来连接。然后在原始列上做一个大的“粘贴值”。
=IF(RIGHT(A1,3)=".ne", "t",IF(RIGHT(A1,3)=".co", "m",""))
这给了你一个想法。让A列成为您的电子邮件,您已经处理了net
和com
。
答案 3 :(得分:2)
只需在Excel中使用查找和替换时,您不需要使用通配符。如果您运行find'.ne'并替换为'.net'等等'.co'和'.or',这将有效。
但是,您可能会面临另一个问题,即电子邮件地址可能会早先出现.ne,.co或.or。
为了避免这种情况,我会扩展Smandoli的解决方案,并在您的电子邮件地址旁边使用以下功能:
=IF(RIGHT(A1,3)=".ne", A1&"t",IF(RIGHT(A1,3)=".co", A1&"m",IF(RIGHT(A1,3)=".or",A1&"g",A1)))
然后在列后复制并粘贴值。
答案 4 :(得分:1)
如果A是您将B栏设置为的电子邮件地址列,请提供更多详细信息: = IF(右(A3,2)=“co”,“m”,IF(右(A3,2)=“ne”,“t”,IF(右(A3,2)=“或”,“g) “)))
C列为 = CONCATENATE(A3,B3)
答案 5 :(得分:0)
对于这种类型的任务,循环遍历单元格本身就很慢。使用变体数组很多更快
Sub email()
Dim v As Variant
Dim rng As Range
Dim i As Long
Set rng = Range([A1], [A1].End(xlDown)) ' assuming no blank cells in the list
v = rng
For i = 1 To UBound(v, 1)
Select Case Right(v(i, 1), 3)
Case ".co"
v(i, 1) = v(i, 1) & "m"
Case ".ne"
v(i, 1) = v(i, 1) & "t"
Case ".or"
v(i, 1) = v(i, 1) & "g"
End Select
Next
rng = v
End Sub
在&lt;中执行0.5秒~60,000行