Excel在vba代码中使用find方法查找定位单元格区域的代码详解 图文

2018年2月1日22:57:00 评论 11,500 views
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
微信公众号 【EXCEL880】 QQ群【273774246】

技巧5 查找单元格

5-1 使用Find方法

在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

代码解析:

RngFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。

第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。应用于Range对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing,语法如下:

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

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

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

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

  • 在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。

  • 参数LookIn是可选的,信息类型。

  • 参数LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。

  • 参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。

  • 参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious之一。

  • 参数MatchCase是可选的,若为True,则进行区分大小写的查找。默认值为False。

  • 参数MatchByte是可选的,仅在选择或安装了双字节语言支持时使用。若为True,则双字节字符仅匹配双字节字符。若为False,则双字节字符可匹配其等价的单字节字符。

  • 参数SerchFormat是可选的,搜索的格式。

每次使用Find方法后,参数LookIn、LookAt、SearchOrder 和MatchByte的设置将保存。如果下次调用Find方法时不指定这些参数的值,就使用保存的值。因此每次使用该方法时请明确设置这些参数。相当于手工使用ctrl+F后会保存上次的设置

如果工作表的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 End If

#022 End With

#023 End If

#024 End Sub

代码解析:

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

第8行到第17行代码使用Find方法在工作表Sheet1的A列中查找。

第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。

第18行代码将查找到的单元格底色设置成黄色。

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

expression.FindNext(After)

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

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

第20行代码如果查找到的单元格地址等于字符串变量FindAddress所记录的地址,说明A列已搜索完毕,结束查找过程。

运行RngFindNext过程,在InputBox函数输入框中输入"196.01"后结果如图 51所示。

Excel在vba代码中使用find方法查找定位单元格区域的代码详解

图 51使用FindNext方法重复搜索

还可以使用FindPrevious方法进行重复搜索,FindPrevious方法的语法如下:

expression.FindPrevious(After)

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

往期精彩推荐:

Excel输入神器 输入ID回车直接显示名称 VBA实例

免费的Excel多文件多表格合并工具使用讲解 vba代码开源

VBA给写好的多个公式批量套上IFERROR和ROUND函数

微信公众号 【EXCEL880】 QQ群【273774246】
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页

发表评论

您必须才能发表评论!