使用VBA代码在Excel中突出显示具有以特定术语结尾的值的单元格

我有一个Excel文档,其中包含联系人信息列表,这些列表是通过纸张联系表手动input的。 因此,有很多错别字(人为错误)。 由于名单太长,我没有时间手工查看名单来纠正明显的错误。 每行最重要的联系信息是电子邮件地址,如果拼写错误,我无法联系到这个人。

我使用了不同用户答案的​​macros来突出显示电子邮件地址的域名部分中包含常见错误的行,例如“@ gamil.com”,“.copm”,“.cpm”,“@ hormail.com” ,“@ yahool.com”,“@ yaho.com”,“fmail.com”,“@vergin.net”。

(为了在信用到期时给予信用,我开始使用的代码来自于用户我如何在macros中惊人,我希望我有办法直接要求他帮助,但我没有“信誉“以发表评论。我发现这个代码作为答案的问题是在Excel中查找多个文本 。

Sub HighlightRowsBasedOnArrayCondition() Dim searchTerms As Variant searchTerms = Array("@gamil.com", ".copm", ".cpm", "@hormail.com", "@yahool.com", "@yaho.com", "fmail.com", "@vergin.net") ReDim rowsToHighlight(0) As String Dim allRange As Range Set allRange = ActiveSheet.UsedRange Dim cell As Range, word As Variant For Each cell In allRange For Each word In searchTerms If InStr(1, cell, word, vbTextCompare) Then rowsToHighlight(UBound(rowsToHighlight)) = CStr(cell.Row) ReDim Preserve rowsToHighlight(UBound(rowsToHighlight) + 1) End If Next word Next cell ReDim Preserve rowsToHighlight(UBound(rowsToHighlight) - 1) Dim v As Long For v = UBound(rowsToHighlight) To LBound(rowsToHighlight) Step -1 Rows(rowsToHighlight(v)).Interior.Color = RGB(255, 0, 0) Next End Sub 

我想要更好地指定这些术语作为单元格值的末尾,以便我可以使用以“@ yahoo.co”和“@ gmail.co”结尾的macros突出显示的电子邮件地址,以便我可以在“.com”不完整。 很显然,如果我用这些术语来使用macros的当前版本,它不仅会突出显示我正在查找的那些电子邮件错误,还会显示那些已经完成域名的电子邮件错误。 有人可以告诉我,如果有可能指定search条件是单元格值的结尾? 如果是这样,你能指导我如何改变这个代码呢?

好的,这应该很容易。 现在你的代码只是检查cell 是否存在 word

 If InStr(1, cell, word, vbTextCompare) 

如果你想确保它只是在最后 ,那么你可以使用Right函数:

 If Right(cell, Len(word)) = word Then 

修改为忽略区分大小写和可能的尾随空格:

 If Trim(LCase(right(cell, Len(word)))) = Trim(LCase(word)) Then 

另一种方法是使用条件格式。 没有VBA的要求,只是一个奇特的公式,使我想方设法想出来。 以下是它的样子:

在这里输入图像说明

这里是公式:

 =SUM(COUNTIF(C2,LEFT(C2,LEN(C2)-LEN(Sheet1!$A$2:$A$11))&Sheet1!$A$2:$A$11)) 

请注意,在Excel正确,这是一个数组公式,但在条件格式,你只需input它正常。