




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
在VBA中使用Find方法使用VBA在工作表或單元格區(qū)域中查找某項數據時,我們通常使用For...Next循環(huán),這在小范圍中使用還可以,但應用在大量數據中查找時,會耗費較多時間。而在Excel工作表中,通常使用菜單'編輯>>查找”命令或按Ctrl+F組合鍵,在“查找和替換”對話框中來迅速查找所需的數據。在VBA中,我們也能使用這種方法,這在下面的內容中介紹。為什么要使用Find方法呢?最主要的原因是查找的速度如果要使用VBA代碼在包含大量數據的單元格區(qū)域中查找某項數據,應該使用Find方法。例如,在工作表Sheet1的單元格IV65536中輸入fanjy,然后運行下面的代碼:SubQuickSearch()IfNotSheet1.Cells.Find("fanjy")IsNothingThenMsgBox”已找到fanjy!"EndSub再試試下面的代碼:SubSlowSearch()DimRAsRangeForEachRInSheet1.CellsIfR.Value="fanjy"ThenMsgBox”已找到fanjy!"NextREndSub比較一下兩段代碼的速度,可知第一段代碼運行很快,而第二段代碼卻要執(zhí)行相當長的一段時間。關于Find方法的基本使用方法請見《關于查找方法(Find方法)的應用》。下面介紹一些擴展Find方法的技術。我們能夠使用Find方法查找單元格區(qū)域的數據,但是沒有一個方法能夠返回一個Range對象,該對象引用了含有所查找數據的所有單元格,下面提供了一個FindAll函數來實現此功能。此外,Find方法的另一個不足之處是不支持通配符字符串,下面也提供了一個WildCardMatchCells函數,返回一個Range對象,引用了與所提供的通配符字符串相匹配的單元格。通配符字符串可以是有效使用在Like運算符中的任何字符串,關于Like運算符的介紹請見《關于Like運算符的使用》一文。FindAll函數這個程序在參數SearchRange所代表的區(qū)域中查找所有含有參數FindWhat代表的值的單元格,SearchRange參數必須是一個單獨的單元格區(qū)域對象,FindWhat參數是想要查找的值,其它參數是可選的且與Find方法的參數意思相同。FindAll函數的代碼如下:OptionCompareTextFunctionFindAll(SearchRangeAsRange,FindWhatAsVariant,_OptionalLookInAsXlFindLookIn=xlValues,OptionalLookAtAsXlLookAt=xlWhole,_OptionalSearchOrderAsXlSearchOrder=xlByRows,_OptionalMatchCaseAsBoolean=False)AsRange ,返回SearchRange區(qū)域中含有FindWhat所代表的值的所有單元格組成的Range對象'其參數與Find方法的參數相同'如果沒有找到單元格,將返回Nothing. DimFoundCellAsRangeDimFoundCellsAsRangeDimLastCellAsRangeDimFirstAddrAsStringWithSearchRangeSetLastCell=.Cells(.Cells.Count)EndWithSetFoundCell=SearchRange.Find(what:=FindWhat,after:=LastCell,_LookIn:=LookIn,LookAt:=LookAt,SearchOrder:=SearchOrder,MatchCase:=MatchCase)IfNotFoundCellIsNothingThenSetFoundCells=FoundCellFirstAddr=FoundCell.AddressDoSetFoundCells=Application.Union(FoundCells,FoundCell)SetFoundCell=SearchRange.FindNext(after:=FoundCell)LoopUntil(FoundCellIsNothing)Or(FoundCell.Address=FirstAddr)EndIfIfFoundCellsIsNothingThenElseSetFindAll=FoundCellsEndIfEndFunction使用上面代碼的示例:SubTestFindAll()DimSearchRangeAsRangeDimFoundCellsAsRangeDimFoundCellAsRangeDimFindWhatAsVariantDimMatchCaseAsBooleanDimLookInAsXlFindLookInDimLookAtAsXlLookAtDimSearchOrderAsXlSearchOrderSetSearchRange=ThisWorkbook.Worksheets(1).Range("A1:L20")FindWhat="A"'要查找的文本,可根據實際情況自定LookIn=xlValuesLookAt=xlPartSearchOrder=xlByRowsMatchCase=FalseSetFoundCells=FindAll(SearchRange:=SearchRange,FindWhat:=FindWhat,_LookIn:=LookIn,LookAt:=LookAt,SearchOrder:=SearchOrder,MatchCase:=MatchCase)IfFoundCellsIsNothingThenDebug.Print"沒有找到!"ElseForEachFoundCellInFoundCells.CellsNextFoundCellEndIfEndSub上面的代碼中,列出了查找區(qū)域中含有所要查找的數據的所有單元格的地址以及相應文本。不僅可以找出所有含有所查找數據的單元格地址,而且也可以對這些單元格進行一系列操作,如格式化、更改數據等。WildCardMatchCells函數這個程序查找參數SearchRange所代表的區(qū)域中所有單元格,使用Like運算符將它們的值與參數CompareLikeString所代表的值比較。參數SearchRange必須是一個單獨的區(qū)域參數CompareLikeString是想要比較的文本的格式。該函數使用單元格的Text屬性而不是Value屬性??蛇x參數SearchOrder和MatchCase與Find方法中的參數意義相同。該函數返回一個Range對象,該對象包含對與參數CompareLikeString相匹配的所有單元格的引用。如果沒有匹配的單元格,則返回Nothing。因為Find方法不支持通配符,程序將循環(huán)所有的單元格,因此對于包含大量數據的區(qū)域,執(zhí)行時間可能是一個問題。并且,如果參數MatchCase為False或忽略該參數,文本在程序中必須被轉換成大寫,以便于查找時不區(qū)分大小寫(即“A”=,a因此,此時程序運行將更慢。WildCardMatchCells函數的代碼如下:FunctionWildCardMatchCells(SearchRangeAsRange,CompareLikeStringAsString,_OptionalSearchOrderAsXlSearchOrder=xlByRows,_OptionalMatchCaseAsBoolean=False)AsRange '本程序返回文本值與通配符字符串相匹配的單元格引用'返回SearchRange區(qū)域中所有相匹配的單元格'匹配的條件是參數CompareLikeString'使用了VBA中的LIKE運算符'如果沒有相匹配的單元格或指定了一個無效的參數,則返回Nothing.',參數SearchOrder指定查找的方向;逐行還是逐列(SearchOrder:=xlByRows或SearchOrder:=xlByColumns,參數MatchCase指定是否區(qū)分大小寫(MatchCase:=True,"A"<>"a")或(MatchCase:=False,"A"="a").不需要在模塊頂指定”O(jiān)ptionCompareText",如果指定的話,將不會正確執(zhí)行大小寫比較'執(zhí)行單元格中的Text屬性比較,而不是Value屬性比較'因此,僅比較顯示在屏幕中的文本,而不是隱藏在單元格中具體的值,'如果參數SearchRange是nothing或多個區(qū)域,則返回Nothing. DimFoundCellsAsRangeDimFirstCellAsRangeDimLastCellAsRangeDimRowNdxAsLongDimColNdxAsLongDimStartRowAsLongDimEndRowAsLongDimStartColAsLongDimEndColAsLongDimWSAsWorksheetDimRngAsRange,確保參數SearchRange不是Nothing且是一個單獨的區(qū)域IfSearchRangeIsNothingThenExitFunctionEndIfIfSearchRange.Areas.Count>1ThenExitFunctionEndIfWithSearchRangeSetWS=.WorksheetSetFirstCell=.Cells(1)EndWithStartRow=FirstCell.RowStartCol=FirstCell.ColumnEndRow=LastCell.RowEndCol=LastCell.ColumnIfSearchOrder=xlByRowsThenWithWSForRowNdx=StartRowToEndRowForColNdx=StartColToEndColSetRng=.Cells(RowNdx,ColNdx)IfMatchCase=FalseThen '如果參數MatchCase是False,則將字符串轉換成大寫'執(zhí)行忽略大小寫的比較'因此,MatchCase:=False比MatchCase:=True更慢 IfUCase(Rng.Text)LikeUCase(CompareLikeString)ThenIfFoundCellsIsNothingThenSetFoundCells=RngElseSetFoundCells=Application.Union(FoundCells,Rng)EndIfEndIfElse 'MatchCase為真,不需要再進行大小寫轉換,因此更快些,這也是不需要在模塊中指定"OptionCompareText”的原因 IfRng.TextLikeCompareLikeStringThenSetFoundCells=RngElseSetFoundCells=Application.Union(FoundCells,Rng)EndIfEndIfEndIfNextColNdxINextRowNdxEndWithElseWithWSForColNdx=StartColToEndColForRowNdx=StartRowToEndRowSetRng=.Cells(RowNdx,ColNdx)IfMatchCase=FalseThenIfUCase(Rng.Text)LikeUCase(CompareLikeString)ThenIfFoundCellsIsNothingThenSetFoundCells=RngElseSetFoundCells=Application.Union(FoundCells,Rng)EndIfEndIfElseIfRng.TextLikeCompareLikeStringThenIfFoundCellsIsNothingThenSetFoundCells=RngElseSetFoundCells=Application.Union(FoundCells,Rng)EndIfEndIfEndIfNextRowNdxNextColNdxEndWithEndIfIfFoundCellsIsNothingThenSetWildCardMatchCells=NothingElseSetWildCardMatchCells=FoundCellsEndIfEndFunction使用上面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療行業(yè)能源管理與節(jié)能減排策略研究
- 從行業(yè)痛點出發(fā)看區(qū)塊鏈如何解決版權問題
- 智能清潔洗碗機企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 智能安防巡邏無人機企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 智能電燉煲預約款企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 智能商用烤箱企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 獼猴桃果醬罐頭行業(yè)跨境出海戰(zhàn)略研究報告
- 智能生活日志行業(yè)跨境出海戰(zhàn)略研究報告
- 2025年中國生態(tài)寶微生物發(fā)酵核心料市場調查研究報告
- 2025年中國液晶監(jiān)視器市場調查研究報告
- 2025北京九年級(上)期末語文匯編:文言文閱讀
- 越出站界調車RAILWAY課件
- 部隊物資儲備管理制度
- 河北武安招聘警務輔助人員筆試真題2024
- 2025年高級插花花藝師(三級)理論考試題(附答案)
- 脊柱損傷搬運操作
- 醫(yī)院醫(yī)用耗材培訓
- 2025年五年級下冊英語單詞表
- 布魯氏菌病培訓課件
- 2025年古董拍賣收藏品買賣協議書
- 【托比網】2024中國工業(yè)品數字化發(fā)展報告
評論
0/150
提交評論