第一章 入門篇 1.18 Find語句 Find語句的功能相當(dāng)于Excel菜單里的“查找”。該語句的語法是這樣的: Range('要查找的區(qū)域').Find(What,After,Lookin,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SearchFormat) Find語句在要查找的區(qū)域中查找信息,返回找到該信息的第一個(gè)單元格,沒找到返回Nothing。 讓我們來了解一下Find的參數(shù): Find語句有這么多參數(shù),其實(shí)它只有一個(gè)必選參數(shù)What,其它參數(shù)都是可選。 What 要查什么? After 在哪個(gè)單元格之后開始查詢 Lookin: xlformulas 查詢公式 xlvalues 查詢值 xlcomments 查詢批注 LookAt: xlWhole 精確查詢,簡寫1 xlPart 模糊查詢,簡寫2 SearchOrder: xlByRows 按行查找,簡寫1 xlByColumns 按列查找,簡寫2 SearchDirection: xlnext 向下查找(默認(rèn)),簡寫1 xlprevious 向上查找,簡寫2 MatchCase 默認(rèn)值為False不區(qū)分大小寫,如果為True則搜索區(qū)分大小寫。 大家可以對照一下,F(xiàn)ind語句的參數(shù)設(shè)置,與Excel菜單里的“查找”具有的功能是一一對應(yīng)的。在“查找”菜單里點(diǎn)選的功能,都可以通過設(shè)置Find語句的參數(shù),在VBA里實(shí)現(xiàn)。 查找內(nèi)容可以使用通配符,如:*、?等。 例句: 在下表中的B列找到臺式電腦,彈出它的地址。
MsgBox Range('b:b').find('臺式電腦').Address 這樣返回的是一個(gè)絕對引用地址:$B$3,這時(shí)可以用.Address(0,0),返回B3。 小程序: 從上表中隨機(jī)抽取3個(gè)卡片號,把抽取結(jié)果輸入到“g”列。 Sub find() h = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To 3 sj = Application.RandBetween(2, h) Set 查找結(jié)果 = Range('g:g').find(Cells(sj, 1)) If 查找結(jié)果 Is Nothing Then Cells(i, 'g') = Cells(sj, 1) End If Next End Sub 我們看一下這條語句: sj = Application.RandBetween(2, h) 在這條語句里,我們引用了Excel的一個(gè)函數(shù)RandBetween來生成一個(gè)隨機(jī)數(shù)。想在VBA里引用現(xiàn)有的Excel函數(shù)時(shí),在函數(shù)前加上Application就可以了,用法與函數(shù)的使用相同。 我們先用RandBetween函數(shù)生成一個(gè)在2和最大行數(shù)之間的隨機(jī)數(shù),然后把該隨機(jī)數(shù)對應(yīng)的卡片號在'g'列查找。因?yàn)椴檎业降慕Y(jié)果是一個(gè)單元格對象,所以查找結(jié)果的賦值要加上'Set'。如果找到了,說明該卡片號已經(jīng)被抽取到'g'列了,所以不再重復(fù)抽取。如果沒找到,就把該卡片號復(fù)制到'g'列。 不過這個(gè)程序運(yùn)行以后,可能因?yàn)楫a(chǎn)生的隨機(jī)數(shù)會相同,所以抽取的卡片達(dá)不到3個(gè)。所以我們可以把For循環(huán)的次數(shù)加大,結(jié)果Exit For語句使用。上面的程序我們可以修改一下: Sub find() h = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To 10 sj = Application.RandBetween(2, h) Set 查找結(jié)果 = Range('g:g').find(Cells(sj, 1)) If 查找結(jié)果 Is Nothing Then n = n + 1 Cells(n, 'g') = Cells(sj, 1) End If If n = 3 Then Exit For Next End Sub 這樣就能保證每次都能抽取到3個(gè)卡片號了。不過這樣寫程序,如果For循環(huán)的次數(shù)設(shè)置的不合理,仍然不會得到我們想要的結(jié)果。在以后的章節(jié)里,我們會學(xué)到另一個(gè)循環(huán)語句Do Loop語句,它會無限次循環(huán),直到達(dá)到我們需要的結(jié)果為止。本章節(jié)主要是介紹Find語句的用法,各位可以自己動手編寫一些語句,測試一下Find語句每個(gè)參數(shù)的用法。 |
|