炒域名 網(wǎng)站nba最新新聞新浪
《VBA信息獲取與處理》教程(版權(quán)10178984)是我推出第六套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級,是學(xué)完初級,中級后的教程。這部教程給大家講解的內(nèi)容有:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時(shí)操作,剪貼板應(yīng)用、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容。程序文件通過32位和64位兩種OFFICE系統(tǒng)測試。是非常抽象的,更具研究的價(jià)值。
教程共兩冊,二十個(gè)專題。今日分享內(nèi)容是:VBA信息獲取與處理第四個(gè)專題第五節(jié):如何在單個(gè)工作表中查找某個(gè)給定值
【分享成果,隨喜正能量】如果你心眼挺好,又有德行,那你一定有福報(bào)。如果有福報(bào),卻依然發(fā)不了財(cái),請不要疑惑,老天可能將你的福報(bào)化成了健康的身體,平安的日子,溫暖的家庭,和有良德的子孫后代。福報(bào)不一定讓你很有錢,但一定會讓你成為最圓滿的自己。。
專題四 EXCEL工作表數(shù)據(jù)的讀取、回填和查找
這個(gè)專題,我們講解工作表數(shù)據(jù)的處理的問題,對于VBA而言,我給予的定位是“實(shí)現(xiàn)個(gè)人小型數(shù)據(jù)自動化處理的利器”,對于大多數(shù)朋友而言,利用VBA是與EXCEL相關(guān)聯(lián)的,很多的代碼也是用于處理EXCEL內(nèi)或者相關(guān)的各種數(shù)據(jù),工作表更是作為和用戶的交互對象而存在,那么對于工作表的數(shù)據(jù)如何進(jìn)行查找,以及如何讀取就是一個(gè)十分關(guān)鍵的課題,我們這講就來主要講解這個(gè)問題。
第五節(jié) 如何在單個(gè)工作表中查找某個(gè)給定值
這個(gè)專題將的是工作表數(shù)據(jù)的操作,在前幾講中,我們講了工作表數(shù)據(jù)和VBA直接的傳輸,這講的內(nèi)容仍是和工作表相關(guān),就是如何在工作表中查找到某個(gè)值,在《VBA代碼解決方案》中,我也曾經(jīng)講到過FIND方法,甚至提出這是LOOKUP函數(shù)的終結(jié)者。那么如何利用FIND方法解決問題呢?
1 Find方法和FindNext方法
1) 我們先來看看FIND方法的語法和參數(shù):
語法:expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對象。
參數(shù)What是必需的,要搜索的數(shù)據(jù),可為字符串或任意數(shù)據(jù)類型。
參數(shù)After是可選的,表示搜索過程將從其之后開始進(jìn)行的單元格,必須是區(qū)域中的單個(gè)單元格。查找時(shí)是從該單元格之后開始的,直到本方法繞回到指定的單元格時(shí),才對其進(jìn)行搜索。如果未指定本參數(shù),搜索將從區(qū)域的左上角單元格之后開始。
參數(shù)LookIn是可選的,信息類型。xlValues對應(yīng) 值;xlFormulas 對應(yīng) 公式;xlComments對應(yīng) 批注
參數(shù)LookAt是可選的,可為XlLookAt常量的xlWhole 或xlPart之一。
參數(shù)SearchOrder是可選的,可為XlSearchOrder常量的xlByRows或xlByColumns之一。
參數(shù)SearchDirection是可選的,搜索的方向,可為XlSearchDirection常量的xlNext或xlPrevious之一。
參數(shù)MatchCase是可選的,若為True,則進(jìn)行區(qū)分大小寫的查找。默認(rèn)值為False。
參數(shù)MatchByte是可選的,僅在選擇或安裝了雙字節(jié)語言支持時(shí)使用。若為True,則雙字節(jié)字符僅匹配雙字節(jié)字符。若為False,則雙字節(jié)字符可匹配其等價(jià)的單字節(jié)字符。
參數(shù)SerchFormat是可選的,搜索的格式。
需要注意的是:每次使用Find方法后,參數(shù)LookIn、LookAt、SearchOrder 和MatchByte的設(shè)置將保存。如果下次調(diào)用Find方法時(shí)不指定這些參數(shù)的值,就使用保存的值。因此每次使用該方法時(shí)請明確設(shè)置這些參數(shù)。
2) FindNext方法繼續(xù)執(zhí)行用Find方法啟動的搜索。查找下一個(gè)匹配相同條件的單元格并返回代表單元格的Range對象
語法:expression.FindNext(After)
參數(shù)expression是必需的,返回一個(gè)Range對象。
參數(shù)After是可選的,指定一個(gè)單元格,查找將從該單元格之后開始。
2 利用Find方法在工作表中實(shí)現(xiàn)單值查找
為了實(shí)現(xiàn)在工作表中的單值查找,我們可以利用下面的代碼:
Sub MYNZI() '工作表唯一查詢
Dim FJX As Variant
Sheets("Sheet5").Select
Range("i2 : I3000").ClearContents
i = 2
Do While Cells(i, "h") <> ""
Cells(i, "h").Select
UU = Cells(i, "h")
Set FJX = Sheets("Sheet5").Columns("A").Find(UU, lookat:=xlWhole)
If Not FJX Is Nothing Then
Cells(i, "i") = Sheets("Sheet5").Cells(FJX.Row, 2).Value
End If
i = i + 1
Loop
MsgBox ("OK")
End Sub
代碼截圖:
代碼講解:上述代碼實(shí)現(xiàn)了在工作表A列中查找H列的唯一值的方案,首先我們清空了要回填的數(shù)據(jù)區(qū)域Range("i2 : I3000").ClearContents,然后利用:
Set FJX = Sheets("Sheet5").Columns("A").Find(UU, lookat:=xlWhole)
來實(shí)現(xiàn)我們的查找,lookat:=xlWhole 是完全匹配,當(dāng)然我們還可以利用其它參數(shù)來實(shí)現(xiàn)特定的匹配。
上面的這段代碼中我保留了工作表的名稱,這樣以后大家利用起來可以直接的拷貝代碼,進(jìn)行必要的修改即可。當(dāng)然,找到唯一的值后可以提取的數(shù)據(jù)可以根據(jù)實(shí)際情況需要做進(jìn)一步的改進(jìn)。
我們看看程序的運(yùn)行結(jié)果:
3 利用FindNext方法在工作表中實(shí)現(xiàn)多值查找
為了實(shí)現(xiàn)在工作表中的多值查找我們可以使用FindNext方法,這個(gè)方法的好處就是可以查到多個(gè)值。在查找的過程中我們要設(shè)定起始位置,下面的代碼是比較經(jīng)典的代碼,大家可以利用:
Sub MYNZJ() '工作表非唯一查詢
Dim bcontinue As Boolean
Dim mysearch As Range
Dim myfind As Range
Dim fristmyfind As String
Sheets("Sheet6").Select
Range("i2 : I3000").ClearContents
i = 2
Do While Cells(i, "h") <> ""
Cells(i, "h").Select
bcontinue = True
Set mysearch = Sheets("Sheet6").Range("A1 : A" & Sheets("Sheet6").Range("A1").End(xlDown).Row)
Set myfind = mysearch.Find(what:=Cells(i, "h"), lookat:=xlWhole)
If Not myfind Is Nothing Then fristmyfind = myfind.Address
Do Until myfind Is Nothing Or Not bcontinue
Cells(i, "i") = Cells(i, "i") & " " & Sheets("Sheet6").Cells(myfind.Row, 2)
Set myfind = mysearch.FindNext(myfind)
If myfind.Address = fristmyfind Then bcontinue = False
Loop
Set myfind = Nothing
i = i + 1
Loop
Set mysearch = Nothing
MsgBox ("OK!")
End Sub
代碼截圖:
代碼講解:
上述代碼實(shí)現(xiàn)了工作表A列中的多值查找,當(dāng)在A列中存在H列的值時(shí)返回?cái)?shù)值,注意這里的查找開始表示是fristmyfind = myfind.Address,一直循環(huán)到這個(gè)地址再次出現(xiàn)。
下面我們看看代碼的運(yùn)行結(jié)果:
利用Find和FindNext方法從而實(shí)現(xiàn)了工作表中的單一值查詢和多值的查詢。
本節(jié)知識點(diǎn)回向:如何實(shí)現(xiàn)工作表中的單一值查詢?如何實(shí)現(xiàn)工作表中的多值查詢?
本專題參考程序文件:004工作表.XLSM
我20多年的VBA實(shí)踐經(jīng)驗(yàn),全部濃縮在下面的各個(gè)教程中,教程學(xué)習(xí)順序: