第三章 在VBA中使用Find方法.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在VBA中使用Find方法 使用VBA在工作表或单元格区域中查找某项数据时,我们通常使用For…Next循环,这在小范围中使用还可以,但应用在大量数据中查找时,会耗费较多时间。 而在Excel工作表中,通常使用菜单“编辑查找”命令或按Ctrl+F组合键,在“查找和替换”对话框中来迅速查找所需的数据。在VBA中,我们也能使用这种方法,这在下面的内容中介绍。 为什么要使用Find方法呢?最主要的原因是查找的速度。如果要使用VBA代码在包含大量数据的单元格区域中查找某项数据,应该使用Find方法。 例如,在工作表Sheet1的单元格IV65536中输入fanjy,然后运行下面的代码: Sub QuickSearch() ??? If Not Sheet1.Cells.Find(fanjy) Is Nothing Then MsgBox 已找到fanjy! End Sub 再试试下面的代码: Sub SlowSearch() ??? Dim R As Range ??? For Each R In Sheet1.Cells ??????? If R.Value = fanjy Then MsgBox 已找到fanjy! ??? Next R End Sub 比较一下两段代码的速度,可知第一段代码运行很快,而第二段代码却要执行相当长的一段时间。 关于Find方法的基本使用方法请见《关于查找方法(Find方法)的应用》。下面介绍一些扩展Find方法的技术。 我们能够使用Find方法查找单元格区域的数据,但是没有一个方法能够返回一个Range对象,该对象引用了含有所查找数据的所有单元格,下面提供了一个FindAll函数来实现此功能。此外,Find方法的另一个不足之处是不支持通配符字符串,下面也提供了一个WildCardMatchCells函数,返回一个Range对象,引用了与所提供的通配符字符串相匹配的单元格。通配符字符串可以是有效使用在Like运算符中的任何字符串,关于Like运算符的介绍请见《关于Like运算符的使用》一文。 - - - - - - - - - - - - - - - - - - - - - FindAll函数 这个程序在参数SearchRange所代表的区域中查找所有含有参数FindWhat代表的值的单元格,SearchRange参数必须是一个单独的单元格区域对象,FindWhat参数是想要查找的值,其它参数是可选的且与Find方法的参数意思相同。 FindAll函数的代码如下: Option Compare Text Function FindAll(SearchRange As Range, FindWhat As Variant, _ ??? Optional LookIn As XlFindLookIn = xlValues, Optional LookAt As XlLookAt = xlWhole, _ ??? Optional SearchOrder As XlSearchOrder = xlByRows, _ ??? Optional MatchCase As Boolean = False) As Range 返回SearchRange区域中含有FindWhat所代表的值的所有单元格组成的Range对象 其参数与Find方法的参数相同 如果没有找到单元格,将返回Nothing. ? Dim FoundCell As Range ? Dim FoundCells As Range ? Dim LastCell As Range ? Dim FirstAddr As String ? With SearchRange ??? Set LastCell = .Cells(.Cells.Count) ? End With ? Set FoundCell = SearchRange.Find(what:=FindWhat, after:=LastCell, _ ??? LookIn:=LookIn, LookAt:=LookAt, SearchOrder:=SearchOrder, MatchCase:=MatchCase) ? If Not FoundCell Is Nothing Then ??? Set FoundCells = FoundCell ??? FirstAddr = FoundCell.Address ??? Do ????? Set FoundCells = Application.Union(FoundCells, FoundCell) ????? Set FoundCell = SearchRange.FindNext(after:=FoundCell) ??? Loop

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档