




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VBA常用技巧代碼解析 VBA常用技巧目錄VBA常用技巧1第1章Range(單元格)對(duì)象3技巧1單元格的引用方法31-1使用Range屬性31-2使用Cells屬性41-3使用快捷記號(hào)41-4使用Offset屬性51-5使用Resize屬性61-6使用Union方法71-7使用UsedRange屬性71-8使用CurrentRegion屬性8技巧2選定單元格區(qū)域的方法82-1使用Select方法82-2使用Activate方法92-3使用Goto方法10技巧3獲得指定行、列中的最后一個(gè)非空單元格10技巧4定位單元格13技巧5查找單元格145-1使用Find方法145-2使用Like運(yùn)算符18技
2、巧6替換單元格內(nèi)字符串19技巧7復(fù)制單元格區(qū)域20技巧8僅復(fù)制數(shù)值到另一區(qū)域238-1使用選擇性粘貼238-2直接賦值的方法24技巧9單元格自動(dòng)進(jìn)入編輯狀態(tài)25技巧10禁用單元格拖放功能25技巧11單元格格式操作2611-1單元格字體格式設(shè)置2611-2設(shè)置單元格內(nèi)部格式2811-3為單元格區(qū)域添加邊框2911-4靈活設(shè)置單元格的行高列寬31技巧12單元格中的數(shù)據(jù)有效性3212-1在單元格中建立數(shù)據(jù)有效性3212-2判斷單元格是否存在數(shù)據(jù)有效性3412-3動(dòng)態(tài)的數(shù)據(jù)有效性3412-4自動(dòng)展開(kāi)數(shù)據(jù)有效性下拉列表36技巧13單元格中的公式3713-1在單元格中寫入公式3713-2檢查單元格是否含有
3、公式3813-3判斷單元格公式是否存在錯(cuò)誤3913-4取得單元格中公式的引用單元格4013-5將單元格中的公式轉(zhuǎn)換為數(shù)值41技巧14單元格中的批注4214-1判斷單元格是否存在批注4214-2為單元格添加批注4314-3刪除單元格中的批注44技巧15合并單元格操作4515-1判斷單元格區(qū)域是否存在合并單元格4515-2合并單元格時(shí)連接每個(gè)單元格的文本4615-3合并內(nèi)容相同的連續(xù)單元格4715-4取消合并單元格時(shí)在每個(gè)單元格中保留內(nèi)容49技巧16高亮顯示單元格區(qū)域50技巧17雙擊被保護(hù)單元格時(shí)不顯示提示消息框51技巧18重新計(jì)算工作表指定區(qū)域53技巧19錄入數(shù)據(jù)后單元格自動(dòng)保護(hù)53技巧20工作
4、表事件Target參數(shù)的使用方法5520-1使用單元格的Address 屬性5520-2使用Column屬性和Row屬性5620-3使用Intersect方法56第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ū)域,主要有以下幾
5、種方法。1-1 使用Range屬性VBA中可以使用Range屬性返回單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngSelect() #002 Sheet1.Range("A3:F6, B1:C5").Select#003 End Sub代碼解析:RngSelect過(guò)程使用Select方法選中A3:F6,B1:C5單元格區(qū)域。Range屬性返回一個(gè)Range對(duì)象,該對(duì)象代表一個(gè)單元格或單元格區(qū)域,語(yǔ)法如下:Range(Cell1, Cell2)參數(shù)Cell1是必需的,必須為 A1 樣式引用的宏語(yǔ)言,可包括區(qū)域操作符(冒號(hào))、相交區(qū)域操作符(空格)或合并區(qū)域操作
6、符(逗號(hào))。也可包括美元符號(hào)(即絕對(duì)地址,如“$A$1”)??稍趨^(qū)域中任一部分使用局部定義名稱,如Range("B2:LastCell"),其中LastCell為已定義的單元格區(qū)域名稱。參數(shù)Cell2是可選的,區(qū)域左上角和右下角的單元格。運(yùn)行Sub RngSelect過(guò)程,選中A3:F6, B1:C5單元格區(qū)域,如圖 11所示。圖 11使用Range屬性引用單元格區(qū)域注意 如果沒(méi)有使用對(duì)象識(shí)別符,Range屬性返回活動(dòng)表的一個(gè)區(qū)域,如果活動(dòng)表不是工作表,則該屬性無(wú)效。1-2 使用Cells屬性使用Cells屬性返回一個(gè)Range對(duì)象,如下面的代碼所示。#001 Sub Ce
7、ll()#002 Dim icell As Integer#003 For icell = 1 To 100#004 Sheet2.Cells(icell, 1).Value = icell#005 Next#006 End Sub代碼解析: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ì)象的所有單元格。C
8、ells屬性的參數(shù)可以使用變量,因此經(jīng)常應(yīng)用于在單元格區(qū)域中循環(huán)。ActiveCell.Row 表示當(dāng)前活動(dòng)單元格所在的行。1-3 使用快捷記號(hào)在VBA中可以將A1引用樣式或命名區(qū)域名稱使用方括號(hào)括起來(lái),作為Range屬性的快捷方式,這樣就不必鍵入單詞“Range”或使用引號(hào),如下面的代碼所示。#001 Sub Fastmark()#002 A1:A5 = 2#003 Fast = 4#004 End Sub代碼解析:Fastmark過(guò)程使用快捷記號(hào)為單元格區(qū)域賦值。第2行代碼使用快捷記號(hào)將活動(dòng)工作表中的A1:A5單元格賦值為2。第3行代碼將工作簿中已命名為“Fast”的單元格區(qū)域賦值為4。注
9、意 使用快捷記號(hào)引用單元格區(qū)域時(shí)只能使用固定字符串而不能使用變量。1-4 使用Offset屬性可以使用Range對(duì)象的Offset屬性返回一個(gè)基于引用的Range對(duì)象的單元格區(qū)域,如下面的代碼所示。#001 Sub Offset()#002 Sheet3.Range("A1:C3").Offset(3, 3).Select#003 End Sub代碼解析:Offset過(guò)程使用Range對(duì)象的Offset屬性選中A1:A3單元格偏移三行三列后的區(qū)域。應(yīng)用于Range對(duì)象的Offset 屬性的語(yǔ)法如下:expression.Offset(RowOffset, ColumnOff
10、set)參數(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)值為 0。運(yùn)行Offset過(guò)程,選中A1:A3單元格偏稱三行三列后的區(qū)域,如圖 12所示。圖 12使用Range對(duì)象的Offset屬性1-5 使用Resize屬性使用Range對(duì)象的Resize屬性調(diào)整指定區(qū)域的大小,并返回調(diào)整大小后的單元格區(qū)域,如下面的代碼所示。#001 Sub R
11、esize()#002 Sheet4.Range("A1").Resize(3, 3).Select#003 End Sub代碼解析: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)行Re
12、size過(guò)程,選中A1單元格擴(kuò)展為三行三列后的區(qū)域,如圖 13所示。圖 13使用Resize屬性調(diào)整區(qū)域大小1-6 使用Union方法使用Union方法可以將多個(gè)非連續(xù)區(qū)域連接起來(lái)成為一個(gè)區(qū)域,從而可以實(shí)現(xiàn)對(duì)多個(gè)非連續(xù)區(qū)域一起進(jìn)行操作,如下面的代碼所示。#001 Sub UnSelect()#002 Union(Sheet5.Range("A1:D4"), Sheet5.Range("E5:H8").Select#003 End Sub代碼解析:UnSelect過(guò)程選擇單元格A1:D4和E5:H8所組成的區(qū)域。Union方法返回兩個(gè)或多個(gè)區(qū)域的合并區(qū)域,
13、語(yǔ)法如下:expression.Union(Arg1, Arg2, .)其中參數(shù)expression是可選的,返回一個(gè)Application對(duì)象。參數(shù)Arg1, Arg2, .是必需的,至少指定兩個(gè)Range對(duì)象。運(yùn)行UnSelect過(guò)程,選中單元格A1:D4和E5:H8所組成的區(qū)域,如圖 14所示。圖 14使用Union方法將多個(gè)非連續(xù)區(qū)域連接成一個(gè)區(qū)域1-7 使用UsedRange屬性使用UsedRange屬性返回指定工作表上已使用單元格組成的區(qū)域,如下面的代碼所示。#001 Sub UseSelect()#002 Sheet6.UsedRange.Select#003 End Su代碼解
14、析:UseSelect過(guò)程使用UsedRange屬性選擇工作表上已使用單元格組成的區(qū)域,包括空單元格。如工作表中已使用A1單元格和D8單元格,運(yùn)行UseSelect過(guò)程將選擇A1到D8單元格區(qū)域,如圖 15所示。圖 15使用UsedRange屬性選擇已使用區(qū)域1-8 使用CurrentRegion屬性使用CurrentRegion屬性返回指定工作表上當(dāng)前的區(qū)域,如下面的代碼所示。#001 Sub CurrentSelect()#002 Sheet7.Range("A5").CurrentRegion.Select#003 End Sub代碼解析:CurrentSelect過(guò)
15、程使用CurrentRegion屬性選擇工作表上A5單元格當(dāng)前的區(qū)域,當(dāng)前區(qū)域是一個(gè)邊緣是任意空行和空列組合成的范圍。運(yùn)行CurrentSelect過(guò)程將選擇A5到B6單元格區(qū)域,如圖 16所示。圖 16CurrentRegion屬性選擇當(dāng)前的區(qū)域技巧2 選定單元格區(qū)域的方法2-1 使用Select方法在VBA中一般使用Select方法選定單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngSelect()#002 Sheet3.Activate#003 Sheet3.Range("A1:B10").Select#004 End Sub代碼解析:RngSelect
16、過(guò)程使用Select方法選定Sheet3中的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ò),顯示如圖 21所示的錯(cuò)誤提示。圖 21Select方法無(wú)效提示2-2 使用Activate方法還可以使用Activate方法選定單元格或單元格區(qū)域,如下面的代碼所示
17、。#001 Sub RngActivate()#002 Sheet3.Activate#003 Sheet3.Range("A1:B10").Activate#004 End Sub代碼解析:RngActivate過(guò)程使用Activate方法選定Sheet3中的A1:B10單元格區(qū)域,Activate方法應(yīng)用于Range對(duì)象時(shí)語(yǔ)法如下:expression.Activate使用Activate方法選定單元格時(shí),單元格所在的工作表也必需為活動(dòng)工作表,否則Activate方法有可能出錯(cuò),顯示如圖 22所示的錯(cuò)誤提示。圖 22Activate方法無(wú)效提示2-3 使用Goto方法使
18、用Goto方法無(wú)需使單元格所在的工作表成為活動(dòng)工作表,如下面的代碼所示。#001 Sub RngGoto()#002 Application.Goto Reference:=Sheet3.Range("A1:B10"), scroll:=True#003 End Sub代碼解析:RngGoto過(guò)程使用Goto方法選定Sheet3中的A1:B10單元格區(qū)域,并滾動(dòng)工作表以顯示該單元格。Goto方法選定任意工作簿中的任意區(qū)域或任意Visual Basic過(guò)程,并且如果該工作簿未處于活動(dòng)狀態(tài),就激活該工作簿,語(yǔ)法如下:expression.Goto(Reference, Scro
19、ll)參數(shù)expression是必需的,返回一個(gè)Application 對(duì)象。參數(shù)Reference是可選的,Variant類型,指定目標(biāo)??梢允荝ange對(duì)象、包含R1C1-樣式記號(hào)的單元格引用的字符串或包含 Visual Basic 過(guò)程名的字符串。如果省略本參數(shù),目標(biāo)將是最近一次用Goto方法選定的區(qū)域。參數(shù)Scroll是可選的,Variant類型,如果該值為True,則滾動(dòng)窗口直至目標(biāo)區(qū)域的左上角單元格出現(xiàn)在窗口的左上角。如果該值為False,則不滾動(dòng)窗口。默認(rèn)值為False。技巧3 獲得指定行、列中的最后一個(gè)非空單元格使用VBA對(duì)工作表進(jìn)行操作時(shí),經(jīng)常需要定位到指定行或列中最后一個(gè)非
20、空單元格,此時(shí)可以使用Range對(duì)象的End屬性,在取得單元格對(duì)象后便能獲得該單元格的相關(guān)屬性,如單元格地址、行列號(hào)、數(shù)值等,如下面的代碼所示。#001 Sub LastRow()#002 Dim rng As Range#003 Set rng = Sheet1.Range("A65536").End(xlUp)#004 MsgBox "A列中最后一個(gè)非空單元格是" & rng.Address(0, 0) _#005 & ",行號(hào)" & rng.Row & ",數(shù)值" &
21、rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastRow過(guò)程使用消息框顯示工作表中A列最后非空單元格的地址、行號(hào)和數(shù)值。End屬性返回一個(gè)Range對(duì)象,該對(duì)象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于按鍵<End+向上鍵>、<End+向下鍵>、<End+向左鍵>或<End+向右鍵>,語(yǔ)法如下:expression.End(Direction)參數(shù)expression是必需的,一個(gè)有效的對(duì)象。參數(shù)Direction是可選的,所要移動(dòng)的方向,可以為表格 31所示的XlDirection 常量之一。
22、常量值描述xlDown-4121向下xlToRight-4161向右xlToLeft-4159向左xlUp-4162向上表格 31XlDirection 常量Range對(duì)象的End屬性返回的是一個(gè)Range對(duì)象,因此可以直接使用該對(duì)象的屬性和方法。運(yùn)行LastRow過(guò)程結(jié)果如圖 31所示。圖 31獲得A列最后一個(gè)非空單元格通過(guò)修改相應(yīng)的參數(shù),能夠獲得指定行中最后一個(gè)非空單元格,如下面的代碼所示。#001 Sub LastColumn()#002 Dim rng As Range#003 Set rng = Sheet1.Range("IV1").End(xlToLeft)#
23、004 MsgBox "第一行中最后一個(gè)非空單元格是" & rng.Address(0, 0) _#005 & ",列號(hào)" & rng.Column & ",數(shù)值" & rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastColumn過(guò)程使用消息框顯示工作表中第一行最后一個(gè)非空單元格的地址、列號(hào)和數(shù)值,如圖 32所示。圖 32獲得第一行最后一個(gè)非空單元格技巧4 定位單元格在Excel中使用定位對(duì)話框可以選中工作表中特定的單元格區(qū)域,而在VBA中
24、則使用SpecialCells方法,如下面的代碼所示。#001 Sub SpecialAddress()#002 Dim rng As Range#003 Set rng = Sheet1.UsedRange.SpecialCells(xlCellTypeFormulas)#004 rng.Select#005 MsgBox "工作表中有公式的單元格為: " & rng.Address#006 Set rng = Nothing#007 End Sub代碼解析:SpecialAddress過(guò)程使用SpecialCells方法選中工作表中有公式的單元格,并用消息框顯示
25、其地址。SpecialCells方法返回一個(gè)Range對(duì)象,該對(duì)象代表與指定類型及值相匹配的所有單元格,語(yǔ)法如下:expression.SpecialCells(Type, Value)參數(shù)expression是必需的,返回一個(gè)有效的對(duì)象。參數(shù)Type是必需的,要包含的單元格,可為表格 41所列的XlCellType常量之一。常量值描述xlCellTypeAllFormatConditions-4172任意格式單元格xlCellTypeAllValidation-4174含有驗(yàn)證條件的單元格xlCellTypeBlanks4空單元格xlCellTypeComments-4144含有注釋的單元格
26、xlCellTypeConstants2含有常量的單元格xlCellTypeFormulas-4123含有公式的單元格xlCellTypeLastCell11使用區(qū)域中最后的單元格xlCellTypeSameFormatConditions-4173含有相同格式的單元格xlCellTypeSameValidation-4175含有相同驗(yàn)證條件的單元格xlCellTypeVisible12所有可見(jiàn)單元格表格 41XlCellType常量第3行代碼將SpecialCells方法的Type參數(shù)設(shè)置為xlCellTypeFormulas,返回的是含有公式的單元格,通過(guò)修改相應(yīng)的參數(shù)可以返回不同的單元格
27、。參數(shù)Value是可選的,如果Type參數(shù)為xlCellTypeConstants或xlCellTypeFormulas, 此參數(shù)可用于確定結(jié)果中應(yīng)包含哪幾類單元格。將某幾個(gè)值相加可使此方法返回多種類型的單元格。如果省略將選定所有常量或公式,可為表格 42所列的 XlSpecialCellsValue常量之一。常量值描述xlErrors16錯(cuò)誤xlLogical4邏輯值xlNumbers1數(shù)字xlTextValues2文本表格 42XlSpecialCellsValue常量第5行代碼使用消息框顯示工作表中含有公式單元格的地址。SpecialCells方法返回的是Range對(duì)象,因此可以直接使用
28、該對(duì)象的屬性和方法。運(yùn)行SpecialAddress過(guò)程結(jié)果如圖 41所示。圖 41SpecialCells方法技巧5 查找單元格5-1 使用Find方法在Excel中使用查找對(duì)話框可以查找工作表中特定內(nèi)容的單元格,而在VBA中則使用Find方法,如下面的代碼所示。#001 Sub RngFind()#002 Dim StrFind As String#003 Dim Rng As Range#004 StrFind = InputBox("請(qǐng)輸入要查找的值:")#005 If Trim(StrFind) <> "" Then#006 Wit
29、h Sheet1.Range("A:A")#007 Set Rng = .Find(What:=StrFind, _#008 After:=.Cells(.Cells.Count), _#009 LookIn:=xlValues, _#010 LookAt:=xlWhole, _#011 SearchOrder:=xlByRows, _#012 SearchDirection:=xlNext, _#013 MatchCase:=False)#014 If Not Rng Is Nothing Then#015 Application.Goto Rng, True#016 E
30、lse#017 MsgBox "沒(méi)有找到該單元格!"#018 End If#019 End With#020 End If#021 End Sub代碼解析:RngFind過(guò)程使用Find方法在工作表Sheet1的A列中查找InputBox函數(shù)對(duì)話框中所輸入的值,并查找該值所在的第一個(gè)單元格。第6到第13行代碼在工作表Sheet1的A列中查找InputBox函數(shù)對(duì)話框中所輸入的值。應(yīng)用于Range對(duì)象的Find方法在區(qū)域中查找特定信息,并返回Range對(duì)象,該對(duì)象代表用于查找信息的第一個(gè)單元格。如果未發(fā)現(xiàn)匹配單元格,就返回Nothing,語(yǔ)法如下:expression.Fin
31、d(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。參數(shù)What是必需的,要搜索的數(shù)據(jù),可為字符串或任意數(shù)據(jù)類型。參數(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è)單元格,所以查找
32、時(shí)從A1單元格開(kāi)始搜索。參數(shù)LookIn是可選的,信息類型。參數(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é)語(yǔ)言支持時(shí)使用。若為True,則雙字節(jié)字符僅匹配雙
33、字節(jié)字符。若為False,則雙字節(jié)字符可匹配其等價(jià)的單字節(jié)字符。參數(shù)SerchFormat是可選的,搜索的格式。每次使用Find方法后,參數(shù)LookIn、LookAt、SearchOrder 和MatchByte的設(shè)置將保存。如果下次調(diào)用Find方法時(shí)不指定這些參數(shù)的值,就使用保存的值。因此每次使用該方法時(shí)請(qǐng)明確設(shè)置這些參數(shù)。如果工作表的A列中存在重復(fù)的數(shù)值,那么需要使用FindNext方法或FindPrevious方法進(jìn)行重復(fù)搜索,如下面的代碼所示。#001 Sub RngFindNext()#002 Dim StrFind As String#003 Dim Rng As Range#00
34、4 Dim FindAddress As String#005 StrFind = InputBox("請(qǐng)輸入要查找的值:")#006 If Trim(StrFind) <> "" Then#007 With Sheet1.Range("A:A")#008 Set Rng = .Find(What:=StrFind, _#009 After:=.Cells(.Cells.Count), _#010 LookIn:=xlValues, _#011 LookAt:=xlWhole, _#012 SearchOrder:=xlB
35、yRows, _#013 SearchDirection:=xlNext, _#014 MatchCase:=False)#015 If Not Rng Is Nothing Then#016 FindAddress = Rng.Address#017 Do#018 Rng.Interior.ColorIndex = 6#019 Set Rng = .FindNext(Rng)#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress#021 End If#022 End With#023 End If#024
36、 End Sub代碼解析:RngFindNext過(guò)程在工作表Sheet1的A列中查找InputBox函數(shù)對(duì)話框中所輸入的值,并將查到單元格底色設(shè)置成黃色。第8行到第17行代碼使用Find方法在工作表Sheet1的A列中查找。第16行代碼將查找到的第一個(gè)單元格地址賦給字符串變量FindAddress。第18行代碼將查找到的單元格底色設(shè)置成黃色。第19行代碼使用FindNext方法進(jìn)行重復(fù)搜索。FindNext方法繼續(xù)執(zhí)行用Find方法啟動(dòng)的搜索。查找下一個(gè)匹配相同條件的單元格并返回代表單元格的Range對(duì)象,語(yǔ)法如下:expression.FindNext(After)參數(shù)expression是
37、必需的,返回一個(gè)Range對(duì)象。參數(shù)After是可選的,指定一個(gè)單元格,查找將從該單元格之后開(kāi)始。第20行代碼如果查找到的單元格地址等于字符串變量FindAddress所記錄的地址,說(shuō)明A列已搜索完畢,結(jié)束查找過(guò)程。運(yùn)行RngFindNext過(guò)程,在InputBox函數(shù)輸入框中輸入“196.01”后結(jié)果如圖 51所示。圖 51使用FindNext方法重復(fù)搜索還可以使用FindPrevious方法進(jìn)行重復(fù)搜索,F(xiàn)indPrevious方法的語(yǔ)法如下:expression.FindPrevious(After)FindPrevious方法和FindNext方法唯一的區(qū)別是FindPrevious方
38、法查找匹配相同條件的前一個(gè)單元格而FindNext方法是查找匹配相同條件的下一個(gè)單元格。5-2 使用Like運(yùn)算符使用Like運(yùn)算符可以進(jìn)行更為復(fù)雜的模式匹配查找,如下面的代碼所示。#001 Sub RngLike()#002 Dim rng As Range#003 Dim a As Integer#004 a = 1#005 With Sheet2#006 .Range("A:A").ClearContents#007 For Each rng In .Range("B1:E1000")#008 If rng.Text Like "*a*&
39、quot; Then#009 .Range("A" & a) = rng.Text#010 a = a + 1#011 End If#012 Next#013 End With#014 End Sub代碼解析:RngLike過(guò)程使用For Each.Next語(yǔ)句和Like運(yùn)算符在單元格區(qū)域B1:E10000中搜索含有“a”字符的單元格,找到匹配單元格以后將單元格的值寫入到A列中。第6行代碼使用ClearContents方法清除A列區(qū)域的數(shù)據(jù)。第7行代碼使用For Each.Next語(yǔ)句在單元格區(qū)域B1:E10000中循環(huán)。第8行代碼使用Like運(yùn)算符在單元格區(qū)域B1
40、:E10000中搜索含有“a”字符的單元格。Like運(yùn)算符用來(lái)比較兩個(gè)字符串,語(yǔ)法如下:result = string Like pattern參數(shù)string是必需的,字符串表達(dá)式。參數(shù)pattern是必需的,字符串表達(dá)式。如果string與pattern匹配,則result為True;如果不匹配,則result為False。但是如果string或pattern 中有一個(gè)為Null,則result 為 Null。參數(shù)pattern可以使用通配符、字符串列表或字符區(qū)間的任何組合來(lái)匹配字符串。表格 51列出pattern中允許的字符以及它們與什么進(jìn)行匹配。pattern中的字符符合string中
41、的字符?任何單一字符*零個(gè)或多個(gè)字符#任何一個(gè)數(shù)字 (09)charlistcharlist中的任何單一字符!charlist不在charlist中的任何單一字符表格 51pattern中的匹配字符串第9行代碼將找到的匹配單元格的值寫入到A列中。運(yùn)行RngLike過(guò)程結(jié)果如圖 52所示。圖 52使用Like運(yùn)算符進(jìn)行模式匹配查找技巧6 替換單元格內(nèi)字符串如果需要替換單元格內(nèi)指定的字符串,那么使用Range對(duì)象的Replace方法,如下面的代碼所示。#001 Sub RngReplace()#002 Range("A1:A5").Replace "通州",
42、 "南通"#003 End Sub代碼解析:RngReplace過(guò)程將工作表A1:A5單元格中的“通州”字符串替換成“南通”字符串。應(yīng)用于Range對(duì)象的Replace方法替換指定區(qū)域內(nèi)單元格中的字符,語(yǔ)法如下:expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)其中參數(shù)expression是必需的,返回一個(gè)Range對(duì)象。參數(shù)What是必需的,要搜索的字符串。參數(shù)Replacement是必需的,替換的字符串。
43、運(yùn)行RngReplace過(guò)程前工作表如圖 61所示,運(yùn)行RngReplace過(guò)程后結(jié)果如圖 62所示。圖 61替換前單元格圖 62替換后單元格技巧7 復(fù)制單元格區(qū)域在實(shí)際操作中,經(jīng)常需要復(fù)制指定的單元格區(qū)域到另外一個(gè)單元格區(qū)域。要復(fù)制指定單元格區(qū)域到其他位置,使用Range對(duì)象的Copy方法,如下面的代碼所示。#001 Sub RangeCopy()#002 Application.DisplayAlerts = False#003 Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")#004
44、Application.DisplayAlerts = True#005 End Sub代碼解析:RangeCopy過(guò)程將如圖 71所示的Sheet1工作表中A1單元格的當(dāng)前區(qū)域復(fù)制到Sheet2工作表中以A1單元格為左上角單元格的區(qū)域,如圖 72所示。圖 71需復(fù)制的數(shù)據(jù)表圖 72復(fù)制結(jié)果Range對(duì)象的Copy方法的語(yǔ)法如下:Copy(Destination)參數(shù)Destination表示復(fù)制單元格區(qū)域的目標(biāo)區(qū)域,如果省略該參數(shù),Excel將把該區(qū)域復(fù)制到剪貼板中。使用Copy方法復(fù)制單元格區(qū)域時(shí),也復(fù)制了該單元格區(qū)域的格式,如圖 72所示。復(fù)制單元格區(qū)域時(shí),如果目標(biāo)區(qū)域?yàn)榉强諉卧駞^(qū)域,
45、Excel將顯示如圖 73所示的消息框提示是否替換單元格內(nèi)容,可以設(shè)置Application.DisplayAlerts屬性值為False,使復(fù)制時(shí)不出現(xiàn)該消息框。圖 73替換對(duì)話框第2行代碼通常復(fù)制單元格區(qū)域的操作不會(huì)將單元格區(qū)域的列寬大小同時(shí)復(fù)制,如圖 72所示。如果希望在復(fù)制單元格區(qū)域的同時(shí),也復(fù)制源區(qū)域的列寬大小,可以使用下面的代碼。#001 Sub CopyWithSameColumnWidths()#002 Sheet1.Range("A1").CurrentRegion.Copy#003 With Sheet3.Range("A1")#00
46、4 .PasteSpecial xlPasteColumnWidths#005 .PasteSpecial xlPasteAll#006 End With#007 Application.CutCopyMode = False#008 End Sub代碼解析:第4行代碼使用Range對(duì)象的PasteSpecial方法選擇性粘貼剪貼板中的Range對(duì)象的列寬。第5行代碼粘貼剪貼板中的Range對(duì)象全部?jī)?nèi)容。第7行代碼取消應(yīng)用程序復(fù)制模式。應(yīng)用于Range對(duì)象的PasteSpecial方法將剪貼板中的Range對(duì)象粘貼到指定區(qū)域,在粘貼時(shí)可以有選擇的粘貼對(duì)象的部分屬性。其語(yǔ)法如下:PasteSpe
47、cial(Paste, Operation, SkipBlanks, Transpose)參數(shù)Paste指定要粘貼的區(qū)域部分,可為表格 71所列的XlPasteType常量之一。常量值描述xlPasteAll -4104全部(默認(rèn)值)xlPasteAllExceptBorders7邊框除外xlPasteColumnWidths8列寬xlPasteComments-4144批注xlPasteFormats-4122格式xlPasteFormulas-4123公式xlPasteFormulasAndNumberFormats11公式和數(shù)字格式xlPasteValidation6有效性驗(yàn)證xlPas
48、teValues-4163數(shù)值xlPasteValuesAndNumberFormats12值和數(shù)字格式表格 71XlPasteType 常量參數(shù)Operation指定粘貼操作??蔀楸砀?72所列的XlPasteSpecialOperation常量之一。常量值描述xlPasteSpecialOperationNone-4142無(wú)(默認(rèn)值)xlPasteSpecialOperationAdd2加xlPasteSpecialOperationSubtract3減xlPasteSpecialOperationMultiply4乘xlPasteSpecialOperationDivide5除表格 72
49、XlPasteSpecialOperation常量參數(shù)SkipBlanks指示是否跳過(guò)空單元格,若參數(shù)值為True,則不將剪貼板上區(qū)域中的空白單元格粘貼到目標(biāo)區(qū)域中。默認(rèn)值為False。參數(shù)Transpose指示是否進(jìn)行轉(zhuǎn)置,若參數(shù)值為True,則粘貼區(qū)域時(shí)轉(zhuǎn)置行和列。默認(rèn)值為False。運(yùn)行CopyWithSameColumnWidths過(guò)程后,Sheet3工作表如圖 74所示,目標(biāo)區(qū)域的各列列寬與源區(qū)域一致。圖 74粘貼列寬后的復(fù)制結(jié)果注意 使用PasteSpecial方法時(shí)指定xlPasteAll(粘貼全部),不會(huì)粘貼列寬。技巧8 僅復(fù)制數(shù)值到另一區(qū)域如果在復(fù)制單元格區(qū)域時(shí),僅希望復(fù)制單
50、元格區(qū)域的數(shù)值,有下面幾種方法。8-1 使用選擇性粘貼使用選擇性粘貼功能并指定粘貼數(shù)值,如下面的代碼所示。#001 Sub CopyPasteSpecial()#002 Sheet1.Range("A1").CurrentRegion.Copy#003 Sheet2.Range("A1").PasteSpecial Paste:=xlPasteValues#004 Application.CutCopyMode = False#005 End Sub代碼解析:CopyPasteSpecial過(guò)程復(fù)制工作表Sheet1中A1單元格的當(dāng)前區(qū)域的數(shù)值到工作表S
51、heet2的A1單元格所在區(qū)域中。第2行代碼將如圖 81所示的Sheet1中A1單元格的當(dāng)前區(qū)域進(jìn)行復(fù)制。圖 81需復(fù)制的數(shù)據(jù)表第3行代碼使用選擇性粘貼功能并指定粘貼數(shù)值,選擇性粘貼數(shù)值僅復(fù)制了單元格區(qū)域的數(shù)值,單元格區(qū)域的格式(背景顏色、字體對(duì)齊格式和邊框等)不會(huì)被復(fù)制,復(fù)制結(jié)果如圖 82所示。圖 82復(fù)制單元格區(qū)域數(shù)值8-2 直接賦值的方法除了使用Copy方法外,還可以使用直接賦值的方法,如下面的代碼所示。#001 Sub GetValueResize()#002 With Sheet1.Range("A1").CurrentRegion#003 Sheet3.Rang
52、e("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value#004 End With#005 End Sub代碼解析:GetValueResize過(guò)程將工作表Sheet1中的A1單元格的當(dāng)前區(qū)域的數(shù)值賦予工作表Sheet3的A1單元格所在的單元格區(qū)域。在對(duì)單元格區(qū)域直接賦值時(shí),應(yīng)保證源區(qū)域大小與目標(biāo)區(qū)域的大小一致,如果源區(qū)域?yàn)閯?dòng)態(tài)的單元格區(qū)域,可使用Resize方法確定目標(biāo)區(qū)域。運(yùn)行GetValueResize過(guò)程,賦值結(jié)果如圖 82所示。技巧9 單元格自動(dòng)進(jìn)入編輯狀態(tài)當(dāng)光標(biāo)選擇單元格時(shí)無(wú)需雙擊,自動(dòng)進(jìn)入編輯狀態(tài),如
53、下面的代碼所示。#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)#002 If Target.Column = 3 And Target.Count = 1 Then#003 If Target <> "" Then#004 Application.SendKeys "F2"#005 End If#006 End If#007 End Sub代碼解析:工作表的SelectionChange事件過(guò)程,當(dāng)選擇工作表C列有數(shù)據(jù)單元格時(shí)自動(dòng)進(jìn)入編輯狀態(tài)。第2、3行代碼設(shè)置SelectionChange事件的觸發(fā)條件,利用Target參數(shù)的Colu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3730-2024 3D打印指甲貼片
- 2025年度租賃期滿后房屋產(chǎn)權(quán)無(wú)償轉(zhuǎn)讓協(xié)議
- 二零二五年度美容院合伙經(jīng)營(yíng)店鋪轉(zhuǎn)讓協(xié)議
- 二零二五年度輔導(dǎo)班學(xué)生安全協(xié)議及教師教學(xué)責(zé)任書(shū)
- 2025年度洗浴中心員工薪酬福利及雇傭合同
- 二零二五年度股權(quán)激勵(lì)與員工股權(quán)激勵(lì)計(jì)劃執(zhí)行合同模板
- 二零二五年度貸款合同爭(zhēng)議解決協(xié)議書(shū)
- 網(wǎng)絡(luò)游戲合作開(kāi)發(fā)與運(yùn)營(yíng)協(xié)議
- 關(guān)于辦公時(shí)間調(diào)整的通知
- 房屋及土地使用權(quán)轉(zhuǎn)讓合同書(shū)
- 2024年中小學(xué)生守則修訂版
- 博覽會(huì)展位裝修及布展投標(biāo)方案技術(shù)標(biāo)
- 顧客提問(wèn)的問(wèn)題100條
- 肝膿腫教學(xué)查房課件
- 跳繩之雙腳跳教案
- 拇外翻護(hù)理課件
- 六年級(jí)英語(yǔ)教學(xué)隨筆5篇
- 讀書(shū)分享交流會(huì)《從一到無(wú)窮大》課件
- 蘇教版六年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)計(jì)劃及全冊(cè)教案
- 醫(yī)療器械可用性工程文檔
- GB/T 24475-2023電梯遠(yuǎn)程報(bào)警系統(tǒng)
評(píng)論
0/150
提交評(píng)論