欢迎来到天天文库
浏览记录
ID:11940137
大小:63.00 KB
页数:9页
时间:2018-07-15
《在vba中使用find方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在VBA中使用Find方法使用VBA在工作表或单元格区域中查找某项数据时,我们通常使用For…Next循环,这在小范围中使用还可以,但应用在大量数据中查找时,会耗费较多时间。而在Excel工作表中,通常使用菜单“编辑>>查找”命令或按Ctrl+F组合键,在“查找和替换”对话框中来迅速查找所需的数据。在VBA中,我们也能使用这种方法,这在下面的内容中介绍。为什么要使用Find方法呢?最主要的原因是查找的速度。如果要使用VBA代码在包含大量数据的单元格区域中查找某项数据,应该使用Find方法。例如,在工作表Sheet1的单元格IV65536中输入
2、fanjy,然后运行下面的代码:SubQuickSearch() IfNotSheet1.Cells.Find("fanjy")IsNothingThenMsgBox"已找到fanjy!"EndSub再试试下面的代码:SubSlowSearch() DimRAsRange ForEachRInSheet1.Cells IfR.Value="fanjy"ThenMsgBox"已找到fanjy!" NextREndSub比较一下两段代码的速度,可知第一段代码运行很快,而第二段代码却要执行相当长的一段时间。关于Find方
3、法的基本使用方法请见《关于查找方法(Find方法)的应用》。下面介绍一些扩展Find方法的技术。我们能够使用Find方法查找单元格区域的数据,但是没有一个方法能够返回一个Range对象,该对象引用了含有所查找数据的所有单元格,下面提供了一个FindAll函数来实现此功能。此外,Find方法的另一个不足之处是不支持通配符字符串,下面也提供了一个WildCardMatchCells函数,返回一个Range对象,引用了与所提供的通配符字符串相匹配的单元格。通配符字符串可以是有效使用在Like运算符中的任何字符串,关于Like运算符的介绍请见《关于L
4、ike运算符的使用》一文。---------------------FindAll函数这个程序在参数SearchRange所代表的区域中查找所有含有参数FindWhat代表的值的单元格,SearchRange参数必须是一个单独的单元格区域对象,FindWhat参数是想要查找的值,其它参数是可选的且与Find方法的参数意思相同。FindAll函数的代码如下:OptionCompareTextFunctionFindAll(SearchRangeAsRange,FindWhatAsVariant,_ OptionalLookInAsXlFin
5、dLookIn=xlValues,OptionalLookAtAsXlLookAt=xlWhole,_ OptionalSearchOrderAsXlSearchOrder=xlByRows,_ OptionalMatchCaseAsBoolean=False)AsRange'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''返回SearchRange区域中含有FindWhat所代表的值的所有单元格组成的R
6、ange对象'其参数与Find方法的参数相同'如果没有找到单元格,将返回Nothing.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' DimFoundCellAsRange DimFoundCellsAsRange DimLastCellAsRange DimFirstAddrAsString WithSearchRange SetLastCell=.Cells(.Cells.Count) EndWith
7、 SetFoundCell=SearchRange.Find(what:=FindWhat,after:=LastCell,_ LookIn:=LookIn,LookAt:=LookAt,SearchOrder:=SearchOrder,MatchCase:=MatchCase) IfNotFoundCellIsNothingThen SetFoundCells=FoundCell FirstAddr=FoundCell.Address Do SetFoundCells=Application.Union(FoundC
8、ells,FoundCell) SetFoundCell=SearchRange.FindNext(after:=FoundCell) LoopUnti
此文档下载收益归作者所有