Excel與資料庫的差異,就在於他的工作表一覽無遺,任何儲存格都可以放資料,資料存放方式較資料庫寬鬆,欄位以放第一列有沒有寫欄位名稱也沒任何影響,但也因此要搜尋資料時,也增加了不少困難度。
這裡要介紹另一個獨特的陳述式For Each...Next ,該陳述式可讓一個範圍值內的所有欄位或者陣列內的資料,逐一帶出。
另外要介紹的是Like 運算子,這部份與SQL語法就很接近,可以判斷是否「類似」描述的內容。
我們有個10x10的資料內容,儲存於A1到J10內,裡面存了100個姓名,透過程式,可逐一比對範圍內的每個儲存格是否包含「怡」或包含「婷」的字串,如果是的話,就印出儲存格位置與姓名。
以下為範例程式:
Sub Day3_迴圈控制與模糊搜尋()
Dim strKeyword1 As String
Dim strKeyword2 As String
Dim Rng As Object
strKeyword1 = "怡"
strKeyword2 = "婷"
For Each Rng In Range("A1:J10")
If Rng.Text Like "*" & strKeyword1 & "*" Or _
Rng.Text Like "*" & strKeyword2 & "*" Then
Debug.Print Rng.Address & ": " & Rng.Text
End If
Next
End Sub
以下逐行解釋
For Each Rng In Range("A1:J10")逐一帶出範圍內的每個儲存格
If Rng.Text Like "*" & strKeyword1 & "*" 如果該儲存格的文字內容類似strKeyword1代表的字串
Or _ 或者(底線為換行符號)
Rng.Text Like "*" & strKeyword2 & "*" Then該儲存格的文字內容類似strKeyword2代表的字串則
Debug.Print Rng.Address & ": " & Rng.Text印出儲存格位址與文字內容(中間冒號隔開)
其中,如果把Or改為And的話,就會變成尋找姓名包含「怡」以及「婷」的字串,當然,還可以透過括號與多個And、Or來進行更複雜的搜尋,以上的分享是否能激發更多想像空間?希望各位能舉一反三,多加運用。
老師您好,針對 If Rng.Text Like "" & strKeyword1 & "" 中的*
代表什麼意思呢?
為何不能只寫成 If Rng.Text Like strKeyword1 就好了呢?
您好,是代表所有值,如果沒加,那只找跟strKeyword1相同的值,前後都加,就是前後夾雜者任何值,但中間有出現過strKeyword1就列出,好了,舉一反三一下,如果要尋找的是前面為strKeyword1值,後面為任何值,要怎麼寫?
原來如此,謝謝老師!
如果要尋找的是前面為strKeyword1值時,寫法應該是:
If Rang.Text Like strKeyword1 & "*"....
不知道這樣是否為正確解答呢?
由於是新手,還請老師多指教