我对VBA还是很陌生,并且作为我的第一个项目,我正在构建这个简单的工具来将复制的粘贴数据解析/格式化为更有组织的表。许多工作已经完成,但是我仍然没有一件事。
最终表只有4列,第3列是电子邮件地址。我想做的是创建一个宏,以将显示“外部电子邮件地址”的值替换电子邮件列中包含(@ gmail.com)的每个单元格。输入新数据时,表的大小会更改。
我已经为此奋斗了好几个小时了,由于我的有限知识,我还没有取得成功。如果能得到一些容易理解的代码来帮助我,我将不胜感激。
提前谢谢!
答案 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