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

时间:2014-05-16 18:23:32

标签: excel vba excel-vba

我有一份Excel文档,其中包含从纸质联系表中手工输入的联系信息列表。因此,有很多错别字(人为错误)。由于列表太长,我没有时间手动查看列表来纠正明显的错误。每行最重要的联系信息是电子邮件地址,如果拼写错误,我无法与该人联系。

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

(为了给予信用到期的信用,我开始使用的代码来自用户me how,他在宏中很棒,我希望我有办法直接请他帮忙解决这个问题,但我不知道#39;有#34;声誉"来发表评论。我发现此代码作为答案的问题是Finding Multiple text in 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&#34结尾的电子邮件地址;和" @ gmail.co"这样我就可以在" .com"不完整。显然,如果我使用当前版本的宏来使用这些术语,它不仅会突出显示我正在查找的那些电子邮件错误,还会突出显示已完成域名的错误。 有人可以告诉我是否可以指定搜索字词是单元格值的结尾?如果是这样,请指导我如何更改此代码?

2 个答案:

答案 0 :(得分:2)

好的,这应该很简单。现在,您的代码只是检查wordcell状态

If InStr(1, cell, word, vbTextCompare) 

如果您只想确定它位于 end ,那么您可以使用Right功能:

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

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

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

答案 1 :(得分:1)

另一种方法是使用条件格式。没有VBA要求,只是一个花哨的公式,让我想出了很长的路要走。这是它的样子:

enter image description here

以下是公式:

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

请注意,在Excel中,这是一个数组公式,但在条件格式中,您只需正常输入它。