Find 查找指定内容单元格,真是踏破铁鞋无觅处得来全不费工夫_零基础

Hi,大家好,本专栏将会从零开始和大家用图文的方式,让你从零基础学会VBA!有兴趣的小伙伴可以持续关注我,或者在专栏中进行查看自我学习,愿与君携手前行!

在上节已经讲述了range和cells的使用方法,也许你已经初步具备识别他们了。今天要和大家分享的一个知识点是查找符合指定条件的单元格,达到这个目的方法有很多种,现在主要介绍使用 Find 方法和FindNext 方法,下期我们会介绍其他的方式。

Issue:在 Excel 中使用经常会遇到查找指定内容,而大多数人会使用对话框查找,这个可以查找工作表中特定内容的单元格,但是在 VBA 中则使用 Find 方法,如下面的代码所示。

#001  Sub RngFind()
#002 Dim StrFind As String
#003 Dim Rng As Range
#004 StrFind = InputBox("请输入要查找的值:")
#005 If Trim(StrFind) <> "" Then
#006 With Sheet1.Range("A:A")
#007 Set Rng = .Find(What:=StrFind, _
#008 After:=.Cells(.Cells.Count), _
#009 LookIn:=xlValues, _
#010 LookAt:=xlWhole, _
#011 SearchOrder:=xlByRows, _
#012 SearchDirection:=xlNext, _
#013 MatchCase:=False)
#014 If Not Rng Is Nothing Then
#015 Application.Goto Rng, True
#016 Else
#017 MsgBox "没有找到该单元格!"
#018 End If
#019 End With
#020 End If
#021 End Sub


代码解析:此过程使用 Find 方法在工作表 Sheet1 的 A 列中查找 InputBox 函数对话框中输入所要查找的值,并查找该值所在的第一个单元格,请注意是查找第一个符合条件的单元格。

此方法是Range 对象的 Find 方法在区域中查找特定信息,并返回 Range 对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回 Nothing,语法如下:

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)

参数 expression 是必需的,该表达式返回一个 Range 对象。

参数 What 是必需的,要搜索的数据,可为字符串或任意数据类型。

参数 After 是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单 个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进 行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。

PS: 每次使用 Find 方法后,参数 LookIn、LookAt、SearchOrder 和 MatchByte 的设置将保存。如果下次调用 Find 方法时不指定这些参数的值,就使用保存的值。因此每次使用该方法时请明确设置这些参数,否则可能会出现错误。

或许有的小伙伴们会说如果工作表的 A 列中存在重复的数值,如何查找呢?那么在这个时候就需要使用 FindNext 方法或 FindPrevious 方法进行重复搜索,如下面的代码所示。

#001  Sub RngFindNext()
#002 Dim StrFind As String
#003 Dim Rng As Range
#004 Dim FindAddress As String
#005 StrFind = InputBox("请输入要查找的值:")
#006 If Trim(StrFind) <> "" Then
#007 With Sheet1.Range("A:A")
#008 Set Rng = .Find(What:=StrFind, _
#009 After:=.Cells(.Cells.Count), _
#010 LookIn:=xlValues, _
#011 LookAt:=xlWhole, _
#012 SearchOrder:=xlByRows, _
#013 SearchDirection:=xlNext, _
#014 MatchCase:=False)
#015 If Not Rng Is Nothing Then
#016 FindAddress = Rng.Address
#017 Do
#018 Rng.Interior.ColorIndex = 6
#019 Set Rng = .FindNext(Rng)
#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
#021
#022 End With
#023 End If
#024 End Sub


代码解析:过程在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值, 并将查到单元格底色设置成黄色。

用 FindNext 方法进行重复搜索。FindNext 方法继续执行用 Find 方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的 Range 对象,语法如下:

expression.FindNext(After)

参数 expression 是必需的,返回一个 Range 对象。

参数 After 是可选的,指定一个单元格,查找将从该单元格之后开始。

这个查找的方法是我们用的比较多的一种方式,有不明白的小伙们可以私信或者留言。

PS:附带FindPrevious 方法的语法,这个使用起来更为简单。

expression.FindPrevious(After)

FindPrevious方法和FindNext方法唯一的区别是FindPrevious方法查找匹配相同条件 的前一个单元格而 FindNext 方法是查找匹配相同条件的下一个单元格。

好啦!快乐的时间总是非常短暂的,又到了和大家说再见的时候,如果大家感觉本文如果对你有所帮助的话,请帮忙转发点赞,谢谢您能观看到现在,我们下期再见!

我是Excel教案,关注我持续分享更多的Excel技巧!

如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。