Excel 查找、选择并高亮显示

Excel 查找、选择并高亮显示,excel,vba,Excel,Vba,我希望VBA代码能够找到并高亮显示具有特定值的所有单元格。在这个例子中,我正在搜索数字2。 代码会正确查找并高亮显示数字为2的单元格,但也会高亮显示数字为22和23的所有单元格,因为它们包含数字2 下面是代码。 非常感谢您的帮助 'Find Search Values on Sheet and Highlight Sub Find_And_Highlight() Dim Searchfor As String Dim FirstFound As String Dim Lastcell As

我希望VBA代码能够找到并高亮显示具有特定值的所有单元格。在这个例子中,我正在搜索数字2。 代码会正确查找并高亮显示数字为2的单元格,但也会高亮显示数字为22和23的所有单元格,因为它们包含数字2

下面是代码。 非常感谢您的帮助

'Find Search Values on Sheet and Highlight

Sub Find_And_Highlight()

Dim Searchfor As String
Dim FirstFound As String
Dim Lastcell As Range
Dim FoundCell As Range
Dim rng As Range
Dim myRange As Range


Set myRange = ActiveSheet.UsedRange
Set Lastcell = myRange.Cells(myRange.Cells.Count)

      
       Searchfor = "2"
        
        
        Set FoundCell = myRange.Find(what:=Searchfor, after:=Lastcell)
        
        'Test to see if anything was found
          If Not FoundCell Is Nothing Then
            FirstFound = FoundCell.Address
          Else
            GoTo NothingFound
          End If
         
         Set rng = FoundCell
        
        'Loop until cycled through all finds
          Do Until FoundCell Is Nothing
            'Find next cell with Searchfor value
              Set FoundCell = myRange.FindNext(after:=FoundCell)
            'Add found cell to rng range variable
              Set rng = Union(rng, FoundCell)
            'Test to see if cycled through to first found cell
              If FoundCell.Address = FirstFound Then Exit Do
           Loop
        
        'Highlight cells that contain searchfor value
          rng.Interior.ColorIndex = 34
  
Exit Sub

'Error Handler
NothingFound:
  MsgBox "No values were found in this worksheet"


End Sub

请查看@Craig提供的评论,您需要实施该评论。i、 e.您需要修改
Foundcell
行,如下所示:

Set FoundCell=myRange.Find(what:=Searchfor,after:=Lastcell,lookat:=xlother)

注意:此选项会修改用户在Excel中的搜索设置,因此今后请确保取消选中“查找”框中的以下选项



但是,由于要更改单元格的背景色,因此不需要VBA。您可以使用条件格式|高亮显示单元格规则|等于,如下所示:

然后根据需要填写以下值:

结果如下所示:

突出显示找到的单元格
  • 取消注释
    Debug.Print
    find突出显示
    过程中的
    行,以更好地了解其行为
选项显式
子FindHighlight()
'您可以使用这些常量('ByVal')作为此过程的参数,
“当你可以用另一个名字“FindAndHighlight”2,34”来称呼它的时候
"程序。
Const SearchString As String=“2”
当长度=34时,常数cIndex
如果ActiveSheet为Nothing,则退出“如果从加载项运行”
如果TypeName(ActiveSheet)“工作表”,则退出子项“如果”,例如图表
“Debug.Print”工作表名称:“&ActiveSheet.Name”
尺寸srg作为范围:设置srg=ActiveSheet.UsedRange
“Debug.Print”源范围地址:“&srg.Address(0,0)
将frg设置为范围:设置frg=refFindStringInRange(srg,搜索字符串)
如果frg什么都不是,那么
MsgBox“没有出现'”&搜索字符串&“在范围内找到”_
&srg.Address(0,0)和“工作表的”和srg.worksheet.Name_
&“.”,vbCritical,“未找到任何内容”
出口接头
如果结束
“Debug.Print”找到范围地址:“&frg.Address(0,0)
HighlightRange使用颜色索引frg,cIndex
端接头
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'目的:创建对所有单元格组合的范围的引用
'其内容等于字符串。
'备注:搜索不区分大小写('MatchCase'),并已执行
'按行('SearchOrder')升序('SearchDirection',
“('FindNext')),从第一个单元格('After')开始
'范围内的每个区域。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
函数refFindStringInRange(_
ByVal SearchRange作为范围_
ByVal搜索字符串(作为字符串)_
As范围
如果SearchRange为Nothing,则退出函数
变暗frg As范围
Dim arg As范围
暗淡的lCell As范围
变暗fCell As范围
将第一个地址设置为字符串
对于SearchRange.Areas中的每个参数
Set lCell=arg.Cells(arg.Rows.Count、arg.Columns.Count)
设置fCell=Nothing
'通过修改'Find'方法的参数
'您可以通过多种方式更改函数的行为。
设置fCell=arg.Find(SearchString、lCell、xlFormulas、xlWhole、xlByRows)
如果不是,那么fCell什么都不是
FirstAddress=fCell.Address
做
如果frg什么都不是,那么
设置frg=fCell
其他的
设置frg=接头(frg,fCell)
如果结束
设置fCell=arg.FindNext(后面:=fCell)
循环直到fCell.Address=FirstAddress
如果结束
下一个arg
如果不是frg,那就什么都不是了
设置refFindStringInRange=frg
如果结束
端函数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'用途:使用颜色索引高亮显示区域的单元格。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
使用颜色索引的次高亮度范围(_
比瓦尔rg As射程_
ByVal cIndex(尽可能长)
如果rg为空,则退出Sub
如果cIndex<1或cIndex>56,则退出Sub
rg.Interior.ColorIndex=cIndex
端接头

我相信您需要设置“lookat”参数(即“lookat:=xlother”)——这就像在Excel中手动查找时选择“匹配整个单元格内容”。涵盖更多细节啊。。。现在看来很简单。谢谢这是非常有见地的。。。非常感谢。