介紹如何在 Excel 使用 VBA 的 Range.Find
方法尋找特定的資料或關鍵字等。
這個 Excel 中包含了臺灣證券交易所上市個股日成交資訊,以下將示範如何使用 Excel VBA 程式搜尋其中的資料。
假設我們想在證卷名稱這一欄中尋找含有「國泰」的儲存格,可以使用以下的 VBA 程式,先決定搜尋的範圍之後,再使用 FIND
尋找:
Dim cell As Range ' 在 B1:B2000 範圍中,尋找資料含有「國泰」的儲存格 Set cell = Range("B1:B2000").FIND("國泰", LookIn:=xlValues, LookAt:=xlPart) ' 如果有找到,則顯示儲存格位置與內容 If Not cell Is Nothing Then MsgBox "位置:" & cell.Address & vbNewLine & "內容:" & cell.Value End If
如果有發現結果,就會以 MsgBox
顯示類似這樣提示訊息。
如果想要顯示指定範圍中所有符合的搜尋結果,可以使用迴圈搭配 FindNext
的方式逐一顯示每一個符合條件的搜尋結果。
Dim cell As Range Dim firstAddress As String ' 搜尋範圍訂為 B1:B2000 With Range("B1:B2000") ' 尋找資料含有「國泰」的儲存格 Set cell = .FIND("國泰", LookIn:=xlValues, LookAt:=xlPart) ' 若找到含有「國泰」的儲存格 If Not cell Is Nothing Then ' 儲存找到的第一個位置 firstAddress = cell.Address Do MsgBox "位置:" & cell.Address & vbNewLine & "內容:" & cell.Value ' 尋找下一個 Set cell = .FindNext(cell) ' 若找到下一個不重複的儲存格,則繼續 Loop While (Not cell Is Nothing) And (cell.Address <> firstAddress) End If End With
由於 FindNext
在搜尋完整個範圍之後,會自動重新從開頭處繼續搜尋,所以我們必須先記住第一個搜尋結果的位置,後續的每次搜尋結果都要檢查其位置是否跟第一次結果的位置相同,藉此判斷 FindNext
是否已經將整個範圍搜尋完成。
上面的範例都是搜尋內容含有指定關鍵字的儲存格,如果想要搜尋內容完全等於指定的文字,可以將 LookAt
參數改為 xlWhole
。
例如搜尋內容完全等於「國泰金」三個字的儲存格:
Dim cell As Range ' 在 B1:B2000 範圍中,尋找資料是「國泰金」的儲存格 Set cell = Range("B1:B2000").FIND("國泰金", LookIn:=xlValues, LookAt:=xlWhole) ' 如果有找到,則顯示儲存格位置與內容 If Not cell Is Nothing Then MsgBox "位置:" & cell.Address & vbNewLine & "內容:" & cell.Value End If
參考資料:微軟官方文件