VBA中关于FIND的查找方法_第1页
VBA中关于FIND的查找方法_第2页
VBA中关于FIND的查找方法_第3页
VBA中关于FIND的查找方法_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于查找方法(Find 方法 )的应用 (一 )在 Excel 中,选择菜单“编辑”“查找 (F), ”命令或者按“Ctrl+F ”组合键,将弹出如下图 01 所示的“查找和替换”对话框。在“查找”选项卡中,输入需要查找的内容并设置相关选项后进行查找,Excel 会将活动单元格定位在查找到的相应单元格中。如果未发现查找的内容,Excel 会弹出“ Excel 找不到正在搜索的数据”的消息框。图 01: “查找”对话框Excel 的这个功能对查找指定的数据非常有用,特别是在含有大量数据的工作表中搜索数据时,更能体现出该功能的快速和便捷。同样,在ExcelVBA 中使用与该功能对应的Find 方法

2、, 提供了一种在单元格区域查找特定数据的简单方式,并且比用传统的循环方法进行查找的速度更快。1. Find 方法的作用Find 方法将在指定的单元格区域中查找包含参数指定数据的单元格,若找到符合条件的数据,则返回包含该数据的单元格;若未发现相匹配的数据,则返回Nothing 。该方法返回一个Range对象,在使用该方法时,不影响选定区域或活动单元格。2. Find 方法的语法 语法 <单元格区域>.Find (What , After , LookIn , LookAt , SearchOrder , SearchDirection ,MatchCase , MatchByte ,

3、 SearchFormat) 参数说明(1)单元格区域 >,必须指定,返回一个 Range对象。(2)参数What,必需指定。代表所要查找的数据,可以为字符串、整数或者其它任何数据类型的数据。对应于“查找与替换”对话框中, “查找内容”文本框中的内容。(3)参数After ,可选。指定开始查找的位置,即从该位置所在的单元格之后向后或之前向前开始查找(也就是说,开始时不查找该位置所在的单元格,直到 Find 方法绕回到该单元格时,才对其内容进行查找)。所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之后开始进行查找。(4)参数 LookIn ,

4、可选。指定查找的范围类型,可以为以下常量之一:xlValues、 xlFormulas或者xlComments ,默认值为xlFormulas。对应于“查找与替换”对话框中,"查找范围”下拉框中的选项。(5)参数LookAt ,可选。可以为以下常量之一:XlWhole或者xlPart,用来指定所查找的数据是与单元格内容完全匹配还是部分匹配,默认值为xlParto对应于“查找与替换”对话框中, “单元格匹配”复选框。(6)参数SearchOrder, 可选。 用来确定如何在单元格区域中进行查找,是以行的方式(xlByRows)查找,还是以列的方式(xlByColumns) 查找,默认值

5、为xlByRows 。对应于“查找与替换”对话框中,“搜索”下拉框中的选项。(7)参数 SearchDirection ,可选。用来确定查找的方向,即是向前查找 (XlPrevious)还是向后 查找 (xlNext) ,默认的是向后查找。(8)参数MatchCase,可选。若该参数值为True,则在查找时区分大小写。默认值为False。对应于“查找与替换”对话框中, “区分大小写”复选框。(9)参数MatchByter ,可选。即是否区分全角或半角,在选择或安装了双字节语言时使用。若该参数为True,则双字节字符仅与双字节字符相匹配;若该参数为 False,则双字节字符可匹配与其相同的单字节

6、字符。对应于 “查找与替换”对话框中, “区分全角/半角”复选框。(10)参数SearchFormat,可选,指定一个确切类型的查找格式。对应于“查找与替换”对话框中, “格式”按钮。当设置带有相应格式的查找时,该参数值为True。(11)在每次使用Find 方法后, 参数 LookIn 、 LookAt 、 SearchOrder、 MatchByte 的设置将保存。如果下次使用本方法时,不改变或指定这些参数的值,那么该方法将使用保存的值。在 VBA 中设置的这些参数将更改“查找与替换”对话框中的设置;同理,更改“查找与替换”对话框中的设置,也将同时更改已保存的值。也就是说,在编写好一段代码

7、后,若在代码中未指定上述参数,可能在初期运行时能满足要求,但若用户在 “查找与替换”对话框中更改了这些参数,它们将同时反映到程序代码中,当再次运行代码时,运行结果可能会产生差异或错误。若要避免这个问题,在每次使用时建议明确的设置这些参数。3. Find 方法使用示例3.1 本示例在活动工作表中查找what 变量所代表的值的单元格,并删除该单元格所在的列。Sub Find_Error()Dim rng As RangeDim what As Stringwhat = "Error"DoSet rng = ActiveSheet.UsedRange.Find(what)If r

8、ng Is Nothing ThenExit DoElseColumns(rng.Column).DeleteEnd IfLoopEnd Sub3.2 带格式的查找本示例在当前工作表单元格中查找字体为"Arial Unicode MS" 且颜色为红色的单元格。其中,Application.FindFormat 对象允许指定所需要查找的格式,此时 Find 方法的参数SearchFormat应设置为True。Sub FindWithFormat()With Application.FindFormat.Font.Name = "Arial Unicode MS&qu

9、ot;.ColorIndex = 3End WithCells.Find(what:="", SearchFormat:=True).ActivateEnd Sub 小结 在使用 Find 方法找到符合条件的数据后,就可以对其进行相应的操作了。您可以:(1)对该数据所在的单元格进行操作;(2)对该数据所在单元格的行或列进行操作;(3)对该数据所在的单元格区域进行操作。4. 与 Find 方法相联系的方法可以使用FindNext 方法和 FindPrevious 方法进行重复查找。在使用这两个方法之前,必须用 Find 方法指定所需要查找的数据内容。4.1 FindNext

10、方法FindNext 方法对应于“查找与替换”对话框中的“查找下一个”按钮。可以使用该方法继续执行查找,查找下一个与Find 方法中所指定条件的数据相匹配的单元格,返回代表该单元格白R Range对象。在使用该方法时,不影响选定区域或活动单元格。4.1.1 语法<单元格区域>.FindNext(After)4.1.2 参数说明参数 After ,可选。代表所指定的单元格,将从该单元格之后开始进行查找。开始时不查找该位置所在的单元格,直到FindNext 方法绕回到该单元格时,才对其内容进行查找。所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的

11、单元格之后开始进行查找。当查找到指定查找区域的末尾时,本方法将环绕至区域的开始继续查找。发生环绕后,为停止查找, 可保存第一次找到的单元格地址,然后测试下一个查找到的单元格地址是否与其相同,作为判断查找退出的条件,以避免出现死循环。当然,如果在查找的过程中,将查找到的单元格数据进行了改变,也可不作此判断,如下例所示。4.1.3 对 VBA 帮助系统上的一点疑问探讨在 VBA 帮助系统中,介绍 Find 方法和 FindNext 方法所使用的示例好像有点问题:当在 Excel中运行时,虽然运行结果正确,但是在运行到最后时,会报错误:运行时错误91 :对象变量或 With 块变量未设置。究其原因,

12、可能是对象变量c 的问题,因为当进行查找并将相应的值全部改变后,最后变量 c的值为Nothing。将其稍作改动后,运行通过。原示例代码如下:(大家也可参见VBA 帮助系统Find 方法或 FindNext 方法帮助主题)本示例在单元格区域A1:A500 中查找值为2的单元格,并将这些单元格的值变为5。With Worksheets(1).Range("a1:a500")Set c = .Find(2, lookin:=xlValues)If Not c Is Nothing ThenfirstAddress = c.AddressDoc.Value = 5Set c = .

13、FindNext(c)Loop While Not c Is Nothing And c.Address <> firstAddressEnd IfEnd With经修改后的示例代码如下,即在原代码中加了一句错误处理语句On Error Resume Next,忽略所发生的错误。Sub test1()Dim c As Range, firstAddress As StringOn Error Resume NextWith Worksheets(1).Range("a1:a15")Set c = .Find(2, LookIn:=xlValues)If Not

14、c Is Nothing Then firstAddress = c.AddressDoc.Value = 5Set c = .FindNext(c)Loop While Not c Is Nothing And c.Address <> firstAddressEnd IfEnd WithEnd Sub或者,将代码作如下修改,即去掉原代码中最后一个判断循环的条件c.Address <>firstAddress ,因为本程序的功能是在指定区域查找值为2 的单元格并替换为数值5,当程序在指定区域查找不到数值2 时就会退出循环,不涉及到重复循环的问题。Sub test2()

15、Dim c As Range, firstAddress As StringWith Worksheets(1).Range("a1:a15")Set c = .Find(2, LookIn:=xlValues)If Not c Is Nothing Then firstAddress = c.AddressDoc.Value = 5Set c = .FindNext(c)Loop While Not c Is NothingEnd IfEnd WithEnd Sub您也可以试试该程序,看看我的理解是否正确,或者还有什么其它的解决办法。4.2 FindPrevious 方法

16、可以使用该方法继续执行Find 方法所进行的查找,查找前一个与Find 方法中所指定条件的数据相匹配的单元格,返回代表该单元格的Range 对象。在使用该方法时,不影响选定区域或活动单元格。4.2.1 语法<单元格区域>.FindPrevious(After)4.2.2 参数说明参数After ,可选。代表所指定的单元格,将从该单元格之前开始进行查找。开始时不查找该位置所在的单元格,直到FindPrevious 方法绕回到该单元格时,才对其内容进行查找。所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之前开始进行查找。当查找到指定查找区

17、域的起始位置时,本方法将环绕至区域的末尾继续查找。发生环绕后,为停止查找,可保存第一次找到的单元格地址,然后测试下一个查找到的单元格地址是否与其相同,作为判断查找退出的条件,以避免出现死循环。4.2.3 示例在工作表中输入如下图02 所示的数据,至少保证在A 列中有两个单元格输入了数据“ excelhome”。图 02:测试的数据在 VBE 编辑器中输入下面的代码测试Find 方法、 FindNext 方法、 FindPrevious 方法,体验各个方法所查找到的单元格位置。Sub testFind()Dim findValue As RangeSet findValue = Worksheets("Sheet1").Columns("A").Find(what:="excelhome")MsgBox " 第一个数据发现在单元格:" & findValue.AddressSet findValue = Worksheets("Sheet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论