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,提高工作效率!