- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)