




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VBA常用技巧
目錄
VBA常用技巧1
第1章Range(單元格)對(duì)象4
技巧1單元格的引用方法4
1-1使用Range屬性4
1-2使用Cells屬性5
1-3使用快捷記號(hào)5
1-4使用Offset屬性6
1-5使用Resize屬性7
1-6使用Union方法8
1-7使用UsedRange屬性8
1-8使用CurrentRegion屬性9
技巧2選定單元格區(qū)域的方法9
2-1使用Select方法9
2-2使用Activate方法10
2-3使用Goto方法11
技巧3獲得指定行、列中的最后一個(gè)非空單元格11
技巧4定位單元格14
技巧5查找單元格15
5-1使用Find方法15
5-2使用Like運(yùn)算符19
技巧6替換單元格內(nèi)字符串20
技巧7復(fù)制單元格區(qū)域21
技巧8僅復(fù)制數(shù)值到另一區(qū)域24
8-1使用選擇性粘貼24
8-2直接賦值的方法25
技巧9單元格自動(dòng)進(jìn)入編輯狀態(tài)26
技巧10禁用單元格拖放功能26
技巧11單元格格式操作27
11-1單元格字體格式設(shè)置27
11-2設(shè)置單元格內(nèi)部格式29
11-3為單元格區(qū)域添加邊框30
11-4靈活設(shè)置單元格的行高列寬32
技巧12單元格中的數(shù)據(jù)有效性33
12-1在單元格中建立數(shù)據(jù)有效性33
12-2判斷單元格是否存在數(shù)據(jù)有效性34
12-3動(dòng)態(tài)的數(shù)據(jù)有效性35
12-4自動(dòng)展開(kāi)數(shù)據(jù)有效性下拉列表37
技巧13單元格中的公式38
1
13-1在單元格中寫(xiě)入公式38
13-2檢查單元格是否含有公式39
13-3判斷單元格公式是否存在錯(cuò)誤40
13-4取得單元格中公式的引用單元格41
13-5將單元格中的公式轉(zhuǎn)換為數(shù)值42
技巧14單元格中的批注43
14-1判斷單元格是否存在批注43
14-2為單元格添加批注44
14-3刪除單元格中的批注45
技巧15合并單元格操作46
15-1判斷單元格區(qū)域是否存在合并單元格46
15-2合并單元格時(shí)連接每個(gè)單元格的文本47
15-3合并內(nèi)容相同的連續(xù)單元格48
15-4取消合并單元格時(shí)在每個(gè)單元格中保留內(nèi)容50
技巧16高亮顯示單元格區(qū)域51
技巧17雙擊被保護(hù)單元格時(shí)不顯示提示消息框52
技巧18重新計(jì)算工作表指定區(qū)域54
技巧19錄入數(shù)據(jù)后單元格自動(dòng)保護(hù)54
技巧20工作表事件Target參數(shù)的使用方法56
20-1使用單元格的Address屬性56
20-2使用Column屬性和Row屬性57
20-3使用Intersect方法57
第2章Worksheet(工作表)對(duì)象59
技巧21引用工作表的方式59
21-1使用工作表的名稱(chēng)59
21-2使用工作表的索引號(hào)59
21-3使用工作表的代碼名稱(chēng)60
21-4使用ActiveSheet屬性引用活動(dòng)工作表60
技巧22選擇工作表的方法61
技巧23遍歷工作表的方法62
23-1使用For...Next語(yǔ)句62
23-2使用ForEach…Next語(yǔ)句64
技巧24在工作表中上下翻頁(yè)65
技巧25工作表的添加與刪除66
技巧26禁止刪除指定工作表70
技巧27自動(dòng)建立工作表目錄72
技巧28工作表的深度隱藏74
技巧29防止更改工作表的名稱(chēng)76
技巧30工作表中一次插入多行77
技巧31刪除工作表中的空行78
技巧32刪除工作表的重復(fù)行80
技巧33定位刪除特定內(nèi)容所在的行82
技巧34判斷是否選中整行83
技巧35限制工作表的滾動(dòng)區(qū)域84
2
技巧36復(fù)制自動(dòng)篩選后的數(shù)據(jù)區(qū)域85
技巧37使用高級(jí)篩選獲得不重復(fù)記錄87
技巧38工作表的保護(hù)與解除保護(hù)88
技巧39奇偶頁(yè)打印91
第3章Wordbook(工作簿)對(duì)象93
技巧40工作簿的引用方法93
40-1使用工作簿的名稱(chēng)93
40-2使用工作簿的索引號(hào)93
40-3使用ThisWorkbook94
40-4使用ActiveWorkbook95
技巧41新建工作簿文件95
技巧42打開(kāi)指定的工作簿97
技巧43判斷指定工作簿是否打開(kāi)100
43-1遍歷Workbooks集合方法100
43-2錯(cuò)誤處理方法101
技巧44禁用宏則關(guān)閉工作簿101
技巧45關(guān)閉工作簿不顯示保存對(duì)話(huà)框105
45-1使用Close方法關(guān)閉工作簿105
45-2單擊工作簿關(guān)閉按鈕關(guān)閉工作簿107
技巧46禁用工作簿的關(guān)閉按鈕107
技巧47保存工作簿的方法109
47-1使用Save方法109
47-2直接保存為另一文件名109
47-3保存工作簿副本109
技巧48保存指定工作表為工作簿文件110
技巧49打印預(yù)覽時(shí)不觸發(fā)事件111
技巧50設(shè)置工作簿文檔屬性信息114
技巧51不打開(kāi)工作簿取得其他工作簿數(shù)據(jù)115
51-1使用公式115
51-2使用GetObject函數(shù)115
51-3隱藏Application對(duì)象116
51-4使用ExecuteExcel4Maero方法117
51-5使用SQL連接119
技巧52返回窗口的可視區(qū)域地址120
3
第1章Range(單元格)對(duì)象
Range對(duì)象是Excel應(yīng)用程序中最常用的對(duì)象,一個(gè)Range對(duì)象代表一個(gè)單元格、一
行、一列、包含一個(gè)或者更多單元格區(qū)域(可以是連續(xù)的單元格,也可以是不連續(xù)的單元格)
中選定的單元格,甚至是多個(gè)工作表上的一組單元格,在操作Excel內(nèi)的任何區(qū)域之前都
需要將其表示為一個(gè)Range對(duì)象,然后使用該Range對(duì)象的方法和屬性。
技巧1單元格的引用方法
在VBA中經(jīng)常需要引用單元格或單元格區(qū)域區(qū)域,主要有以下幾種方法。
1-1使用Range屬性
VBA中可以使用Range屬性返回單元格或單元格區(qū)域,如下面的代碼所示。
#001SubRngSelect()
#002Sheetl.Range("A3:F6,Bl:C5").Select
#003EndSub
代碼解析:
RngSelect過(guò)程使用Select方法選中A3:F6,B1:C5單元格區(qū)域。
Range屬性返回一個(gè)Range對(duì)象,該對(duì)象代表一個(gè)單元格或單元格區(qū)域,語(yǔ)法如下:
Range(Celli,Cell2)
參數(shù)Celli是必需的,必須為A1樣式引用的宏語(yǔ)言,可包括區(qū)域操作符(冒號(hào))、相
交區(qū)域操作符(空格)或合并區(qū)域操作符(逗號(hào))。也可包括美元符號(hào)(即絕對(duì)地址,如
“$A$1嘰可在區(qū)域中任一部分使用局部定義名稱(chēng),如Range("B2:LastCell"),其中LastCell
為已定義的單元格區(qū)域名稱(chēng)。
參數(shù)Cell2是可選的,區(qū)域左上角和右下角的單元格。
運(yùn)行SubRngSelect過(guò)程,選中A3:F6,B1:C5單元格區(qū)域,如圖1-1所示。
4
注意如果沒(méi)有使用對(duì)象識(shí)別符,Range屬性返回活動(dòng)表的一個(gè)區(qū)域,如果活動(dòng)表不是
工作表,則該屬性無(wú)效。
1-2使用Cells屬性
使用Cells屬性返回一個(gè)Range對(duì)象,如下面的代碼所示。
#001SubCell()
#002DimicellAsInteger
#003Foricell=1To100
#004Sheet2.Cells(icell,1).Value=icell
#005Next
#006EndSub
代碼解析:
Cell過(guò)程使用For...Next語(yǔ)句為工作表中的A1:A100單元格區(qū)域填入序號(hào)。
Cells屬性指定單元格區(qū)域中的單元格,語(yǔ)法如下:
Cells(Rowindex,ColumnIndex)
參數(shù)Rowindex是可選的,表示引用區(qū)域中的行序號(hào)。
參數(shù)Columnindex是可選的,表示引用區(qū)域中的列序號(hào)。
如果缺省參數(shù),Cells屬性返回引用對(duì)象的所有單元格。
Cells屬性的參數(shù)可以使用變量,因此經(jīng)常應(yīng)用于在單元格區(qū)域中循環(huán)。
1-3使用快捷記號(hào)
在VBA中可以將A1引用樣式或命名區(qū)域名稱(chēng)使用方括號(hào)括起來(lái),作為Range屬性的
快捷方式,這樣就不必鍵入單詞“Range”或使用引號(hào),如下面的代碼所示。
5
#001SubFastmark()
#002[Al:A5]=2
#003[Fast]=4
#004EndSub
代碼解析:
Fastmark過(guò)程使用快捷記號(hào)為單元格區(qū)域賦值。
第2行代碼使用快捷記號(hào)將活動(dòng)工作表中的A1:A5單元格賦值為2o
第3行代碼將工作簿中已命名為“Fast”的單元格區(qū)域賦值為4。
注意使用快捷記號(hào)引用單元格區(qū)域時(shí)只能使用固定字符串而不能使用變量。
1-4使用Offset屬性
可以使用Range對(duì)象的Offset屬性返回一個(gè)基于引用的Range對(duì)象的單元格區(qū)域,如
下面的代碼所示。
#001SubOffset()
#002Sheet3.Range("Al:C3").Offset(3,3).Select
#003EndSub
代碼解析:
Offset過(guò)程使用Range對(duì)象的Offset屬性選中A1:A3單元格偏移三行三列后的區(qū)域。
應(yīng)用于Range對(duì)象的Offset屬性的語(yǔ)法如下:
expression.Offset(RowOffset,Columnoffset)
參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。
參數(shù)RowOffset是可選的,區(qū)域偏移的行數(shù)(正值、負(fù)值或0(零))。正值表示向下
偏移,負(fù)值表示向上偏移,默認(rèn)值為0?
參數(shù)Columnoffset是可選的,區(qū)域偏移的列數(shù)(正值、負(fù)值或0(零))。正值表示向
右偏移,負(fù)值表示向左偏移,默認(rèn)值為0o
運(yùn)行Offset過(guò)程,選中A1:A3單元格偏稱(chēng)三行三列后的區(qū)域,如圖1-2所示。
6
1-5使用Resize屬性
使用Range對(duì)象的Resize屬性調(diào)整指定區(qū)域的大小,并返回調(diào)整大小后的單元格區(qū)域,
如下面的代碼所示。
#001SubResize()
#002Sheet4.Range("Al").Resize(3,3).Select
#003EndSub
代碼解析:
Resize過(guò)程使用Range對(duì)象的Resize屬性選中A1單元格擴(kuò)展為三行三列后的區(qū)域。
Resize屬性的語(yǔ)法如下:
expression.Resize(RowSize,ColumnSize)
參數(shù)expression是必需的,返回要調(diào)整大小的Range對(duì)象
參數(shù)RowSize是可選的,新區(qū)域中的行數(shù)。如果省略該參數(shù),則該區(qū)域中的行數(shù)保持
不變。
參數(shù)ColumnSize是可選的,新區(qū)域中的列數(shù)。如果省略該參數(shù)。則該區(qū)域中的列數(shù)保
持不變。
運(yùn)行Resize過(guò)程,選中A1單元格擴(kuò)展為三行三列后的區(qū)域,如圖1-3所示。
7
1-6使用Union方法
使用Union方法可以將多個(gè)非連續(xù)區(qū)域連接起來(lái)成為一個(gè)區(qū)域,從而可以實(shí)現(xiàn)對(duì)多個(gè)
非連續(xù)區(qū)域一起進(jìn)行操作,如下面的代碼所示。
#001SubUnSelect()
#002Union(Sheet5.Range(nAl:D4n),Sheet5.Range("E5:H8n)).Select
#003EndSub
代碼解析:
UnSelect過(guò)程選擇單元格A1:D4和E5:H8所組成的區(qū)域。Union方法返回兩個(gè)或多個(gè)
區(qū)域的合并區(qū)域,語(yǔ)法如下:
expression.Union(Argl,Arg2,...)
其中參數(shù)expression是可選的,返回一個(gè)Application對(duì)象。
參數(shù)Arg1,Arg2,…是必需的,至少指定兩個(gè)Range對(duì)象。
運(yùn)行UnSelect過(guò)程,選中單元格A1:D4和E5:H8所組成的區(qū)域,如圖1-4所示。
圖1-4使用Union方法將多個(gè)非連續(xù)區(qū)域連接成一個(gè)區(qū)域
1-7使用UsedRange屬性
使用UsedRange屬性返回指定工作表上已使用單元格組成的區(qū)域,如下面的代碼所示。
#001SubUseSelect()
#002Sheet6.UsedRange.Select
#003EndSu
代碼解析:
UseSelect過(guò)程使用UsedRange屬性選擇工作表上已使用單元格組成的區(qū)域,包括空
單元格。如工作表中已使用A1單元格和D8單元格,運(yùn)行UseSelect過(guò)程將選擇A1到D8
單元格區(qū)域,如圖1-5所示。
8
圖1-5使用UsedRange屬性選擇已使用區(qū)域
1-8使用CurrentRegion屬性
使用CurrentRegion屬性返回指定工作表上當(dāng)前的區(qū)域,如下面的代碼所示。
#001SubCurrentSelect()
#002Sheet7.Range("A5").CurrentRegion.Select
#003EndSub
代碼解析:
CurrentSelect過(guò)程使用CurrentRegion屬性選擇工作表上A5單元格當(dāng)前的區(qū)域,當(dāng)
前區(qū)域是一個(gè)邊緣是任意空行和空列組合成的范圍。
運(yùn)行CurrentSelect過(guò)程將選擇A5到B6單元格區(qū)域,如圖1-6所示。
圖1-6CurrentRegion屬性選擇當(dāng)前的區(qū)域
技巧2選定單元格區(qū)域的方法
2-1使用Select方法
在VBA中一般使用Select方法選定單元格或單元格區(qū)域,如下面的代碼所示。
9
#001SubRngSelect()
#002Sheet3.Activate
#003Sheet3.Range("Al:BIO").Select
#004EndSub
代碼解析:
RngSelect過(guò)程使用Select方法選定Sheets中的A1:B10單元格區(qū)域,Select方法
應(yīng)用于Range對(duì)象時(shí)語(yǔ)法如下:
expression.Select(Replace)
參數(shù)expression是必需的,一個(gè)有效的對(duì)象。
參數(shù)Replace是可選的,要替換的對(duì)象。
使用Select方法選定單元格時(shí),單元格所在的工作表必需為活動(dòng)工作表,所以在第2
行代碼中先使用Activate方法使Sheet3成為活動(dòng)工作表,否則Select方法有可能出錯(cuò),顯
示如圖2-1所示的錯(cuò)誤提示。
圖2-1Select方法無(wú)效提示
2-2使用Activate方法
還可以使用Activate方法選定單元格或單元格區(qū)域,如下面的代碼所示。
#001SubRngActivate()
#002Sheet3.Activate
#003Sheet3.Range("Al:B10").Activate
#004EndSub
代碼解析:
RngActivate過(guò)程使用Activate方法選定Sheet3中的A1:B10單元格區(qū)域,Activate
方法應(yīng)用于Range對(duì)象時(shí)語(yǔ)法如下:
expression.Activate
使用Activate方法選定單元格時(shí),單元格所在的工作表也必需為活動(dòng)工作表,否則
Activate方法有可能出錯(cuò),顯示如圖2-2所示的錯(cuò)誤提示。
10
licrosoftVisualBasic
運(yùn)行時(shí)錯(cuò)誤'1004’:
類(lèi)Range的Activate方法無(wú)效
鏤的|結(jié)束②|I調(diào)匐EHI幫助00|
圖2-2Activate方法無(wú)效提示
2-3使用Goto方法
使用Got。方法無(wú)需使單元格所在的工作表成為活動(dòng)工作表,如下面的代碼所示。
#001SubRngGoto()
#002Application.GotoReference:=Sheet3.Range("Al:B10"),scroll:=True
#003EndSub
代碼解析:
RngGoto過(guò)程使用Goto方法選定Sheets中的A1:B10單元格區(qū)域,并滾動(dòng)工作表
以顯示該單元格。
Goto方法選定任意工作簿中的任意區(qū)域或任意VisualBasic過(guò)程,并且如果該工作簿
未處于活動(dòng)狀態(tài),就激活該工作簿,語(yǔ)法如下:
expression.Goto(Reference,Scroll)
參數(shù)expression是必需的,返回一個(gè)Application對(duì)象。
參數(shù)Reference是可選的,Variant類(lèi)型,指定目標(biāo)。可以是Range對(duì)象、包含R1C1-
樣式記號(hào)的單元格引用的字符串或包含VisualBasic過(guò)程名的字符串。如果省略本參數(shù),
目標(biāo)將是最近一次用Goto方法選定的區(qū)域。
參數(shù)Scroll是可選的,Variant類(lèi)型,如果該值為T(mén)rue,則滾動(dòng)窗口直至目標(biāo)區(qū)域的左
上角單元格出現(xiàn)在窗口的左上角。如果該值為False,則不滾動(dòng)窗口。默認(rèn)值為False。
技巧3獲得指定行、列中的最后一個(gè)非空單元格
使用VBA對(duì)工作表進(jìn)行操作時(shí),經(jīng)常需要定位到指定行或列中最后一個(gè)非空單元格,
此時(shí)可以使用Range對(duì)象的End屬性,在取得單元格對(duì)象后便能獲得該單元格的相關(guān)屬性,
11
如單元格地址、行列號(hào)、數(shù)值等,如下面的代碼所示。
#001SubLastRow()
#002DimrngAsRange
#003Setrng=Sheet1.Range("A65536").End(xlUp)
#004MsgBox"A列中最后一個(gè)非空單元格是"&rng.Address(0,0)_
#005&",行號(hào)"&rng.Row&",數(shù)值"&rng.Value
#006Setrng=Nothing
#007EndSub
代碼解析:
LastRow過(guò)程使用消息框顯示工作表中A列最后非空單元格的地址、行號(hào)和數(shù)值。
End屬性返回一個(gè)Range對(duì)象,該對(duì)象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于
按鍵<End+向上鍵〉、<End+向下鍵〉、<End+向左鍵>或<£血+向右鍵〉,語(yǔ)法如下:
expression.End(Direction)
參數(shù)expression是必需的,一個(gè)有效的對(duì)象。
參數(shù)Direction是可選的,所要移動(dòng)的方向,可以為表格3-1所示的XIDirection常量
之一。
常量值描述
xlDown-4121向下
xlToRight-4161向右
xlToLeft-4159向左
xlUp-4162向上
表格3-1XIDirection常量
Range對(duì)象的End屬性返回的是一個(gè)Range對(duì)象,因此可以直接使用該對(duì)象的屬性和
方法。
運(yùn)行LastRow過(guò)程結(jié)果如圖3-1所示。
12
通過(guò)修改相應(yīng)的參數(shù),能夠獲得指定行中最后一個(gè)非空單元格,如下面的代碼所示。
#001SubLastColumn()
#002DimrngAsRange
#003Setrng=Sheetl.Range(nIVln).End(xlToLeft)
#004MsgBox”第一行中最后一個(gè)非空單元格是,,&rng.Address(0,0)_
#005&",歹ll號(hào)"&rng.Column&",數(shù)值"&rng.Value
#006Setrng=Nothing
#007EndSub
代碼解析:
LastColumn過(guò)程使用消息框顯示工作表中第一行最后一個(gè)非空單元格的地址、列號(hào)和
數(shù)值,如圖3-2所示。
13
技巧4定位單元格
在Excel中使用定位對(duì)話(huà)框可以選中工作表中特定的單元格區(qū)域,而在VBA中則使用
SpecialCells方法,如下面的代碼所示。
#001SubSpecialAddress()
#002DimrngAsRange
#003Setrng=Sheet1.UsedRange.SpecialCells(xlCellTypeFormulas)
#004rng.Select
#005MsgBox”工作表中有公式的單元格為:”&rng.Address
#006Setrng=Nothing
#007EndSub
代碼解析:
SpecialAddress過(guò)程使用SpecialCells方法選中工作表中有公式的單元格,并用消息
框顯示其地址。
SpecialCells方法返回一個(gè)Range對(duì)象,該對(duì)象代表與指定類(lèi)型及值相匹配的所有單
元格,語(yǔ)法如下:
expression.SpecialCells(Type,Value)
參數(shù)expression是必需的,返回一個(gè)有效的對(duì)象。
參數(shù)Type是必需的,要包含的單元格,可為表格4-1所列的XICellType常量之一。
常量值描述
xlCellTypeAIIFormatConditions-4172任意格式單元格
xlCellTypeAIIValidation-4174含有驗(yàn)證條件的單元格
xlCellTypeBlanks4空單元格
xlCellTypeComments-4144含有注釋的單元格
xlCellTypeConstants2含有常量的單元格
xlCellTypeFormulas-4123含有公式的單元格
xlCellTypeLastCell11使用區(qū)域中最后的單元格
xlCellTypeSameFormatConditions-4173含有相同格式的單元格
xlCellTypeSameValidation-4175含有相同驗(yàn)證條件的單元格
xlCellTypeVisible12所有可見(jiàn)單元格
表格4-1XICellType常量
第3行代碼將SpecialCells方法的Type參數(shù)設(shè)置為xlCellTypeFormulas,返回的是含
有公式的單元格,通過(guò)修改相應(yīng)的參數(shù)可以返回不同的單元格。
14
參數(shù)Value是可選的,如果Type參數(shù)為xlCellTypeConstants或xlCellTypeFormulas,
此參數(shù)可用于確定結(jié)果中應(yīng)包含哪幾類(lèi)單元格。將某幾個(gè)值相加可使此方法返回多種類(lèi)型的
單元格。如果省略將選定所有常量或公式,可為表格4-2所列的XISpecialCellsValue常量
之一。
常量值描述
xIErrors16錯(cuò)誤
xILogical4邏輯值
xINumbers1數(shù)字
xlTextValues2文本
表格4-2XISpecialCellsValue常量
第5行代碼使用消息框顯示工作表中含有公式單元格的地址。SpecialCells方法返回的
是Range對(duì)象,因此可以直接使用該對(duì)象的屬性和方法。
運(yùn)行SpecialAddress過(guò)程結(jié)果如圖4-1所示。
技巧5查找單元格
5-1使用Find方法
在Excel中使用查找對(duì)話(huà)框可以查找工作表中特定內(nèi)容的單元格,而在VBA中則使用
Find方法,如下面的代碼所示。
#001SubRngFindO
#002DimStrFindAsString
15
#003DimRngAsRange
#004StrFind=工nputBox(“請(qǐng)輸入要查找的值:“)
#005IfTrim(StrFind)<>"”Then
#006WithSheetl.Range("A:A")
#007SetRng=.Find(What:=StrFind,_
#008After:=.Cells(.Cells.Count),_
#009Lookin:=xlValues,_
#010LookAt:=xlWhole,_
#011SearchOrder:=xlByRows,_
#012SearchDirection:=xlNextA_
#013MatchCase:=False)
#014IfNotRngIsNothingThen
#015Application.GotoRng,True
#016Else
#017MsgBox”沒(méi)有找到該單元格!”
#018EndIf
#019EndWith
#020EndIf
#021EndSub
代碼解析:
RngFind過(guò)程使用Find方法在工作表Sheetl的A列中查找InputBox函數(shù)對(duì)話(huà)框中所
輸入的值,并查找該值所在的第一個(gè)單元格。
第6到第13行代碼在工作表Sheetl的A列中查找InputBox函數(shù)對(duì)話(huà)框中所輸入的值。
應(yīng)用于Range對(duì)象的Find方法在區(qū)域中查找特定信息,并返回Range對(duì)象,該對(duì)象代表
用于查找信息的第一個(gè)單元格。如果未發(fā)現(xiàn)匹配單元格,就返回Nothing,語(yǔ)法如下:
expression.Find(What,After,Lookin,LookAt,SearchOrder,SearchDirection,
MatchCase,MatchByte,SerchFormat)
參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。
參數(shù)What是必需的,要搜索的數(shù)據(jù),可為字符串或任意數(shù)據(jù)類(lèi)型。
參數(shù)After是可選的,表示搜索過(guò)程將從其之后開(kāi)始進(jìn)行的單元格,必須是區(qū)域中的單
個(gè)單元格。查找時(shí)是從該單元格之后開(kāi)始的,直到本方法繞回到指定的單元格時(shí),才對(duì)其進(jìn)
行搜索。如果未指定本參數(shù),搜索將從區(qū)域的左上角單元格之后開(kāi)始。
在本例中將After參數(shù)設(shè)置為A列的最后一個(gè)單元格,所以查找時(shí)從A1單元格開(kāi)始搜
16
索。
參數(shù)Lookln是可選的,信息類(lèi)型。
參數(shù)LookAt是可選的,可為XILookAt常量的xlWhole或xIPart之一。
參數(shù)SearchOrder是可選的,可為XISearchOrder常量的xlByRows或xlByColumns
之一。
參數(shù)SearchDirection是可選的,搜索的方向,可為XISearchDirection常量的xINext
或xIPrevious之一。
參數(shù)MatchCase是可選的,若為T(mén)rue,則進(jìn)行區(qū)分大小寫(xiě)的查找。默認(rèn)值為False。
參數(shù)MatchByte是可選的,僅在選擇或安裝了雙字節(jié)語(yǔ)言支持時(shí)使用。若為T(mén)rue,則
雙字節(jié)字符僅匹配雙字節(jié)字符。若為False,則雙字節(jié)字符可匹配其等價(jià)的單字節(jié)字符。
參數(shù)SerchFormat是可選的,搜索的格式。
每次使用Find方法后,參數(shù)Lookln、LookAt>SearchOrder和MatchByte的設(shè)置將
保存。如果下次調(diào)用Find方法時(shí)不指定這些參數(shù)的值,就使用保存的值。因此每次使用該
方法時(shí)請(qǐng)明確設(shè)置這些參數(shù)。
如果工作表的A列中存在重復(fù)的數(shù)值,那么需要使用FindNext方法或FindPrevious
方法進(jìn)行重復(fù)搜索,如下面的代碼所示。
#001SubRngFindNext()
#002DimStrFindAsString
#003DimRngAsRange
#004DimFindAddressAsString
#005StrFind=工nputBox("請(qǐng)輸入要查找的值:”)
#006IfTrim(StrFind)<>""Then
#007WithSheetl.Range("A:A")
#008SetRng=.Find(What:=StrFind,_
#009After:=.Cells(.Cells.Count),_
#010Lookln:=xlValues,_
#011LookAt:=xlWhole,_
#012SearchOrder:=xlByRows,_
#013SearchDirection:=xlNextf_
#014MatchCase:=False)
#015IfNotRngIsNothingThen
#016FindAddress=Rng.Address
#017Do
17
#018Rng.Interior.ColorIndex=6
#019SetRng=.FindNext(Rng)
#020LoopWhileNotRngIsNothingAndRng.Address<>
FindAddress
#021EndIf
#022EndWith
#023EndIf
#024EndSub
代碼解析:
RngFindNext過(guò)程在工作表Sheetl的A列中查找InputBox函數(shù)對(duì)話(huà)框中所輸入的值,
并將查到單元格底色設(shè)置成黃色。
第8行到第17行代碼使用Find方法在工作表Sheetl的A列中查找。
第16行代碼將查找到的第一個(gè)單元格地址賦給字符串變量FindAddresSo
第18行代碼將查找到的單元格底色設(shè)置成黃色。
第19行代碼使用FindNext方法進(jìn)行重復(fù)搜索。FindNext方法繼續(xù)執(zhí)行用Find方法啟
動(dòng)的搜索。查找下一個(gè)匹配相同條件的單元格并返回代表單元格的Range對(duì)象,語(yǔ)法如下:
expression.FindNext(After)
參數(shù)expression是必需的,返回一個(gè)Range對(duì)象。
參數(shù)After是可選的,指定一個(gè)單元格,查找將從該單元格之后開(kāi)始。
第20行代碼如果查找到的單元格地址等于字符串變量FindAddress所記錄的地址,說(shuō)
明A列已搜索完畢,結(jié)束查找過(guò)程。
運(yùn)行RngFindNext過(guò)程,在InputBox函數(shù)輸入框中輸入“196.01”后結(jié)果如圖5-1
所示。
-3I676.56.
-
4810.59
5917.48
6102.06
7906.84
8196.01
9109.39
631.28
10
11827.74
12925.82
1346.79
14
15737.32
16416.29
17
557.14
439.34
196.01
圖5-1使用FindNext方法重復(fù)搜索
還可以使用FindPrevious方法進(jìn)行重復(fù)搜索,F(xiàn)indPrevious方法的語(yǔ)法如下:
expression.FindPrevious(After)
18
FindPrevious方法和FindNext方法唯一的區(qū)別是FindPrevious方法查找匹配相同條件
的前一個(gè)單元格而FindNext方法是查找匹配相同條件的下一個(gè)單元格。
5-2使用Like運(yùn)算符
使用Like運(yùn)算符可以進(jìn)行更為復(fù)雜的模式匹配查找,如下面的代碼所示。
#001SubRngLike()
#002DimrngAsRange
#003DimaAsInteger
#004a=1
#005WithSheet2
#006.Range("A:A").ClearContents
#007ForEachrngIn.Range("Bl:E1000")
#008Ifrng.TextLike"*a***Then
#009.Range("A"&a)=rng.Text
#010a=a+1
#011EndIf
#012Next
#013EndWith
#014EndSub
代碼解析:
RngLike過(guò)程使用ForEach...Next語(yǔ)句和Like運(yùn)算符在單元格區(qū)域B1:E10000中搜
索含有“a”字符的單元格,找到匹配單元格以后將單元格的值寫(xiě)入到A列中。
第6行代碼使用ClearContents方法清除A列區(qū)域的數(shù)據(jù)。
第7行代碼使用ForEach...Next語(yǔ)句在單元格區(qū)域B1:E10000中循環(huán)。
第8行代碼使用Like運(yùn)算符在單元格區(qū)域B1:E10000中搜索含有“a”字符的單元格。
Like運(yùn)算符用來(lái)比較兩個(gè)字符串,語(yǔ)法如下:
result=stringLikepattern
參數(shù)string是必需的,字符串表達(dá)式。
參數(shù)pattern是必需的,字符串表達(dá)式。
如果string與pattern匹配,貝ijresult為T(mén)rue;如果不匹配,貝ijresult為Falseo但是
如果string或pattern中有一個(gè)為Null,則result為Null。
參數(shù)pattern可以使用通配符、字符串列表或字符區(qū)間的任何組合來(lái)匹配字符串。表格
19
5-1列出pattern中允許的字符以及它們與什么進(jìn)行匹配。
pattern中的字符符合string中的字符
?任何單一字符
*零個(gè)或多個(gè)字符
#任何一個(gè)數(shù)字(0-9)
[charlist]charlist中的任何單一字符
[!charlist]不在charlist中的任何單一字符
表格5-1pattern中的匹配字符串
第9行代碼將找到的匹配單元格的值寫(xiě)入到A列中。
運(yùn)行RngLike過(guò)程結(jié)果如圖5-2所示。
1
一
213
一4
一5
一6
一7
一8
一9
一
1PJ
nJ
衛(wèi)
13J
141
151
”
圖5-2使用Like運(yùn)算符進(jìn)行模式匹配查找
技巧6替換單元格內(nèi)字符串
如果需要替換單元格內(nèi)指定的字符串,那么使用Range對(duì)象的Replace方法,如下面
的代碼所示。
#001SubRngReplace()
#002Range(nAl:A5").Replace“通州“,“南通“
#003EndSub
代碼解析:
RngReplace過(guò)程將工作表A1:A5單元格中的“通州”字符串替換成“南通”字符串。
20
應(yīng)用于Range對(duì)象的Replace方法替換指定區(qū)域內(nèi)單元格中的字符,語(yǔ)法如下:
expression.Replace(What,Replacement,LookAtfSearchOrderAMatchCase,
MatchByte,SearchFormat,ReplaceFormat)
其中參數(shù)expression是必需的,返回一個(gè)Range對(duì)象。
參數(shù)What是必需的,要搜索的字符串。
參數(shù)Replacement是必需的,替換的字符串。
運(yùn)行RngReplace過(guò)程前工作表如圖6-1所示,運(yùn)行RngReplace過(guò)程后結(jié)果如圖6-2
所示。
1通州市建設(shè)局
2通州市房產(chǎn)局
3通州i市水利局
4通州市自來(lái)水公司
5通州市安裝維修公司
6
圖6-1替換前單元格
1南通市建設(shè)局
2南通市房產(chǎn)局
3南通市水利局
4南通市自來(lái)水公司
5南通市安裝維修公司
6
圖6-2替換后單元格
技巧7復(fù)制單元格區(qū)域
在實(shí)際操作中,經(jīng)常需要復(fù)制指定的單元格區(qū)域到另外一個(gè)單元格區(qū)域。要復(fù)制指定單
元格區(qū)域到其他位置,使用Range對(duì)象的Copy方法,如下面的代碼所示。
#001SubRangeCopy()
#002Application.DisplayAlerts=False
#003Sheet1.Range("Al").CurrentRegion.CopySheet2.Range("Al")
21
#004Application.DisplayAlerts=True
#005EndSub
代碼解析:
RangeCopy過(guò)程將如圖7-1所示的Sheetl工作表中A1單元格的當(dāng)前區(qū)域復(fù)制到
Sheet2工作表中以A1單元格為左上角單元格的區(qū)域,如圖7-2所示。
cABCDEFG
后編號(hào)
1技能工資崗位工資工齡工資浮動(dòng)工資
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年刮墨刀項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2025年度教育科技股權(quán)分配及資源共享協(xié)議模板
- 2025年度事業(yè)單位聘用合同書(shū)模板(保密協(xié)議)正式版
- 2025年度保密性產(chǎn)品研發(fā)與生產(chǎn)合作協(xié)議
- 2025年河南中醫(yī)藥大學(xué)單招職業(yè)技能測(cè)試題庫(kù)及答案一套
- 2025年農(nóng)村集體土地租賃與使用權(quán)轉(zhuǎn)讓協(xié)議
- 2025年度宅基地使用權(quán)流轉(zhuǎn)備案與監(jiān)管服務(wù)合同
- 二零二五年度電影演員跨界合作合同范本
- 咖啡廳垃圾運(yùn)輸合作協(xié)議
- 2025年度新能源產(chǎn)業(yè)研發(fā)人工費(fèi)合作協(xié)議
- 教師課堂教學(xué)語(yǔ)言技能范例課件
- 《體育與健康說(shuō)課》課件
- 人教版化學(xué)九年級(jí)下冊(cè)同步練習(xí):第九單元 溶液
- 華南師范大學(xué)附屬小學(xué)招聘教師筆試真題2022
- 山東女子學(xué)院《C語(yǔ)言程序設(shè)計(jì)》2022-2023學(xué)年期末試卷
- 2020年中國(guó)人身保險(xiǎn)產(chǎn)品研究報(bào)告
- 常見(jiàn)織帶花鏈的排法和穿棕方法
- 《化工工程制圖》完整教案
- 心肌梗死后心衰病例分享
- 洪恩識(shí)字識(shí)字卡(001-100)可直接打印剪裁
- 《單片機(jī)技術(shù)及應(yīng)用》教學(xué)大綱
評(píng)論
0/150
提交評(píng)論