版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章宏與VBA程序設(shè)計(jì)Excel數(shù)據(jù)處理與統(tǒng)計(jì)初步第4版認(rèn)識(shí)在學(xué)校,一般都要學(xué)習(xí)類(lèi)似于C語(yǔ)言、VB、VFP之類(lèi)的編程語(yǔ)言;一般都要編寫(xiě)類(lèi)似于排序、查詢(xún)之類(lèi)的程序。但工后,絕大多數(shù)人都不會(huì)再用這樣的程序了。然而,這對(duì)Excel是個(gè)例外!這些程序不僅能減化繁雜的工作,而且還能使工作自動(dòng)化。在EXCEL中:VBA能夠使那些枯燥反復(fù)的工作變得高效、準(zhǔn)確而自動(dòng)化。若想建立自已的辦公自動(dòng)化數(shù)據(jù)管理系統(tǒng),需要用到VBA程序。若想成為一個(gè)真正的Excel專(zhuān)家,需要很好地掌握VBA程序設(shè)計(jì)。本章學(xué)習(xí)目標(biāo)1、了解Excel宏的基本知識(shí)2、掌握宏的錄制、編寫(xiě)和運(yùn)行方法3、了解VBA程序的基本知識(shí)4、掌握VBA的基本數(shù)據(jù)類(lèi)型5、掌握VBA宏與函數(shù)的編寫(xiě)和調(diào)用方法6、掌握VBA條件、循環(huán)程序的設(shè)計(jì)方法7、了解VBA自動(dòng)宏11.1Excel宏宏的概念宏是用VBA程序設(shè)計(jì)語(yǔ)言編寫(xiě)或錄制的程序,其中保存有一系列Excel的命令,可以被多次重復(fù)使用。宏可以自動(dòng)執(zhí)行復(fù)雜的任務(wù),減少完成任務(wù)所需的步驟。VBA即VisualBasicforApplications,它是VisualBasic的一個(gè)派生體,它有針對(duì)性地對(duì)VisualBasic進(jìn)行了優(yōu)化和設(shè)置。兩者的主要區(qū)別在于:VisualBasic開(kāi)發(fā)的應(yīng)用程序可以獨(dú)立在Windows系統(tǒng)中運(yùn)行,而用VBA開(kāi)發(fā)的程序只能在提供它的應(yīng)用程序中運(yùn)行。在Excel中,可以用Excel提供的宏錄制工具錄制宏程序,也可以使用它提供的“VisualBasic編輯器”直接編寫(xiě)宏。11.1Excel宏2、錄制宏宏錄制器是Excel提供的一種軟件工具,它能夠?qū)⒂脩?hù)的操作過(guò)程記錄下來(lái),并自動(dòng)將所記錄的操作轉(zhuǎn)換成為VBA程序代碼。對(duì)于經(jīng)常重復(fù)進(jìn)行的操作過(guò)程,可以通過(guò)宏錄制器將它記錄下來(lái),當(dāng)需要再次進(jìn)行這些操作時(shí),只需要運(yùn)行錄制的宏,Excel就能自動(dòng)完成這些重復(fù)的操作。說(shuō)明:當(dāng)錄制宏的工作開(kāi)始后,所有的操作步驟都將被記錄在宏中,所以應(yīng)盡量減少不必要的或錯(cuò)誤的操作,如果在錄制宏時(shí)出現(xiàn)失誤,更正失誤的操作也會(huì)記錄在宏中。11.1Excel宏錄制宏的案例【例11.1】某班主任共管理10個(gè)班級(jí)的學(xué)生,要為每個(gè)班級(jí)建立學(xué)生檔案,檔案表結(jié)構(gòu)如圖所示。11.1Excel宏建立學(xué)生檔案宏選擇“工具”|“宏”|“錄制新宏”菜單項(xiàng),在彈出的下示對(duì)話框中輸入宏名字“學(xué)生檔案”單擊“確定”
11.1Excel宏3.輸入表格內(nèi)容(1)單擊A1單元格,在其中輸入“2001級(jí)學(xué)生檔案”;(2)單擊A2單元格,在其中輸入“學(xué)號(hào)”;(3)單擊B2單元格,在其中輸入“姓名”;(4)單擊C2單元格,在其中輸入“班級(jí)”;(5)單擊D2單元格,在其中輸入“性別”;(6)單擊E2單元格,在其中輸入“籍貫”;(7)單擊F2單元格,在其中輸入“寢室”;(8)單擊G2單元格,在其中輸入“電話號(hào)碼”;(13)選擇A1:G1,然后單擊工具條中的跨列居中按鈕。(14)選擇“工具”|“宏”|“停止錄制”菜單命令。
11.1Excel宏4.停止錄制,查看錄制的宏選擇“工具”|“宏”|“停止錄制”選擇“工具”|“宏”|“宏”菜單項(xiàng),會(huì)顯示“宏”對(duì)話框。選中其中的“學(xué)生檔案”,單擊“編輯”。11.1Excel宏宏代碼1 Sub學(xué)生檔案()2 '學(xué)生檔案Macro3 '宏由dk錄制,時(shí)間:2005-4-204 '快捷鍵:Ctrl+s5 Range("A1").Select6 ActiveCell.FormulaR1C1="2001級(jí)一班學(xué)生檔案"7 Range("A2").Select8 ActiveCell.FormulaR1C1="學(xué)號(hào)"9 Range("B2").Select10 ActiveCell.FormulaR1C1="姓名"11 Range("C2").Select12 ActiveCell.FormulaR1C1="班級(jí)“13 Range("D2").Select14 ActiveCell.FormulaR1C1="性別"15 Range("E2").Select16 ActiveCell.FormulaR1C1="籍貫"17 Range("F2").Select18 ActiveCell.FormulaR1C1="寢室"11.1Excel宏19 Range("G2").Select20 ActiveCell.FormulaR1C1="電話號(hào)碼"21 Range("A1:G1").Select22 WithSelection23 .HorizontalAlignment=xlCenter24 .VerticalAlignment=xlBottom25 .WrapText=False26 .Orientation=027 .AddIndent=False28 .ShrinkToFit=False29 EndWith30 Selection.Merge31 EndSub31 EndSub11.1Excel宏5、宏的結(jié)構(gòu)Sub宏名()
命令代碼1
命令代碼2
……EndSub6、With的結(jié)構(gòu)WithSelection
……
EndWith11.1Excel宏7、宏的保存保存在個(gè)人宏工作簿“Personal.xls”中。保存在專(zhuān)門(mén)保存宏的“新的工作簿”中。保存在建立宏的當(dāng)前工作薄中。11.1Excel宏8、宏的執(zhí)行通過(guò)快捷鍵運(yùn)行宏通過(guò)對(duì)話框運(yùn)行宏通過(guò)自定義工具按鈕運(yùn)行宏通過(guò)圖形控件或窗體命令按鈕運(yùn)行宏通過(guò)自定義菜單運(yùn)行宏(以后再講)11.2VBA程序設(shè)計(jì)基礎(chǔ)1、數(shù)據(jù)類(lèi)型的概念在計(jì)算機(jī)中,數(shù)據(jù)也是按不同的類(lèi)別進(jìn)行運(yùn)算和保存的,人們稱(chēng)之為數(shù)據(jù)類(lèi)型。同種類(lèi)型的數(shù)據(jù)占用相同大小的存儲(chǔ)空間,相互之間可以進(jìn)行計(jì)算、比較或賦值等操作;不同類(lèi)型的數(shù)據(jù)占用的存儲(chǔ)空間大小不一定相同,且相互之間不能進(jìn)行計(jì)算和比較等操作。2、VBA的數(shù)據(jù)類(lèi)型(1)常量
數(shù)值常量,如:1,2,65,98.65等11.2VBA程序設(shè)計(jì)基礎(chǔ)字符及字符串常量
字符類(lèi)型的常量稱(chēng)為字符常量,字符常量要用定界符雙引號(hào)(“
”)界定。例如,“d”、“5”、“A”等都是字符常量。符號(hào)常量
Const常量名=常量值例如,ConstPI=3.14,ConstABC="OK!China!"11.2VBA程序設(shè)計(jì)基礎(chǔ)(2)變量變量是在程序運(yùn)行期間其值可以發(fā)生變化的數(shù)據(jù)。例如:1 DimA,BAsInteger2 A=13 B=24 A=4+bA=3A在本程序段中有3個(gè)不同的值,這就是變!11.2VBA程序設(shè)計(jì)基礎(chǔ)VBA數(shù)值數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型存儲(chǔ)空間數(shù)據(jù)范圍Byte1字節(jié)0~255Boolean2字節(jié)True或falseInteger2字節(jié)-32768~32767Long4字節(jié)-2147483648~2147483647Single4字節(jié)負(fù)數(shù):-3.402823E38~-1.401298E-45正數(shù):1.401298E-45~3.402823E38Double8字節(jié)負(fù)數(shù):1.79769313486232E308~-4.94065645841247E-324正數(shù):4.94065645841247E-324~1.79769313486232E308Currency8字節(jié)-922337203685477.5808~922337203685477.5807Date8字節(jié)0100年1月1日到9999年12月31日Object4字節(jié)任何對(duì)象引用String字符長(zhǎng)度分為定長(zhǎng)和可變長(zhǎng)度兩種,可變長(zhǎng)可達(dá)0~20億個(gè)字符,定長(zhǎng)最多65536個(gè)字符Variant(數(shù)字)16字節(jié)任何數(shù)字,最大達(dá)到double的數(shù)值范圍Variant(字符)22+字符串長(zhǎng)度約0~20億11.2VBA程序設(shè)計(jì)基礎(chǔ)字符串類(lèi)型在VBA中有兩種類(lèi)型的字符串,變長(zhǎng)與定長(zhǎng)的字符串。Dims1AsString//變長(zhǎng)類(lèi)型Dims2AsString*10//定長(zhǎng)類(lèi)型s1="dddkdk"s2="d1234567890sssss"11.2VBA程序設(shè)計(jì)基礎(chǔ)布爾類(lèi)型布爾類(lèi)型是比較運(yùn)算或邏輯運(yùn)算的結(jié)果值,它只有兩個(gè)取值:True和False。True是比較結(jié)果為真時(shí)的值,F(xiàn)alse是比較結(jié)果為假時(shí)的值。
DimAAsBooleanDimBAsBooleanA=3>5B=True11.2VBA程序設(shè)計(jì)基礎(chǔ)日期類(lèi)型日期型數(shù)據(jù)用于保存日期,占8個(gè)字節(jié)的存儲(chǔ)空間,以浮點(diǎn)數(shù)值形式保存日期,可以表示的日期范圍從公元100年1月1日到公元9999年12月31日,而時(shí)間可以從0:00:00到23:59:59。日期文字以“#”作界定符。Dimd1,d2AsDated1=#1Jul98# 'D1的取值是1998年7月1號(hào)d2=#12/2/2000# 'D2的值是2000年12月2號(hào)11.2VBA程序設(shè)計(jì)基礎(chǔ)變體數(shù)據(jù)類(lèi)型Variant是一種特殊的數(shù)據(jù)類(lèi)型,除了定長(zhǎng)String數(shù)據(jù)及用戶(hù)定義類(lèi)型外,它可以包含任何種類(lèi)的數(shù)據(jù)。DimarAsVariantar=12ar="stringtype"ar="abc"&arar=12.23在本例中,ar的類(lèi)型是不定的!11.2VBA程序設(shè)計(jì)基礎(chǔ)數(shù)組在VBA中,可以聲明一個(gè)數(shù)組來(lái)代表一組具有相同數(shù)據(jù)類(lèi)型的數(shù)據(jù),它就是數(shù)組。假設(shè)一個(gè)班有20個(gè)同學(xué),每個(gè)同學(xué)有5門(mén)課程,可以定義一個(gè)20行5列的二維數(shù)組來(lái)保存他們的成績(jī)Dimstu(1To20,1To5)AsSingle這條命令定義了一個(gè)二維表格,如下所示。stu(1,1)=78stu(1,2)=90stu(1,3)=87stu(1,4)=88stu(1,5)=76數(shù)組訪問(wèn)方法7811.2VBA程序設(shè)計(jì)基礎(chǔ)對(duì)象、屬性和方法計(jì)算機(jī)程序設(shè)計(jì)中的對(duì)象是從現(xiàn)實(shí)世界中抽象出來(lái)的,它與現(xiàn)實(shí)世界中的對(duì)象具有相同的含義。對(duì)象具有屬性和方法兩種特性。年齡:30學(xué)歷:碩士身高:173cm體重:69公斤說(shuō)自己的年齡學(xué)習(xí)授課……李立屬性方法對(duì)象屬性語(yǔ)法規(guī)則李立.年齡=32李立.體重=70方法的調(diào)用也要按這種語(yǔ)法規(guī)則李立.學(xué)習(xí)李立.授課Excel對(duì)象示例11.2VBA程序設(shè)計(jì)基礎(chǔ)宏代碼中的對(duì)象
Sub宏4()1Range("E6").Select2ActiveCell.FormulaR1C1="eqw"3Range("E6:E7").Select4Selection.Font.Bold=True5Selection.Font.Italic=True6WithSelection.Font7.Name="華文楷體"8.Size=129.Shadow=False10.Underline=xlUnderlineStyleNone11.ColorIndex=xlAutomatic12EndWith13Selection.Font.ColorIndex=314EndSub11.3
子程序子程序的兩種結(jié)構(gòu)子程序是VBA的最小程序單位,它必須獨(dú)立存在,但在一個(gè)子程序中可以調(diào)用另外一個(gè)子程序。它有兩種形式,第一種沒(méi)有參數(shù),第二種有參數(shù)Sub子程序名
……
子程序代碼
……EndSubSub子程序名(p1,p2,p3…)
……
子程序代碼
……EndSub11.3
子程序2、子程序的調(diào)用形式1)直接調(diào)用直接調(diào)用子程序名,如果有參數(shù),則在子程序后面直接寫(xiě)上調(diào)用參數(shù);2)用Call命令調(diào)用在Call命令的后面寫(xiě)上了程序的名字,如果子程序有參數(shù),則必須將參數(shù)寫(xiě)在括號(hào)中。11.3
子程序3、子程序調(diào)用舉例1SubMain()2HouseCalc99800,431003CallHouseCalc(380950,49500)4CircleArea(4)5CircleArea46Message7EndSubSubHouseCalc(priceAsSingle,wageAsSingle)If3*wage<=0.85*priceThenMsgBox"你的薪水不能承擔(dān)房?jī)r(jià)!"ElseMsgBox"你的薪金足以承擔(dān)房?jī)r(jià)!"EndIfEndSubSubCircleArea(RasSingle)MsgBox3.14*R*REndsubSubMessage()MsgBox"這是一個(gè)無(wú)參子程序"EndSub調(diào)用11.4自定義函數(shù)1函數(shù)結(jié)構(gòu)Function函數(shù)名([p1,p2,p3,…])[AsType]
……函數(shù)代碼
……函數(shù)名=表達(dá)式EndFunction11.4自定義函數(shù)2、定義函數(shù)的注意事項(xiàng)①函數(shù)由Function和EndFunction
語(yǔ)句所包含起來(lái)的VBA語(yǔ)句。②Function函數(shù)和Sub子程序很類(lèi)似,但函數(shù)有一個(gè)返回值。Function函數(shù)必須通過(guò)表達(dá)式調(diào)用。③如果一個(gè)Function函數(shù)沒(méi)有參數(shù),它的Function語(yǔ)句必須包含一個(gè)空的圓括號(hào)。④在函數(shù)體中,函數(shù)名至少被賦值一次。⑤函數(shù)開(kāi)頭行的[AsType]用于指定函數(shù)值的返回值類(lèi)型,如果省掉該定義,被視為Variant類(lèi)型。11.4自定義函數(shù)3、【例11.3】
編寫(xiě)一個(gè)計(jì)算圓面積的簡(jiǎn)單函數(shù),圓半徑作為函數(shù)參數(shù)。FunctionCircleArea(rAsSingle)AsSingle
CircleArea=3.14*r*rEndFunction11.4自定義函數(shù)4、函數(shù)調(diào)用函數(shù)只能在表達(dá)式中調(diào)用。在Excel中,函數(shù)至少有以下3種調(diào)用方式。在Sub子程序中調(diào)用函數(shù)在其他函數(shù)中調(diào)用函數(shù)在Excel工作表單元格的公式中調(diào)用函數(shù)11.4自定義函數(shù)5、自定義函數(shù)案例假設(shè)有一個(gè)學(xué)生成績(jī)表如圖所示?,F(xiàn)要計(jì)算其中的綜合成績(jī),在本例中,綜合成績(jī)的計(jì)算方法為:綜合成績(jī)=考試科目×0.7+考查科目×0.3。編寫(xiě)計(jì)算綜合成績(jī)的函數(shù)ss。11.4自定義函數(shù)計(jì)算綜合成績(jī)的自定義函數(shù)Functionss(ks1,ks2,kc1,kc2,s,c)ss=(ks1+ks2)*s+(kc1+kc2)*cEndFunction該函數(shù)定義出來(lái)之后,可在編寫(xiě)它的任何工作表中調(diào)用,與調(diào)用Excel內(nèi)置函數(shù)無(wú)任何差別。比如,在上圖的G5中輸入公式=ss(C5,D5,E5,F5,$E$2,$E$3)然后把該公式向下填充復(fù)制到最后一位同學(xué)的“綜合成績(jī)”單元格,這樣就可計(jì)算出所有同學(xué)的綜合成績(jī)。
11.5VBA選擇結(jié)構(gòu)1、VBA程序執(zhí)行的方式在一般情況下,一個(gè)VBA的Sub子程序和Function函數(shù)的執(zhí)行都是從程序代碼的第一個(gè)語(yǔ)句行開(kāi)始,逐行運(yùn)行程序代碼中的語(yǔ)句,直到遇到EndSub或EndFunction來(lái)結(jié)束整個(gè)程序的執(zhí)行。有些時(shí)候,需要程序代碼按一定的條件執(zhí)行,當(dāng)條件成立的時(shí)候,執(zhí)行一部分程序代碼,條件不成立的時(shí)候執(zhí)行另外一部分程序代碼。這種功能需要用VBA的選擇結(jié)構(gòu)來(lái)實(shí)現(xiàn)。11.5VBA選擇結(jié)構(gòu)2、VBA條件語(yǔ)句的語(yǔ)法形式1:If條件Then[語(yǔ)句組1][Else語(yǔ)句組2]例如:Ifsalary>1500Thenrate=0.1Elserate=0.05
如果salary的值為2000,則rate=0.1
如果salary的值為100,則rate=0.0511.5VBA選擇結(jié)構(gòu)形式2If條件Then語(yǔ)句組1
……Else語(yǔ)句組2
……EndIfFunctionabc(a,b)Ifa>bThent=aa=bb=tEndIfabc=aEndFunction例如11.5VBA選擇結(jié)構(gòu)形式3If條件1Then
語(yǔ)句組1ElseIf條件2Then
語(yǔ)句組2
……
ElseIf條件nThen
語(yǔ)句組nElse
語(yǔ)句組n+1EndIf11.5VBA選擇結(jié)構(gòu)3、條件函數(shù)案例某汽車(chē)出租公司可為顧客提供運(yùn)送貨物的業(yè)務(wù),根據(jù)貨物的重量及路程可對(duì)運(yùn)費(fèi)進(jìn)行適當(dāng)?shù)膬?yōu)惠。設(shè)運(yùn)費(fèi)F(單位為元),重量P(單位為噸),路程S(公里)及優(yōu)惠系數(shù)(D)之間的關(guān)系式為:F=P*S*W*(1-D)。優(yōu)惠系數(shù)D與路程遠(yuǎn)近的關(guān)系如下,編寫(xiě)計(jì)算折扣的函數(shù)11.5VBA選擇結(jié)構(gòu)計(jì)算折扣的函數(shù)Functiond(s)Ifs>=1000Thend=0.1ElseIfs>=750Thend=0.07ElseIfs>=500Thend=0.05ElseIfs>=250Thend=0.02Elsed=0EndIfEndFunction11.5VBA選擇結(jié)構(gòu)調(diào)用自定義函數(shù)計(jì)算11.5VBA選擇結(jié)構(gòu)4分情況選擇語(yǔ)句SelectCase語(yǔ)句的語(yǔ)法結(jié)構(gòu)如下。SelectCase測(cè)試表達(dá)式Case表達(dá)式1
語(yǔ)句組1Case表達(dá)式2
語(yǔ)句組2
……CaseElse
語(yǔ)句組nEndSelect
11.5VBA選擇結(jié)構(gòu)Select案例某學(xué)校的職工人事數(shù)據(jù)存在Excel工作表中,如圖所示?,F(xiàn)要按職稱(chēng)提升每位職工的工資,各種職稱(chēng)的工資增長(zhǎng)情況如下:教授150、副教授130、講師100、助教80、高級(jí)工程師150、工程師140、助工90。用select語(yǔ)句編寫(xiě)計(jì)算增加工資的函數(shù)。11.5VBA選擇結(jié)構(gòu)編寫(xiě)的Seclect函數(shù)FunctionAddSalary(職稱(chēng))'職稱(chēng)作為一個(gè)參數(shù)
SelectCase職稱(chēng)
Case"教授","高級(jí)工程師"
AddSalary=150Case"副教授"
AddSalary=130Case"講師"
AddSalary=100Case"助教"
AddSalary=80Case"工程師"
AddSalary=140Case"助工"
AddSalary=90EndSelectEndFunction11.6VBA循環(huán)結(jié)構(gòu)在計(jì)算機(jī)中,一些被重復(fù)執(zhí)行的語(yǔ)句是通過(guò)循環(huán)來(lái)完成的。1、For…Next循環(huán)結(jié)構(gòu)Forcounter=startToend[step步長(zhǎng)]
循環(huán)語(yǔ)句1循環(huán)語(yǔ)句2循環(huán)語(yǔ)句3
……循環(huán)語(yǔ)句nNext[counter]11.6VBA循環(huán)結(jié)構(gòu)For循環(huán)的工作過(guò)程如下:(1)計(jì)算出start,end和s的值(這三項(xiàng)都可以是變量、表達(dá)式或常數(shù)),并把start的計(jì)算結(jié)果值賦給循環(huán)控制變量x。(2)比較x與end的計(jì)算結(jié)果,如果x的值超過(guò)了end的計(jì)算結(jié)果就停止循環(huán),執(zhí)行Next后面的語(yǔ)句。否則,執(zhí)行第3步。(3)執(zhí)行循環(huán)語(yǔ)句組中的語(yǔ)句。(4)將x中的值增加一個(gè)步長(zhǎng)值s,然后執(zhí)行第2步。11.6VBA循環(huán)結(jié)構(gòu)For循環(huán)案例某公司職工檔案數(shù)據(jù)保存在Excel工作表中,如下圖所示。該公司共有1234名職工,每月要從工資表中扣除一定的住房公積金,假設(shè)住房公積金按以下的百分比扣除。編寫(xiě)計(jì)算公積金比例的宏程序。11.6VBA循環(huán)結(jié)構(gòu)Functioncountrate(salaryAsDouble)'這個(gè)函數(shù)計(jì)算公積金的百分比
DimrateAsDoubleIfsalary>2000Then
rate=0.1ElseIfsalary>1500Thenrate=0.07ElseIfsalary>1200Then
rate=0.05ElseIfsalary>1000Then
rate=0.02ElseIfsalary>800Then
rate=0.01Else
rate=0EndIf
countrate=rateEndFunction數(shù)函的例比金積公算計(jì)11.6VBA循環(huán)結(jié)構(gòu)計(jì)算所有職工工積金的宏SubCountData()Fori=3To1236'從工作表的第3行開(kāi)始計(jì)算。第3行中的是第1位職工工資
r=countrate(Cells(i,2))'計(jì)算出第i位職工的公積金比例
Cells(i,3)=r'將第i位職工的公積金比例填入本行的第3列中
Cells(i,3).Style="Percent"'將公積金比例的格式設(shè)置為百分比
Cells(i,4)=r*Cells(i,2)'計(jì)算第1位職工的公積金并填入本行的第4列中
Cells(i,5)=Cells(i,2)-Cells(i,4)'計(jì)算第i位職工的應(yīng)發(fā)工資并填入第5列中NextEndSub11.6VBA循環(huán)結(jié)構(gòu)調(diào)用宏計(jì)算公積金11.6VBA循環(huán)結(jié)構(gòu)2While…Wend循環(huán)結(jié)構(gòu)在事先知道循環(huán)次數(shù)時(shí),用For循環(huán)方便。如果事先并不知道循環(huán)次數(shù),但知道執(zhí)行或結(jié)束循環(huán)的條件,則用Do…Loop循環(huán)或While…Wend循環(huán)。While循環(huán)的語(yǔ)法結(jié)構(gòu)如下While判定條件
語(yǔ)句1
語(yǔ)句2
……Wend11.6VBA循環(huán)結(jié)構(gòu)3Do…Loop循環(huán)結(jié)構(gòu)第一種結(jié)構(gòu)為:DoWhile判定條件
……Loop第二種結(jié)構(gòu)為:Do
……LoopWhile判定條件第三種結(jié)構(gòu)為:DoUntil判定條件
……Loop第四種結(jié)構(gòu)為:Do
……LoopUntil判定條件11.6VBA循環(huán)結(jié)構(gòu)案例在上節(jié)的For循環(huán)實(shí)例中,假設(shè)并不知道有多少位職工,在其他條件都相同的條件下,現(xiàn)用While…Wend循環(huán)結(jié)構(gòu)來(lái)計(jì)算每位職工的住房公積金比例、應(yīng)交公積金和實(shí)際發(fā)放工資。改寫(xiě)的函數(shù)如下11.6VBA循環(huán)結(jié)構(gòu)用While循環(huán)改定的函數(shù)SubCountDataB()i=3'第1位職工在第3行WhileNot(IsEmpty(Cells(i,2)))
‘從工作表的第3行開(kāi)始計(jì)算
r=countrate(Cells(i,2))
'計(jì)算出第i位職工的公積金比例
Cells(i,3)=r
'把第i位職工的公積金比例填入本行的第3列中
Cells(i,3).Style="Percent"
'把公積金比例的格式設(shè)置為百分比
Cells(i,4)=r*Cells(i,2)
'計(jì)算第1位職工的公積金并填入本行的第4列中
Cells(i,5)=Cells(i,2)-Cells(i,4)
'計(jì)算第i位職工的應(yīng)發(fā)工資并填入本行第5列中
i=i+1
'計(jì)算下一位職工的公積金WendEndSub11.6VBA循環(huán)結(jié)構(gòu)用do循環(huán)改寫(xiě)的函數(shù)SubCountDataC()i=3Dor=countrate(Cells(i,2))Cells(i,3)=rCells(i,3).Style="Percent"Cells(i,4)=r*Cells(i,2)Cells(i,5)=Cells(i,2)-Cells(i,4)i=i+1LoopUntil(IsEmpty(Cells(i,2)))EndSub
11.6VBA循環(huán)結(jié)構(gòu)4數(shù)組在循環(huán)中的應(yīng)用循環(huán)的主要功能是進(jìn)行VBA代碼的重復(fù)執(zhí)行,數(shù)組的主要功能是存儲(chǔ)大量的數(shù)據(jù)。在計(jì)算機(jī)應(yīng)用中,數(shù)組和循環(huán)相結(jié)合能夠解決許多實(shí)際問(wèn)題。例如大批量數(shù)據(jù)的排序、統(tǒng)計(jì)、檢索等功能。案例11.6VBA循環(huán)結(jié)構(gòu)某學(xué)校每年對(duì)新生都要進(jìn)行一次英語(yǔ)入學(xué)測(cè)試,以了解每位學(xué)生的英語(yǔ)能力??荚囃戤吅?,要統(tǒng)計(jì)每個(gè)分?jǐn)?shù)段的人數(shù),并根據(jù)學(xué)生的成績(jī)將他們分為A、B、C……若干個(gè)班,第1~25名同學(xué)進(jìn)入A班,第26~50名同學(xué)進(jìn)入B班,其余的以此類(lèi)推。該校每年招收的人數(shù)都有細(xì)小的差別。假設(shè)學(xué)生的英語(yǔ)測(cè)試成績(jī)?nèi)缦马?yè)圖示。
編寫(xiě)一個(gè)宏完成以下功能。自動(dòng)統(tǒng)計(jì)出各分?jǐn)?shù)段的人數(shù),并將統(tǒng)計(jì)結(jié)果保存在一個(gè)新的工作表中。對(duì)所有的考試成績(jī)進(jìn)行排序。根據(jù)排名對(duì)學(xué)生進(jìn)行分班,每個(gè)班25名學(xué)生,每個(gè)班保存在一個(gè)新的工作表中。11.6VBA循環(huán)結(jié)構(gòu)成績(jī)表本例程序代碼較多,不便PPT演示,可直接查看Excel中的宏。11.7VBA自動(dòng)宏1、概述所謂自動(dòng)宏就是指在某一特定時(shí)間自動(dòng)執(zhí)行的宏程序ExcelVBA提供了兩個(gè)非常有用的自動(dòng)運(yùn)行宏,一個(gè)是宏Auto_Open,另一個(gè)是宏Auto_Close。Auto_Open宏,在打開(kāi)它所在的工作簿時(shí),它就會(huì)自動(dòng)運(yùn)行。Auto_Close會(huì)在關(guān)閉它所在的工作薄時(shí)自動(dòng)運(yùn)行。這兩個(gè)宏常被用來(lái)完成一些自動(dòng)化工作,如打開(kāi)工作薄時(shí)啟動(dòng)自定義菜單,打開(kāi)必備的工作薄或工作表,或初始化一些數(shù)據(jù),如此等等……。關(guān)閉工作薄時(shí),完成一些結(jié)束工作,如保存數(shù)據(jù),刪除不必要的工作表等。11.7VBA自動(dòng)宏案例-Auto_openSubauto_open() '打開(kāi)工作薄時(shí)自動(dòng)運(yùn)行的宏i=3Dor=countrate(Cells(i,2))Cells(i,3)=rCells(i,3).Style="Percent"Cells(i,4)=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)內(nèi)部員工保密協(xié)議(新修訂)5篇
- 二零二五年度國(guó)際會(huì)議兼職同聲傳譯及外教聘請(qǐng)協(xié)議3篇
- 2025年香港建筑工程合同正規(guī)范本標(biāo)準(zhǔn)版6篇
- 二零二五年度城市污水處理廠承包管理服務(wù)協(xié)議4篇
- 二零二五年度大型活動(dòng)現(xiàn)場(chǎng)解說(shuō)配音合作協(xié)議4篇
- 2025年噴灌系統(tǒng)節(jié)水技術(shù)創(chuàng)新合作合同4篇
- 2025年度農(nóng)產(chǎn)品供應(yīng)鏈金融合作協(xié)議-@-1
- 二零二五年度展覽館場(chǎng)地租賃與展會(huì)組織服務(wù)合同3篇
- 2025年金融科技支付系統(tǒng)開(kāi)發(fā)與運(yùn)營(yíng)合同3篇
- 二零二五年度廚房設(shè)備租賃合同期滿(mǎn)資產(chǎn)回收合同4篇
- 茉莉花-附指法鋼琴譜五線譜
- 結(jié)婚函調(diào)報(bào)告表
- SYT 6968-2021 油氣輸送管道工程水平定向鉆穿越設(shè)計(jì)規(guī)范-PDF解密
- 冷庫(kù)制冷負(fù)荷計(jì)算表
- 肩袖損傷護(hù)理查房
- 設(shè)備運(yùn)維管理安全規(guī)范標(biāo)準(zhǔn)
- 辦文辦會(huì)辦事實(shí)務(wù)課件
- 大學(xué)宿舍人際關(guān)系
- 2023光明小升初(語(yǔ)文)試卷
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 申請(qǐng)使用物業(yè)專(zhuān)項(xiàng)維修資金征求業(yè)主意見(jiàn)表
評(píng)論
0/150
提交評(píng)論