如何替换具有特定文本的列中某些单元格中的文本? (VBA)

时间:2019-11-27 15:02:40

标签: excel vba

我对VBA还是很陌生,并且作为我的第一个项目,我正在构建这个简单的工具来将复制的粘贴数据解析/格式化为更有组织的表。许多工作已经完成,但是我仍然没有一件事。

最终表只有4列,第3列是电子邮件地址。我想做的是创建一个宏,以将显示“外部电子邮件地址”的值替换电子邮件列中包含(@ gmail.com)的每个单元格。输入新数据时,表的大小会更改。

我已经为此奋斗了好几个小时了,由于我的有限知识,我还没有取得成功。如果能得到一些容易理解的代码来帮助我,我将不胜感激。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

Dim lastRow as long, ws as Worksheet, i as long

Set ws = ThisWorkBook.Worksheets("YourWorksheetName")

' Suppose your third column is column C
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
' Suppose the first row is the header, column C = 3 in terms of index
For i = 2 To lastRow
    If ws.Cells(i,3).Value Like "*@gmail.com*" Then
         ws.Cells(i,3).Value = "external email address"
    End If
Next i

答案 1 :(得分:1)

如果您表明“很多工作已经完成”的意思以及到目前为止所取得的成就,那将是很好的事情……

您可以尝试使用 InStr()

Sub ReplaceExternalEmails()

    'ofc sheet's and listObj's indexes or "names" matters and depends on your case, try to figure these out
    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    'Loop through 3rd column to check for external mails
    Dim cel As Range
    For Each cel In someTable.DataBodyRange.Columns(3).Cells
        If InStr(cel.Value, "@gmail.com") Then
            cel.Value = "external email address"
        End If
    Next cel

End Sub

您还可以添加

cel.ClearFormats

在for循环内部,或其他某种格式,因此如果您以某种方式关心它,将不会使蓝色底线保持不变。

解决此问题的另一种方法(对于较大的数据集,这可能更快)是替换值,该值等效于 CTRL + F / Replace 这样的方法,

Sub ReplaceExternalEmails()

    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    Dim fnd As Variant: fnd = "*@gmail.com"
    Dim rpl As Variant: rpl = "external email address"

    someTable.DataBodyRange.Columns(3).Replace _
        What:=fnd, Replacement:=rpl

End Sub