Excel查找和;替换工具

时间:2012-09-18 18:53:17

标签: excel cell replace

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

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

我可以使用Excel的替换实用程序通过使用* .ne的搜索字词并选择仅查找完全匹配来查找损坏的电子邮件。

但是当我指出我要用* .net替换找到的项目时,违规者的实际内容将替换为:* .net而不是电子邮件地址的第一部分。

在这种情况下,是否有任何功能或者我可以使用该工具查找和替换?

的问候; 瑞奇

6 个答案:

答案 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列成为您的电子邮件,您已经处理了netcom

答案 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行