我們緻力于為大家奉獻最有效的經驗,讓大家能夠解決掉問題,但是大家也都知道,每個人遇到的情況都是不一樣的,大家在看經驗的同時,除了跟随操作,也需要自己的思考,舉一反三的解決問題,這樣才會變得更加有内涵,一起成長為一樣的經驗達人。根據二八定律,學好這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,提高工作效率!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!