EXCEL_VBA常用技巧(第1部分).doc_第1頁
EXCEL_VBA常用技巧(第1部分).doc_第2頁
EXCEL_VBA常用技巧(第1部分).doc_第3頁
EXCEL_VBA常用技巧(第1部分).doc_第4頁
EXCEL_VBA常用技巧(第1部分).doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余52頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

VBA常用技巧目錄第1章Range(單元格)對象3技巧1單元格的引用方法31-1使用Range屬性31-2使用Cells屬性41-3使用快捷記號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獲得指定行、列中的最后一個非空單元格10技巧4定位單元格13技巧5查找單元格145-1使用Find方法145-2使用Like運(yùn)算符18技巧6替換單元格內(nèi)字符串19技巧7復(fù)制單元格區(qū)域20技巧8僅復(fù)制數(shù)值到另一區(qū)域238-1使用選擇性粘貼238-2直接賦值的方法24技巧9單元格自動進(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ù)有效性3312-3動態(tài)的數(shù)據(jù)有效性3412-4自動展開數(shù)據(jù)有效性下拉列表36技巧13單元格中的公式3713-1在單元格中寫入公式3713-2檢查單元格是否含有公式3813-3判斷單元格公式是否存在錯誤3913-4取得單元格中公式的引用單元格4013-5將單元格中的公式轉(zhuǎn)換為數(shù)值41技巧14單元格中的批注4214-1判斷單元格是否存在批注4214-2為單元格添加批注4314-3刪除單元格中的批注44技巧15合并單元格操作4515-1判斷單元格區(qū)域是否存在合并單元格4515-2合并單元格時連接每個單元格的文本4615-3合并內(nèi)容相同的連續(xù)單元格4715-4取消合并單元格時在每個單元格中保留內(nèi)容49技巧16高亮顯示單元格區(qū)域50技巧17雙擊被保護(hù)單元格時不顯示提示消息框51技巧18重新計(jì)算工作表指定區(qū)域53技巧19錄入數(shù)據(jù)后單元格自動保護(hù)53技巧20工作表事件Target參數(shù)的使用方法5520-1使用單元格的Address 屬性5520-2使用Column屬性和Row屬性5620-3使用Intersect方法56第1章 Range(單元格)對象Range對象是Excel應(yīng)用程序中最常用的對象,一個Range對象代表一個單元格、一行、一列、包含一個或者更多單元格區(qū)域(可以是連續(xù)的單元格,也可以是不連續(xù)的單元格)中選定的單元格,甚至是多個工作表上的一組單元格,在操作Excel 內(nèi)的任何區(qū)域之前都需要將其表示為一個Range對象,然后使用該Range對象的方法和屬性。技巧1 單元格的引用方法在VBA中經(jīng)常需要引用單元格或單元格區(qū)域區(qū)域,主要有以下幾種方法。1-1 使用Range屬性VBA中可以使用Range屬性返回單元格或單元格區(qū)域,如下面的代碼所示。#001 Sub RngSelect() #002 Sheet1.Range(A3:F6, B1:C5).Select#003 End Sub代碼解析:RngSelect過程使用Select方法選中A3:F6,B1:C5單元格區(qū)域。Range屬性返回一個Range對象,該對象代表一個單元格或單元格區(qū)域,語法如下:Range(Cell1, Cell2)參數(shù)Cell1是必需的,必須為 A1 樣式引用的宏語言,可包括區(qū)域操作符(冒號)、相交區(qū)域操作符(空格)或合并區(qū)域操作符(逗號)。也可包括美元符號(即絕對地址,如“$A$1”)??稍趨^(qū)域中任一部分使用局部定義名稱,如Range(B2:LastCell),其中LastCell為已定義的單元格區(qū)域名稱。參數(shù)Cell2是可選的,區(qū)域左上角和右下角的單元格。運(yùn)行Sub RngSelect過程,選中A3:F6, B1:C5單元格區(qū)域,如圖 11所示。圖 11使用Range屬性引用單元格區(qū)域注意 如果沒有使用對象識別符,Range屬性返回活動表的一個區(qū)域,如果活動表不是工作表,則該屬性無效。1-2 使用Cells屬性使用Cells屬性返回一個Range對象,如下面的代碼所示。#001 Sub Cell()#002 Dim icell As Integer#003 For icell = 1 To 100#004 Sheet2.Cells(icell, 1).Value = icell#005 Next#006 End Sub代碼解析:Cell過程使用For.Next語句為工作表中的A1:A100單元格區(qū)域填入序號。Cells屬性指定單元格區(qū)域中的單元格,語法如下:Cells(RowIndex, ColumnIndex)參數(shù)RowIndex是可選的,表示引用區(qū)域中的行序號。參數(shù)ColumnIndex是可選的,表示引用區(qū)域中的列序號。如果缺省參數(shù),Cells屬性返回引用對象的所有單元格。Cells屬性的參數(shù)可以使用變量,因此經(jīng)常應(yīng)用于在單元格區(qū)域中循環(huán)。1-3 使用快捷記號在VBA中可以將A1引用樣式或命名區(qū)域名稱使用方括號括起來,作為Range屬性的快捷方式,這樣就不必鍵入單詞“Range”或使用引號,如下面的代碼所示。#001 Sub Fastmark()#002 A1:A5 = 2#003 Fast = 4#004 End Sub代碼解析:Fastmark過程使用快捷記號為單元格區(qū)域賦值。第2行代碼使用快捷記號將活動工作表中的A1:A5單元格賦值為2。第3行代碼將工作簿中已命名為“Fast”的單元格區(qū)域賦值為4。注意 使用快捷記號引用單元格區(qū)域時只能使用固定字符串而不能使用變量。1-4 使用Offset屬性可以使用Range對象的Offset屬性返回一個基于引用的Range對象的單元格區(qū)域,如下面的代碼所示。#001 Sub Offset()#002 Sheet3.Range(A1:C3).Offset(3, 3).Select#003 End Sub代碼解析:Offset過程使用Range對象的Offset屬性選中A1:A3單元格偏移三行三列后的區(qū)域。應(yīng)用于Range對象的Offset 屬性的語法如下:expression.Offset(RowOffset, ColumnOffset)參數(shù)expression是必需的,該表達(dá)式返回一個Range對象。參數(shù)RowOffset是可選的,區(qū)域偏移的行數(shù)(正值、負(fù)值或 0(零)。正值表示向下偏移,負(fù)值表示向上偏移,默認(rèn)值為 0。參數(shù)ColumnOffset是可選的,區(qū)域偏移的列數(shù)(正值、負(fù)值或 0(零)。正值表示向右偏移,負(fù)值表示向左偏移,默認(rèn)值為 0。運(yùn)行Offset過程,選中A1:A3單元格偏稱三行三列后的區(qū)域,如圖 12所示。圖 12使用Range對象的Offset屬性1-5 使用Resize屬性使用Range對象的Resize屬性調(diào)整指定區(qū)域的大小,并返回調(diào)整大小后的單元格區(qū)域,如下面的代碼所示。#001 Sub Resize()#002 Sheet4.Range(A1).Resize(3, 3).Select#003 End Sub代碼解析:Resize過程使用Range對象的Resize屬性選中A1單元格擴(kuò)展為三行三列后的區(qū)域。Resize屬性的語法如下:expression.Resize(RowSize, ColumnSize)參數(shù)expression是必需的,返回要調(diào)整大小的Range 對象參數(shù)RowSize是可選的,新區(qū)域中的行數(shù)。如果省略該參數(shù),則該區(qū)域中的行數(shù)保持不變。參數(shù)ColumnSize是可選的,新區(qū)域中的列數(shù)。如果省略該參數(shù)。則該區(qū)域中的列數(shù)保持不變。運(yùn)行Resize過程,選中A1單元格擴(kuò)展為三行三列后的區(qū)域,如圖 13所示。圖 13使用Resize屬性調(diào)整區(qū)域大小1-6 使用Union方法使用Union方法可以將多個非連續(xù)區(qū)域連接起來成為一個區(qū)域,從而可以實(shí)現(xiàn)對多個非連續(xù)區(qū)域一起進(jìn)行操作,如下面的代碼所示。#001 Sub UnSelect()#002 Union(Sheet5.Range(A1:D4), Sheet5.Range(E5:H8).Select#003 End Sub代碼解析:UnSelect過程選擇單元格A1:D4和E5:H8所組成的區(qū)域。Union方法返回兩個或多個區(qū)域的合并區(qū)域,語法如下:expression.Union(Arg1, Arg2, .)其中參數(shù)expression是可選的,返回一個Application對象。參數(shù)Arg1, Arg2, .是必需的,至少指定兩個Range對象。運(yùn)行UnSelect過程,選中單元格A1:D4和E5:H8所組成的區(qū)域,如圖 14所示。圖 14使用Union方法將多個非連續(xù)區(qū)域連接成一個區(qū)域1-7 使用UsedRange屬性使用UsedRange屬性返回指定工作表上已使用單元格組成的區(qū)域,如下面的代碼所示。#001 Sub UseSelect()#002 Sheet6.UsedRange.Select#003 End Su代碼解析:UseSelect過程使用UsedRange屬性選擇工作表上已使用單元格組成的區(qū)域,包括空單元格。如工作表中已使用A1單元格和D8單元格,運(yùn)行UseSelect過程將選擇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過程使用CurrentRegion屬性選擇工作表上A5單元格當(dāng)前的區(qū)域,當(dāng)前區(qū)域是一個邊緣是任意空行和空列組合成的范圍。運(yùn)行CurrentSelect過程將選擇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過程使用Select方法選定Sheet3中的A1:B10單元格區(qū)域,Select方法應(yīng)用于Range對象時語法如下:expression.Select(Replace)參數(shù)expression是必需的,一個有效的對象。參數(shù)Replace是可選的,要替換的對象。使用Select方法選定單元格時,單元格所在的工作表必需為活動工作表,所以在第2行代碼中先使用Activate方法使Sheet3成為活動工作表,否則Select方法有可能出錯,顯示如圖 21所示的錯誤提示。圖 21Select方法無效提示2-2 使用Activate方法還可以使用Activate方法選定單元格或單元格區(qū)域,如下面的代碼所示。Sub RngActivate() Sheet3.Activate Sheet3.Range(A1:B10).ActivateEnd Sub代碼解析:RngActivate過程使用Activate方法選定Sheet3中的A1:B10單元格區(qū)域,Activate方法應(yīng)用于Range對象時語法如下:expression.Activate使用Activate方法選定單元格時,單元格所在的工作表也必需為活動工作表,否則Activate方法有可能出錯,顯示如圖 22所示的錯誤提示。圖 22Activate方法無效提示2-3 使用Goto方法使用Goto方法無需使單元格所在的工作表成為活動工作表,如下面的代碼所示。#001 Sub RngGoto()#002 Application.Goto Reference:=Sheet3.Range(A1:B10), scroll:=True#003 End Sub代碼解析:RngGoto過程使用Goto方法選定Sheet3中的A1:B10單元格區(qū)域,并滾動工作表以顯示該單元格。Goto方法選定任意工作簿中的任意區(qū)域或任意Visual Basic過程,并且如果該工作簿未處于活動狀態(tài),就激活該工作簿,語法如下:expression.Goto(Reference, Scroll)參數(shù)expression是必需的,返回一個Application 對象。參數(shù)Reference是可選的,Variant類型,指定目標(biāo)??梢允荝ange對象、包含R1C1-樣式記號的單元格引用的字符串或包含 Visual Basic 過程名的字符串。如果省略本參數(shù),目標(biāo)將是最近一次用Goto方法選定的區(qū)域。參數(shù)Scroll是可選的,Variant類型,如果該值為True,則滾動窗口直至目標(biāo)區(qū)域的左上角單元格出現(xiàn)在窗口的左上角。如果該值為False,則不滾動窗口。默認(rèn)值為False。技巧3 獲得指定行、列中的最后一個非空單元格使用VBA對工作表進(jìn)行操作時,經(jīng)常需要定位到指定行或列中最后一個非空單元格,此時可以使用Range對象的End屬性,在取得單元格對象后便能獲得該單元格的相關(guān)屬性,如單元格地址、行列號、數(shù)值等,如下面的代碼所示。#001 Sub LastRow()#002 Dim rng As Range#003 Set rng = Sheet1.Range(A65536).End(xlUp)#004 MsgBox A列中最后一個非空單元格是 & rng.Address(0, 0) _#005 & ,行號 & rng.Row & ,數(shù)值 & rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastRow過程使用消息框顯示工作表中A列最后非空單元格的地址、行號和數(shù)值。End屬性返回一個Range對象,該對象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于按鍵、或,語法如下:expression.End(Direction)參數(shù)expression是必需的,一個有效的對象。參數(shù)Direction是可選的,所要移動的方向,可以為表格 31所示的XlDirection 常量之一。常量值描述xlDown-4121向下xlToRight-4161向右xlToLeft-4159向左xlUp-4162向上表格 31XlDirection 常量Range對象的End屬性返回的是一個Range對象,因此可以直接使用該對象的屬性和方法。運(yùn)行LastRow過程結(jié)果如圖 31所示。圖 31獲得A列最后一個非空單元格通過修改相應(yīng)的參數(shù),能夠獲得指定行中最后一個非空單元格,如下面的代碼所示。#001 Sub LastColumn()#002 Dim rng As Range#003 Set rng = Sheet1.Range(IV1).End(xlToLeft)#004 MsgBox 第一行中最后一個非空單元格是 & rng.Address(0, 0) _#005 & ,列號 & rng.Column & ,數(shù)值 & rng.Value#006 Set rng = Nothing#007 End Sub代碼解析:LastColumn過程使用消息框顯示工作表中第一行最后一個非空單元格的地址、列號和數(shù)值,如圖 32所示。圖 32獲得第一行最后一個非空單元格技巧4 定位單元格在Excel中使用定位對話框可以選中工作表中特定的單元格區(qū)域,而在VBA中則使用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過程使用SpecialCells方法選中工作表中有公式的單元格,并用消息框顯示其地址。SpecialCells方法返回一個Range對象,該對象代表與指定類型及值相匹配的所有單元格,語法如下:expression.SpecialCells(Type, Value)參數(shù)expression是必需的,返回一個有效的對象。參數(shù)Type是必需的,要包含的單元格,可為表格 41所列的XlCellType常量之一。常量值描述xlCellTypeAllFormatConditions-4172任意格式單元格xlCellTypeAllValidation-4174含有驗(yàn)證條件的單元格xlCellTypeBlanks4空單元格xlCellTypeComments-4144含有注釋的單元格xlCellTypeConstants2含有常量的單元格xlCellTypeFormulas-4123含有公式的單元格xlCellTypeLastCell11使用區(qū)域中最后的單元格xlCellTypeSameFormatConditions-4173含有相同格式的單元格xlCellTypeSameValidation-4175含有相同驗(yàn)證條件的單元格xlCellTypeVisible12所有可見單元格表格 41XlCellType常量第3行代碼將SpecialCells方法的Type參數(shù)設(shè)置為xlCellTypeFormulas,返回的是含有公式的單元格,通過修改相應(yīng)的參數(shù)可以返回不同的單元格。參數(shù)Value是可選的,如果Type參數(shù)為xlCellTypeConstants或xlCellTypeFormulas, 此參數(shù)可用于確定結(jié)果中應(yīng)包含哪幾類單元格。將某幾個值相加可使此方法返回多種類型的單元格。如果省略將選定所有常量或公式,可為表格 42所列的 XlSpecialCellsValue常量之一。常量值描述xlErrors16錯誤xlLogical4邏輯值xlNumbers1數(shù)字xlTextValues2文本表格 42XlSpecialCellsValue常量第5行代碼使用消息框顯示工作表中含有公式單元格的地址。SpecialCells方法返回的是Range對象,因此可以直接使用該對象的屬性和方法。運(yùn)行SpecialAddress過程結(jié)果如圖 41所示。圖 41SpecialCells方法技巧5 查找單元格5-1 使用Find方法在Excel中使用查找對話框可以查找工作表中特定內(nèi)容的單元格,而在VBA中則使用Find方法,如下面的代碼所示。#001 Sub RngFind()#002 Dim StrFind As String#003 Dim Rng As Range#004 StrFind = InputBox(請輸入要查找的值:)#005 If Trim(StrFind) Then#006 With 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 Else#017 MsgBox 沒有找到該單元格!#018 End If#019 End With#020 End If#021 End Sub代碼解析:RngFind過程使用Find方法在工作表Sheet1的A列中查找InputBox函數(shù)對話框中所輸入的值,并查找該值所在的第一個單元格。第6到第13行代碼在工作表Sheet1的A列中查找InputBox函數(shù)對話框中所輸入的值。應(yīng)用于Range對象的Find方法在區(qū)域中查找特定信息,并返回Range對象,該對象代表用于查找信息的第一個單元格。如果未發(fā)現(xiàn)匹配單元格,就返回Nothing,語法如下:expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)參數(shù)expression是必需的,該表達(dá)式返回一個Range對象。參數(shù)What是必需的,要搜索的數(shù)據(jù),可為字符串或任意數(shù)據(jù)類型。參數(shù)After是可選的,表示搜索過程將從其之后開始進(jìn)行的單元格,必須是區(qū)域中的單個單元格。查找時是從該單元格之后開始的,直到本方法繞回到指定的單元格時,才對其進(jìn)行搜索。如果未指定本參數(shù),搜索將從區(qū)域的左上角單元格之后開始。在本例中將After參數(shù)設(shè)置為A列的最后一個單元格,所以查找時從A1單元格開始搜索。參數(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é)語言支持時使用。若為True,則雙字節(jié)字符僅匹配雙字節(jié)字符。若為False,則雙字節(jié)字符可匹配其等價的單字節(jié)字符。參數(shù)SerchFormat是可選的,搜索的格式。每次使用Find方法后,參數(shù)LookIn、LookAt、SearchOrder 和MatchByte的設(shè)置將保存。如果下次調(diào)用Find方法時不指定這些參數(shù)的值,就使用保存的值。因此每次使用該方法時請明確設(shè)置這些參數(shù)。如果工作表的A列中存在重復(fù)的數(shù)值,那么需要使用FindNext方法或FindPrevious方法進(jìn)行重復(fù)搜索,如下面的代碼所示。#001 Sub RngFindNext()#002 Dim StrFind As String#003 Dim Rng As Range#004 Dim FindAddress As String#005 StrFind = InputBox(請輸入要查找的值:)#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:=xlByRows, _#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 End Sub代碼解析:RngFindNext過程在工作表Sheet1的A列中查找InputBox函數(shù)對話框中所輸入的值,并將查到單元格底色設(shè)置成黃色。第8行到第17行代碼使用Find方法在工作表Sheet1的A列中查找。第16行代碼將查找到的第一個單元格地址賦給字符串變量FindAddress。第18行代碼將查找到的單元格底色設(shè)置成黃色。第19行代碼使用FindNext方法進(jìn)行重復(fù)搜索。FindNext方法繼續(xù)執(zhí)行用Find方法啟動的搜索。查找下一個匹配相同條件的單元格并返回代表單元格的Range對象,語法如下:expression.FindNext(After)參數(shù)expression是必需的,返回一個Range對象。參數(shù)After是可選的,指定一個單元格,查找將從該單元格之后開始。第20行代碼如果查找到的單元格地址等于字符串變量FindAddress所記錄的地址,說明A列已搜索完畢,結(jié)束查找過程。運(yùn)行RngFindNext過程,在InputBox函數(shù)輸入框中輸入“196.01”后結(jié)果如圖 51所示。圖 51使用FindNext方法重復(fù)搜索還可以使用FindPrevious方法進(jìn)行重復(fù)搜索,F(xiàn)indPrevious方法的語法如下:expression.FindPrevious(After)FindPrevious方法和FindNext方法唯一的區(qū)別是FindPrevious方法查找匹配相同條件的前一個單元格而FindNext方法是查找匹配相同條件的下一個單元格。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* Then#009 .Range(A & a) = rng.Text#010 a = a + 1#011 End If#012 Next#013 End With#014 End Sub代碼解析:RngLike過程使用For Each.Next語句和Like運(yùn)算符在單元格區(qū)域B1:E10000中搜索含有“a”字符的單元格,找到匹配單元格以后將單元格的值寫入到A列中。第6行代碼使用ClearContents方法清除A列區(qū)域的數(shù)據(jù)。第7行代碼使用For Each.Next語句在單元格區(qū)域B1:E10000中循環(huán)。第8行代碼使用Like運(yùn)算符在單元格區(qū)域B1:E10000中搜索含有“a”字符的單元格。Like運(yùn)算符用來比較兩個字符串,語法如下:result = string Like pattern參數(shù)string是必需的,字符串表達(dá)式。參數(shù)pattern是必需的,字符串表達(dá)式。如果string與pattern匹配,則result為True;如果不匹配,則result為False。但是如果string或pattern 中有一個為Null,則result 為 Null。參數(shù)pattern可以使用通配符、字符串列表或字符區(qū)間的任何組合來匹配字符串。表格 51列出pattern中允許的字符以及它們與什么進(jìn)行匹配。pattern中的字符符合string中的字符?任何單一字符*零個或多個字符#任何一個數(shù)字 (09)charlistcharlist中的任何單一字符!charlist不在charlist中的任何單一字符表格 51pattern中的匹配字符串第9行代碼將找到的匹配單元格的值寫入到A列中。運(yùn)行RngLike過程結(jié)果如圖 52所示。圖 52使用Like運(yùn)算符進(jìn)行模式匹配查找技巧6 替換單元格內(nèi)字符串如果需要替換單元格內(nèi)指定的字符串,那么使用Range對象的Replace方法,如下面的代碼所示。#001 Sub RngReplace()#002 Range(A1:A5).Replace 通州, 南通#003 End Sub代碼解析:RngReplace過程將工作表A1:A5單元格中的“通州”字符串替換成“南通”字符串。應(yīng)用于Range對象的Replace方法替換指定區(qū)域內(nèi)單元格中的字符,語法如下:expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)其中參數(shù)expression是必需的,返回一個Range對象。參數(shù)What是必需的,要搜索的字符串。參數(shù)Replacement是必需的,替換的字符串。運(yùn)行RngReplace過程前工作表如圖 61所示,運(yùn)行RngReplace過程后結(jié)果如圖 62所示。圖 61替換前單元格圖 62替換后單元格技巧7 復(fù)制單元格區(qū)域在實(shí)際操作中,經(jīng)常需要復(fù)制指定的單元格區(qū)域到另外一個單元格區(qū)域。要復(fù)制指定單元格區(qū)域到其他位置,使用Range對象的Copy方法,如下面的代碼所示。#001 Sub RangeCopy()#002 Application.DisplayAlerts = False#003 Sheet1.Range(A1).CurrentRegion.Copy Sheet2.Range(A1)#004 Application.DisplayAlerts = True#005 End Sub代碼解析:RangeCopy過程將如圖 71所示的Sheet1工作表中A1單元格的當(dāng)前區(qū)域復(fù)制到Sheet2工作表中以A1單元格為左上角單元格的區(qū)域,如圖 72所示。圖 71需復(fù)制的數(shù)據(jù)表圖 72復(fù)制結(jié)果Range對象的Copy方法的語法如下:Copy(Destination)參數(shù)Destination表示復(fù)制單元格區(qū)域的目標(biāo)區(qū)域,如果省略該參數(shù),Excel將把該區(qū)域復(fù)制到剪貼板中。使用Copy方法復(fù)制單元格區(qū)域時,也復(fù)制了該單元格區(qū)域的格式,如圖 72所示。復(fù)制單元格區(qū)域時,如果目標(biāo)區(qū)域?yàn)榉强諉卧駞^(qū)域,Excel將顯示如圖 73所示的消息框提示是否替換單元格內(nèi)容,可以設(shè)置Application.DisplayAlerts屬性值為False,使復(fù)制時不出現(xiàn)該消息框。圖 73替換對話框第2行代碼通常復(fù)制單元格區(qū)域的操作不會將單元格區(qū)域的列寬大小同時復(fù)制,如圖 72所示。如果希望在復(fù)制單元格區(qū)域的同時,也復(fù)制源區(qū)域的列寬大小,可以使用下面的代碼。#001 Sub CopyWithSameColumnWidths()#002 Sheet1.Range(A1).CurrentRegion.Copy#003 With Sheet3.Range(A1)#004 .PasteSpecial xlPasteColumnWidths#005 .PasteSpecial xlPasteAll#006 End With#007 Application.CutCopyMode = False#008 End Sub代碼解析:第4行代碼使用Range對象的PasteSpecial方法選擇性粘貼剪貼板中的Range對象的列寬。第5行代碼粘貼剪貼板中的Range對象全部內(nèi)容。第7行代碼取消應(yīng)用程序復(fù)制模式。應(yīng)用于Range對象的PasteSpecial方法將剪貼板中的Range對象粘貼到指定區(qū)域,在粘貼時可以有選擇的粘貼對象的部分屬性。其語法如下:PasteSpecial(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)證xlPasteValues-4163數(shù)值xlPasteValuesAndNumberFormats12值和數(shù)字格式表格 71XlPasteType 常量參數(shù)Operation指定粘貼操作。可為表格 72所列的XlPasteSpecialOperation常量之一。常量值描述xlPasteSpecialOperationNone-4142無(默認(rèn)值)xlPasteSpecialOperationAdd2加xlPasteSpecialOperationSubtract3減xlPasteSpecialOperationMultiply4乘xlPasteSpecialOperationDivide5除表格 72XlPasteSpecialOperation常量參數(shù)SkipBlanks指示是否跳過空單元格,若參數(shù)值為True,則不將剪貼板上區(qū)域中的空白單元格粘貼到目標(biāo)區(qū)域中。默認(rèn)值為False。參數(shù)Transpose指示是否進(jìn)行轉(zhuǎn)置,若參數(shù)值為True,則粘貼區(qū)域時轉(zhuǎn)置行和列。默認(rèn)值為False。運(yùn)行CopyWithSameColumnWidths過程后,Sheet3工作表如圖 74所示,目標(biāo)區(qū)域的各列列寬與源區(qū)域一致。圖 74粘貼列寬后的復(fù)制結(jié)果注意 使用PasteSpecial方法時指定xlPasteAll(粘貼全部),不會粘貼列寬。技巧8 僅復(fù)制數(shù)值到另一區(qū)域如果在復(fù)制單元格區(qū)域時,僅希望復(fù)制單元格區(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過程復(fù)制工作表Sheet1中A1單元格的當(dāng)前區(qū)域的數(shù)值到工作表Sheet2的A1單元格所在區(qū)域中。第2行代碼將如圖 81所示的Sheet1中A1單元格的當(dāng)前區(qū)域進(jìn)行復(fù)制。圖 81需復(fù)制的數(shù)據(jù)表第3行代碼使用選擇性粘貼功能并指定粘貼數(shù)值,選擇性粘貼數(shù)值僅復(fù)制了單元格區(qū)域的數(shù)值,單元格區(qū)域的格式(背景顏色、字體對齊格式和邊框等)不會被復(fù)制,復(fù)制結(jié)果如圖 82所示。圖 82復(fù)制單元格區(qū)域數(shù)值8-2 直接賦值的方法除了使用Copy方法外,還可以使用直接賦值的方法,如下面的代碼所示。#001 Sub GetValueResize()#002 With Sheet1.Range(A1).CurrentRegion#003 Sheet3.Range(A1).Resize(.Rows.Count, .Columns.Count).Value = .Value#004 End With#005 End Sub代碼解析:GetValueResize過程將工作表Sheet1中的A1單元格的當(dāng)前區(qū)域的數(shù)值賦予工作表Sheet3的A1單元格所在的單元格區(qū)域。在對單元格區(qū)域直接賦值時,應(yīng)保證源區(qū)域大小與目標(biāo)區(qū)域的大小一致,如果源區(qū)域?yàn)閯討B(tài)的單元格區(qū)域,可使用Resize方法確定目標(biāo)區(qū)域。運(yùn)行GetValueResize過程,賦值結(jié)果如圖 82所示。技巧9 單元格自動進(jìn)入編輯狀態(tài)當(dāng)光標(biāo)選擇單元格時無需雙擊,自動進(jìn)入編輯狀態(tài),如下面的代碼所示。#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事件過程,當(dāng)選擇工作表C列有數(shù)據(jù)單元格時自動進(jìn)入編輯狀態(tài)。第2、3行代碼設(shè)置SelectionChange事件的觸發(fā)條件,利用Target參數(shù)的Column屬性和Count屬性將事件的觸發(fā)條件限制在C列并且只有在選擇一個單元格時才發(fā)生。第4行代碼使用SendKeys方法發(fā)送一個F2鍵到應(yīng)用程序,等同于選擇單元格后按F2鍵,使單元格進(jìn)入編輯狀態(tài)。關(guān)于SendKeys方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論