Excel查找和replace工具

我正在修复一些我在Excel文件中的电子邮件地址。 出于某种原因,过去一些import程序决定删除一些电子邮件地址太长或不知何故,最后一封信被删除。 这是我们公司的通讯列表。

所以我在我的列表中有100个电子邮件,以.ne或.co或.or结尾,而不是.net,.com或.org。

我可以使用Excel的replace实用程序来查找中断的电子邮件,使用search词* .ne并select查找完全匹配只。

但是,当我指出我想用* .netreplacefind的项目时,实际的内容replace为:* .net而不是电子邮件地址的第一部分。

有没有任何function,或者我可以使用该工具在这种情况下find和replace?

问候; 瑞奇

我刚刚写了这个macros,并在以.com,.net和.org结尾的三个不同的电子邮件地址上进行了testing。 没有错误检查,并且这个macros假定电子邮件地址在列AZ内的某个地方。 它也可能试图将“m”,“t”或“g”追加到符合“.co”等标准的其他数据。

这个macros基本上扫描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 

只需要循环遍历单元格,并将其分割出来。 然后检查variables数组中的最后一个元素是否正确。 沿着这些路线的东西。

 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 

我会build议添加一列使用公式来显示所需的字母。 然后再使用一列来连接。 然后做一个大的“粘贴值”到原来的列。

 =IF(RIGHT(A1,3)=".ne", "t",IF(RIGHT(A1,3)=".co", "m","")) 

这给你的想法。 让列A成为你的电子邮件,你已经处理了net和通信。

简单地在Excel中使用查找和replace时,不需要使用通配符。 如果你运行find。.ne并用'.net'等replace'.co'和'.or',这个就行了。

但是,如果电子邮件地址可能有.ne,.co或.or,则可能会遇到另一个问题。

为了避免这种情况,我会扩展Smandoli的解决scheme,并在您的电子邮件地址旁边使用以下function:

=IF(RIGHT(A1,3)=".ne", A1&"t",IF(RIGHT(A1,3)=".co", A1&"m",IF(RIGHT(A1,3)=".or",A1&"g",A1)))

然后复制并粘贴列中的值。

如果A是您设置B列的电子邮件地址栏,则可以给出更多详细信息:= IF(RIGHT(A3,2)=“co”,“m”,IF(RIGHT(A3,2)=“ne” ,“t”,IF(RIGHT(A3,2)=“或”,“g”)))

而C列为= CONCATENATE(A3,B3)

对于这种types的任务,循环单元格是相当慢的。 使用变体arrays快得多

 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 

在约60,000行<0.5秒内执行

Interesting Posts