Excel_VBA_編程教程excel高級(jí)教程==_第1頁
Excel_VBA_編程教程excel高級(jí)教程==_第2頁
Excel_VBA_編程教程excel高級(jí)教程==_第3頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Excel_VBA_編程教程(完整版)excel高級(jí)教程VBA-Excel編程概念之:【單元格和區(qū)域】一、如何引用單元格和區(qū)域使用VisualBasic的普通任務(wù)是指定單元格或單元格區(qū)域,然后對(duì)該單元格或單元格區(qū)域進(jìn)行一些操作,如輸入公式或更改格式。通常用一條語句就能完成操作,該語句可標(biāo)識(shí)單元格,還可更改某個(gè)屆性或應(yīng)用某個(gè)方法。在VisualBasic中,Range對(duì)象既可表示單個(gè)單元格,也可表示單元格區(qū)域。下列主題說明了標(biāo)識(shí)和處理Range對(duì)象最常用的方法。用A1樣式記號(hào)引用單元格和單元格區(qū)域用編號(hào)引用單元格通過使用行列編號(hào),可用Cells屆性來引用單個(gè)單元格。該屆性返回代表單個(gè)單元格的Ra

2、nge對(duì)象。下例中,Cells(6,1)返回Sheet1上的單元格A6,然后將Value屆性設(shè)置為10??墒褂肦ange屆性來引用A1引用樣式中的單元格或單元格區(qū)域。下述子程序?qū)卧駞^(qū)域A1:D5的字體設(shè)置為加粗。SubFormatRange()Workbooks("Book1").Sheets("Sheet1").Range("A1:D5")_.Font.Bold=TrueEndSub下表演示了使用Range屆性的一些A1樣式引用。引用含義Range("A1")單元格A1Range("A1:B5&qu

3、ot;)從單元格A1到單元格B5的區(qū)域Range("C5:D9,G9:H16")多塊選定區(qū)域Range("A:A")A列Range("1:1")第一行Range("A:C")從A列到C列的區(qū)域Range("1:5")從第一行到第五行的區(qū)域Range("1:1,3:3,8:8")第1、3和8行Range("A:A,C:C,F:F")A、C和F列SubEnterValue()Worksheets("Sheet1").Cells(6,1).V

4、alue=10EndSub因?yàn)榭捎米兞刻娲幪?hào),所以Cells屆性非常適合丁在單元格區(qū)域中循環(huán),如下例所示。SubCycleThrough()DimCounterAsIntegerForCounter=1To20Worksheets("Sheet1”).Cells(Counter,3).Value=CounterNextCounterEndSub注意如果要同時(shí)更改某一單元格區(qū)域中所有單元格的屆性或?qū)ζ鋺?yīng)用方法,可使用Range屆性。有關(guān)詳細(xì)信息,請(qǐng)參閱用A1樣式記號(hào)引用單元格。引用行和列可用Rows屆性或Columns屆性來處理整行或整列。這兩個(gè)屆性返回代表單元格區(qū)域的Range對(duì)象

5、。下例中,用Rows(1)返回Sheet1上的第一行,然后將單元格區(qū)域的Font對(duì)象的Bold屆性設(shè)置為True。SubRowBold()Worksheets("Sheet1”).Rows(1).Font.Bold=TrueEndSub下表舉例說明了使用Rows和Columns屆性的一些行和歹U的引用。引用含義Rows(1)第一行Rows工作表上所有的行Columns(1)第一列Columns("A")第一列Columns工作表上所有的歹0若要同時(shí)處理若干行或歹0,請(qǐng)創(chuàng)建一個(gè)對(duì)象變量并使用Union方法,將對(duì)Rows屆性或Columns屆性的多個(gè)調(diào)用組合起來。下例

6、將活動(dòng)工作簿中第一張工作表上的第一行、第三行和第五行的字體設(shè)置為加粗。SubSeveralRows()Worksheets("Sheet1”).ActivateDimmyUnionAsRangeSetmyUnion=Union(Rows(1),Rows(3),Rows(5)myUnion.Font.Bold=TrueEndSub用快捷記號(hào)引用單元格可用方括號(hào)將A1引用樣式或命名區(qū)域括起來,作為Range屆性的快捷方式:這樣就不必鍵入單詞“Rang戢使用引號(hào),如下例所示。SubClearRange()Worksheets("Sheet1").A1:B5.ClearC

7、ontentsEndSubSubSetValue()MyRange.Value=30EndSub引用命名區(qū)域用名稱比用A1樣式記號(hào)更容易標(biāo)識(shí)單元格區(qū)域。若要命名選定的單元格區(qū)域,請(qǐng)單擊編輯欄左端的名稱框,鍵入名稱,再按Enter。引用命名區(qū)域下例引用了名為“MyBook.xls的工作簿中的名為“MyRange的單元格區(qū)域。SubFormatRange()Range("MyBook.xls!MyRange").Font.Italic=TrueEndSub下例引用名為“Report.xls的工作簿中的特定工作表單元格區(qū)域“Sheet1!SalesSubFormatSales()

8、Range("Report.xlsSheet1!Sales").BorderAroundWeight:=xlthinEndSub若要選定命名區(qū)域,請(qǐng)用GoTo方法,該方法將激活工作簿和工作表,然后選定該區(qū)域。SubClearRange()Application.GotoReference:="MyBook.xls!MyRange"Selection.ClearContentsEndSub下例顯示對(duì)丁活動(dòng)工作簿將如何編寫相同的過程。SubClearRange()Application.GotoReference:="MyRange"Se

9、lection.ClearContentsEndSub在命名區(qū)域中的單元格上循環(huán)下例用ForEach.Next循環(huán)語句在命名區(qū)域中的每一個(gè)單元格上循環(huán)。如果該區(qū)域中的任一單元格的值超過limit的值,就將該單元格的顏色更改為黃色。SubApplyColor()ConstLimitAsInteger=25ForEachcInRange("MyRange")Ifc.Value>LimitThenc.Interior.ColorIndex=27EndIfNextcEndSub相對(duì)丁其他單元格來引用單元格處理相對(duì)丁另一個(gè)單元格的某一單元格的常用方法是使用Offset屬性。下例

10、中,將位丁活動(dòng)工作表上活動(dòng)單元格下一行和右邊三列的單元格的內(nèi)容設(shè)置為雙下劃線格式。SubUnderline()ActiveCell.Offset(1,3).Font.Underline=xlDoubleEndSub注意可錄制使用Offset屆性(而不是絕對(duì)引用)的宏。在具”菜單上,指向宏”,再單擊錄制新宏”,然后單擊確定”,再單擊錄制宏工具欄上的相對(duì)引用”按鈕。若要在單元格區(qū)域中循環(huán),請(qǐng)?jiān)谘h(huán)中將變量與Cells屆性一起使用。下例以5為步長,用5至U100之間的值填充第三列的前20個(gè)單元格。變量counter用作Cells屆性的行號(hào)。SubCycleThrough()DimcounterAsI

11、ntegerForcounter=1To20Worksheets("Sheet1").Cells(counter,3).Value=counter*5NextcounterEndSub用Range對(duì)象引用單元格如果將對(duì)象變量設(shè)置為Range對(duì)象,即可用變量名方便地操作單元格區(qū)域。下述過程創(chuàng)建了對(duì)象變量myRange,然后將活動(dòng)工作簿中Sheet1上的單元格區(qū)域A1:D5賦予該變量。隨后的語句用該變量代替該區(qū)域?qū)ο?,以修改該區(qū)域的屆性。SubRandom()DimmyRangeAsRangeSetmyRange=Worksheets("Sheet1").R

12、ange("A1:D5")myRange.Formula="=RAND()"myRange.Font.Bold=TrueEndSub引用工作表上的所有單元格如果對(duì)工作表應(yīng)用Cells屆性時(shí)不指定編號(hào),該屆性將返回代表工作表上所有單元格的Range對(duì)象。下述Sub過程活除活動(dòng)工作簿中Sheet1上的所有單元格的內(nèi)容。SubClearSheet()Worksheets("Sheet1").Cells.ClearContentsEndSub引用多個(gè)單元格區(qū)域使用適當(dāng)?shù)姆椒梢院苋菀椎赝瑫r(shí)引用多個(gè)單元格區(qū)域??捎肦ange和Union方法引用

13、任意組合的單元格區(qū)域;用Areas屆性可引用工作表上選定的一組單元格區(qū)域。使用Range屆性通過在兩個(gè)或多個(gè)引用之間放置逗號(hào),可使用Range屆性來引用多個(gè)單元格區(qū)域。下例活除了Sheet1上三個(gè)單元格區(qū)域的內(nèi)容。SubClearRanges()Worksheets("SheetT').Range("C5:D9,G9:H16,B14:D18")._ClearContentsEndSub命名區(qū)域使得用Range屆性處理多個(gè)單元格區(qū)域更為容易。下例可在三個(gè)命名區(qū)域處丁同一工作表時(shí)運(yùn)行。SubClearNamed()Range("MyRange,You

14、rRange,HisRange").ClearContentsEndSub使用Union方法用Union方法可將多個(gè)單元格區(qū)域組合到一個(gè)Range對(duì)象中。下例創(chuàng)建了名為myMultipleRange的Range對(duì)象,并將其定義為單元格區(qū)域A1:B2和C3:D4的組合,然后將該組合區(qū)域的字體設(shè)置為加粗。SubMultipleRange()Dimr1,r2,myMultipleRangeAsRangeSetr1=Sheets("Sheet1").Range("A1:B2")Setr2=Sheets("Sheet1").Range

15、("C3:D4")SetmyMultipleRange=Union(r1,r2)myMultipleRange.Font.Bold=TrueEndSub使用Areas屆性可用Areas屆性引用選定的單元格區(qū)域或多塊選定區(qū)域中的區(qū)域集合。下述過程計(jì)算選定區(qū)域中的塊數(shù)目,如果有多個(gè)塊,就顯示一則警告消息。SubFindMultiple()IfSelection.Areas.Count>1ThenMsgBox"Cannotdothistoamultipleselection."EndIfEndSub在單元格區(qū)域中循環(huán)使用VisualBasic時(shí),經(jīng)常需要

16、對(duì)某一單元格區(qū)域內(nèi)的每個(gè)單元格運(yùn)行同一段語句。為達(dá)到這一目的,可組合循環(huán)語句和一個(gè)或多個(gè)方法來標(biāo)識(shí)每個(gè)單元格,一次針對(duì)一個(gè)單元格,并執(zhí)行該操作。在單元格區(qū)域中循環(huán)的一種方法是將For.Next循環(huán)語句與Cells屆性配合使用。使用Cells屆性時(shí),可用循環(huán)計(jì)數(shù)器(或其他變量或表達(dá)式)來替代單元格索引編號(hào)。下例中,變量counter代替了行號(hào)。此過程將在單元格區(qū)域C1:C20中循環(huán),將所有絕對(duì)值小丁0.01的數(shù)字都設(shè)置為0(零)。SubRoundToZero1()ForCounter=1To20SetcurCell=Worksheets("Sheet1”).Cells(Counter,

17、3)IfAbs(curCell.Value)<0.01ThencurCell.Value=0NextCounterEndSub在單元格區(qū)域中循環(huán)的另一種簡便方法是使用ForEach.Next循環(huán)語句和由Range屆性指定的單元格集合。在每一次循環(huán)過程中,VisualBasic都為下一個(gè)單元格自動(dòng)設(shè)置一個(gè)對(duì)象變量。下述過程在單元格區(qū)域A1:D10中循環(huán),將所有絕對(duì)值小丁0.01的數(shù)字都設(shè)置為0(零)。SubRoundToZero2()ForEachcInWorksheets("Sheet1").Range("A1:D10").CellsIfAbs(c

18、.Value)<0.01Thenc.Value=0NextEndSub如果不知道要循環(huán)的單元格區(qū)域的邊界,可用CurrentRegion屆性返回活動(dòng)單元格周圍的區(qū)域。例如,下述過程在工作表上運(yùn)行時(shí),將在活動(dòng)單元格周圍的區(qū)域內(nèi)循環(huán),將所有絕對(duì)值小丁0.01的數(shù)字都設(shè)置為0(零)。SubRoundToZero3()ForEachcInActiveCell.CurrentRegion.CellsIfAbs(c.Value)<0.01Thenc.Value=0NextEndSub選定和激活單元格使用MicrosoftExcel時(shí),通常要先選定單元格或單元格區(qū)域,然后執(zhí)行某一操作,如設(shè)置單元

19、格的格式或在單元格中輸入數(shù)值。但在VisualBasic中,通常在修改單元格之前不必先選定它們。例如,如果要用VisualBasic在單元格D6中輸入公式,就不必先選定單元格D6,而只需返回Range對(duì)象,然后將該對(duì)象的Formula屆性設(shè)置為所需的公式,如下例所示。SubEnterFormula()Worksheets("Sheet1").Range("D6").Formula="=SUM(D2:D5)"EndSub有關(guān)使用其他方法在不選定單元格的情況下對(duì)其進(jìn)行控制的示例,請(qǐng)參閱如何引用單元格和區(qū)域。使用Select方法和Selec

20、tion屆性Select方法激活工作表和工作表上的對(duì)象;而Selection屆性返回代表活動(dòng)工作簿中活動(dòng)工作表上的當(dāng)前選定區(qū)域的對(duì)象。在成功使用Selection屆性之前,必須先激活工作簿,并激活或選定工作表,然后用Select方法選定單元格區(qū)域(或其他對(duì)象)。宏錄制器經(jīng)常創(chuàng)建使用Select方法和Selection屆性的宏。下述Sub過程是用宏錄制器創(chuàng)建的,該過程演示了Select方法和Selection屆性在一起使用的方法。SubMacro1()Sheets("Sheet1").SelectRange("A1").SelectActiveCell.F

21、ormulaR1C1="Name"Range("B1").SelectActiveCell.FormulaR1C1="Address"Range("A1:B1").SelectSelection.Font.Bold=TrueEndSub下例完成同樣的任務(wù),但不激活或選定工作表或單元格。SubLabels()WithWorksheets("Sheet1").Range("AT')="Name".Range("BT')="Addres

22、s".Range("A1:B1").Font.Bold=TrueEndWithEndSub選定活動(dòng)工作表上的單元格如果用Select方法選定單元格,應(yīng)注意Select方法僅用丁活動(dòng)工作表。如果從模塊中運(yùn)行Sub過程,必須先在該過程中激活工作表,然后才能用Select方法選定單元格區(qū)域,否則該方法將失敗。例如,下述過程在活動(dòng)工作簿中將Sheet1中的一行復(fù)制到Sheet2上。SubCopyRow()Worksheets("Sheet1”).Rows(1).CopyWorksheets("Sheet2”).SelectWorksheets(&quo

23、t;Sheet2”).Rows(1).SelectWorksheets("Sheet2”).PasteEndSub激活選定區(qū)域內(nèi)的單元格可用Activate方法激活選定區(qū)域內(nèi)的單元格。即使選定了單元格區(qū)域,也只能有一個(gè)活動(dòng)單元格。下述過程選定了一個(gè)單元格區(qū)域,然后激活該區(qū)域內(nèi)的一個(gè)單元格,但并不改變選定區(qū)域。SubMakeActive()Worksheets("Sheet1”).ActivateRange("A1:D4").SelectRange("B2").ActivateEndSub如果要處理若干工作表上相同位置的單元格區(qū)域,可用

24、Array函數(shù)選定兩張或多張工作表。下例設(shè)置三維單元格區(qū)域的邊框格式。SubFormatSheets()Sheets(Array("Sheet2","Sheet3","Sheet5").SelectRange("A1:HT').SelectSelection.Borders(xlBottom).LineStyle=xlDoubleEndSub下例應(yīng)用FillAcrossSheets方法,在活動(dòng)工作簿中,將Sheet2上的單元格區(qū)域的格式和任何數(shù)據(jù)復(fù)制到該工作簿中所有工作表上的相應(yīng)區(qū)域中。SubFillAll()Worksheets("Sheet2").Range("A1:HT')_.Borders(xlBottom).LineStyle=xlDoubleWorksheets.FillAcrossSheets(Worksheets("Sheet2")_.Range("A1:HT')EndSub處理活動(dòng)單元格ActiveCell屆性返回代表活動(dòng)單元格的Range對(duì)象。可對(duì)活動(dòng)單元格應(yīng)用Range對(duì)象的任

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論