vba中find函式的使用方法及例項(vba的find使用方法)
我們致力於為大家奉獻最有效的經驗,讓大家能夠解決掉問題,但是大家也都知道,每個人遇到的情況都是不一樣的,大家在看經驗的同時,除了跟隨操作,也需要自己的思考,舉一反三的解決問題,這樣才會變得更加有內涵,一起成長為一樣的經驗達人。根據二八定律,學好這excel VBA,就能完成80%的工作。
在Excel中使用查詢對話方塊可以查詢工作表中特定內容的單元格,而在VBA中則使用Find方法,如下面的程式碼所示。
#001 Sub RngFind()
#002 Dim StrFind As String
#003 Dim Rng As Range
#004 StrFind = InputBox("請輸入要查詢的值:")
#005 If Trim(StrFind) <> "" Then
#006 With Sheet1.Range("A:A")
#007 Set Rng = .Find(What:=StrFind, _
#008 After:=.Cells(.Cells.Count), _
#009 LookIn:=xlValues, _
#010 LookAt:=xlWhole, _
#011 SearchOrder:=xlByRows, _
#012 SearchDirection:=xlNext, _
#013 MatchCase:=False)
#014 If Not Rng Is Nothing Then
#015 Application.Goto Rng, True
#016 Else
#017 MsgBox "沒有找到該單元格!"
#018 End If
#019 End With
#020 End If
#021 End Sub
程式碼解析:
RngFind過程使用Find方法在工作表Sheet1的A列中查詢InputBox函式對話方塊中所輸入的值,並查詢該值所在的第一個單元格。
第6到第13行程式碼在工作表Sheet1的A列中查詢InputBox函式對話方塊中所輸入的值。應用於Range物件的Find方法在區域中查詢特定資訊,並返回Range物件,該物件代表用於查詢資訊的第一個單元格。如果未發現匹配單元格,就返回Nothing,語法如下:
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
引數expression是必需的,該表示式返回一個Range物件。
引數What是必需的,要搜尋的資料,可為字串或任意資料型別。
引數After是可選的,表示搜尋過程將從其之後開始進行的單元格,必須是區域中的單個單元格。查詢時是從該單元格之後開始的,直到本方法繞回到指定的單元格時,才對其進行搜尋。如果未指定本引數,搜尋將從區域的左上角單元格之後開始。
在本例中將After引數設定為A列的最後一個單元格,所以查詢時從A1單元格開始搜尋。
引數LookIn是可選的,資訊型別。
引數LookAt是可選的,可為XlLookAt常量的xlWhole 或xlPart之一。
引數SearchOrder是可選的,可為XlSearchOrder常量的xlByRows或xlByColumns之一。
引數SearchDirection是可選的,搜尋的方向,可為XlSearchDirection常量的xlNext或xlPrevious之一。
引數MatchCase是可選的,若為True,則進行區分大小寫的查詢。預設值為False。
引數MatchByte是可選的,僅在選擇或安裝了雙位元組語言支援時使用。若為True,則雙位元組字元僅匹配雙位元組字元。若為False,則雙位元組字元可匹配其等價的單位元組字元。
引數SerchFormat是可選的,搜尋的格式。
每次使用Find方法後,引數LookIn、LookAt、SearchOrder 和MatchByte的設定將儲存。如果下次呼叫Find方法時不指定這些引數的值,就使用儲存的值。因此每次使用該方法時請明確設定這些引數。
如果工作表的A列中存在重複的數值,那麼需要使用FindNext方法或FindPrevious方法進行重複搜尋,如下面的程式碼所示。
#001 Sub RngFindNext()
#002 Dim StrFind As String
#003 Dim Rng As Range
#004 Dim FindAddress As String
#005 StrFind = InputBox("請輸入要查詢的值:")
#006 If Trim(StrFind) <> "" Then
#007 With Sheet1.Range("A:A")
#008 Set Rng = .Find(What:=StrFind, _
#009 After:=.Cells(.Cells.Count), _
#010 LookIn:=xlValues, _
#011 LookAt:=xlWhole, _
#012 SearchOrder:=xlByRows, _
#013 SearchDirection:=xlNext, _
#014 MatchCase:=False)
#015 If Not Rng Is Nothing Then
#016 FindAddress = Rng.Address
#017 Do
#018 Rng.Interior.ColorIndex = 6
#019 Set Rng = .FindNext(Rng)
#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
#021 End If
#022 End With
#023 End If
#024 End Sub
程式碼解析:
RngFindNext過程在工作表Sheet1的A列中查詢InputBox函式對話方塊中所輸入的值,並將查到單元格底色設定成黃色。
第8行到第17行程式碼使用Find方法在工作表Sheet1的A列中查詢。
第16行程式碼將查詢到的第一個單元格地址賦給字串變數FindAddress。
第18行程式碼將查詢到的單元格底色設定成黃色。
第19行程式碼使用FindNext方法進行重複搜尋。FindNext方法繼續執行用Find方法啟動的搜尋。查詢下一個匹配相同條件的單元格並返回代表單元格的Range物件,語法如下:
expression.FindNext(After)
引數expression是必需的,返回一個Range物件。
引數After是可選的,指定一個單元格,查詢將從該單元格之後開始。
第20行程式碼如果查詢到的單元格地址等於字串變數FindAddress所記錄的地址,說明A列已搜尋完畢,結束查詢過程。
執行RngFindNext過程,在InputBox函式輸入框中輸入“196.01”後結果如圖 5‑1所示
圖 5‑1 使用FindNext方法重複搜尋
還可以使用FindPrevious方法進行重複搜尋,FindPrevious方法的語法如下:
expression.FindPrevious(After)
FindPrevious方法和FindNext方法唯一的區別是FindPrevious方法查詢匹配相同條件的前一個單元格而FindNext方法是查詢匹配相同條件的下一個單元格。
如果你在工作中還需要設計其他的表格模板,都可以留言,我們會根據大家需求來整理相關的學習資料,目的只有一個,那就是學好Excel,提高工作效率!