【正文】
(4)運(yùn)行上面的宏,彈出如圖333所示的對話。 NextEnd Sub在VBA中使用Inputbox函數(shù)接受用戶輸入數(shù)據(jù)時(shí),返回的值為文本型。 For Each k In sNext s(j) = t t = s(i) For j = i + 1 To 10 Next i amp。 For i = 1 To 10 Dim k(3)在模塊中編寫以下代碼:Option Base 1Sub 數(shù)據(jù)排序()3.編寫代碼(1)新建Excel工作簿,按快捷鍵“Alt+F11”進(jìn)入VBE環(huán)境。如果希望下標(biāo)從1開始,可以通過Option Base語句來設(shè)置,其語法格式如下:Option Base 1使用該語句指定數(shù)組下標(biāo)的默認(rèn)下界,只能設(shè)為0或1。定義一維數(shù)組的語法格式如下:Dim 數(shù)組名([下界 To] 上界)數(shù)組使用之前可以使用Dim、Static、Private或Public語句來聲明。本例使用VBA程序首先讓用戶輸入10個數(shù)據(jù),然后使用冒泡排序法對這10個數(shù)進(jìn)行排序。例029對于大量有序的數(shù)據(jù),可以使用數(shù)組對其進(jìn)行存儲和處理。 種方法!End Sub(8)以上程序中內(nèi)循環(huán)的執(zhí)行數(shù)數(shù)如下:51211163=212058次可以看出減少最外層循環(huán)的101次,可使用內(nèi)循環(huán)體提高100倍的執(zhí)行效率。 MsgBox 10元換為零錢共有 amp。 Next Next End If Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 1) = i t = t + 1 t2 = 2 * j + 5 * k + 10 * l + 20 * m + 50 * n 39。 2元1元 For l = 0 To 10 39。 For k = 0 To 20 39。 Dim t As Long 換法總數(shù)(6)在循環(huán)嵌套中,內(nèi)層循環(huán)體執(zhí)行的次數(shù)等各外層循環(huán)數(shù)數(shù)之積,如本例代碼內(nèi)循環(huán)執(zhí)行次數(shù)為:10151211163=21417858次(7)對于嵌套循環(huán),一般都可以對代碼進(jìn)行一定的優(yōu)化,使程序的執(zhí)行效率更高。圖331 種方法!End Sub(4)運(yùn)行該子過程,Excel工作表中每一行將填寫一種可能的換法,如圖331所示。 MsgBox 10元換為零錢共有 amp。 Next Next Next Sheets(1).Cells(t + 1, 6) = n Sheets(1).Cells(t + 1, 4) = l Sheets(1).Cells(t + 1, 2) = j t = t + 15元2元 For m = 0 To 5 39。5角 For k = 0 To 20 39。 For j = 0 To 50 39。 For i = 0 To 100根據(jù)這種算法在模塊中編寫以下子過程:Sub 換零錢1()(2)單擊菜單“插入/模塊”命令向工程中插入一個模塊。圖330 圖330右圖則是錯誤的嵌套關(guān)系。同樣,在嵌套的If語句中,End If語句自動與最靠近的前一個If語句配對。在編寫嵌套循環(huán)程序的代碼時(shí),一定要注意每個循環(huán)語句的配對情況。 換零錢法(多重循環(huán))1.案例說明將十元錢換成1角、2角、5角、1元、2元、5元的零錢若干,求出一共有多少種方法進(jìn)行計(jì)算?2.關(guān)鍵技術(shù)在VBA中,循環(huán)結(jié)構(gòu)內(nèi)的循環(huán)體又可以是循環(huán)結(jié)構(gòu),這種情況稱為循環(huán)的嵌套。圖329(6)拖動鼠標(biāo)選中如圖329左圖所示數(shù)據(jù)區(qū)域,單擊“求和”按鈕,求和結(jié)果將顯示在如圖329右圖所示對話框中。 tEnd Sub(4)返回Excel操作環(huán)境,向工作表中插入一個按鈕,修改按鈕的提示字符為“求和”,為按鈕指定執(zhí)行上步創(chuàng)建的宏“求和”。(2)單擊菜單“插入/模塊”命令向工程中插入一個模塊。Exit For經(jīng)常在條件判斷之后使用,例如If…Then,并將控制權(quán)轉(zhuǎn)移到緊接在Next之后的語句。如果“對象集合”中還有其他的元素,則會針對它們執(zhí)行循環(huán)中的語句,當(dāng)“對象集合”中的所有元素都執(zhí)行完了,便會退出循環(huán),然后從Next語句之后的語句繼續(xù)執(zhí)行。如果集合中至少有一個元素,就會進(jìn)入For Each循環(huán)體執(zhí)行。2.關(guān)鍵技術(shù)用戶在Excel工作表中選定單元格的數(shù)量是不固定的,若需統(tǒng)計(jì)所選單元格數(shù)值之和,這時(shí)可使用For Each循環(huán)來進(jìn)行處理,對選中區(qū)域的每個單元格進(jìn)行判斷,然后再累加數(shù)值單元格的值。 計(jì)算選中區(qū)域數(shù)值之和1.案例說明在某些情況下,需要統(tǒng)計(jì)工作表中選定區(qū)域數(shù)值單元格的數(shù)值之和(例如,臨時(shí)查看應(yīng)發(fā)獎金之和),在Excel的狀態(tài)欄就可查看選中單元格的數(shù)值之和。(5)單擊按鈕,得到如圖327所示的結(jié)果。(2)單擊菜單“插入/模塊”命令向工程中插入一個模塊。圖328在事先不知道循環(huán)體需要執(zhí)行多少次時(shí),應(yīng)該用Do循環(huán)。For…Next循環(huán)結(jié)構(gòu)的流程圖如圖328所示。如果步長值為負(fù),則初始值必須大于等于終值,這樣才能執(zhí)行循環(huán)體。For循環(huán)的語法如下:For 循環(huán)變量=初始值 To 終值 [Step 步長值]語句序列1[Exit For][語句序列2]Next [循環(huán)變量]在For循環(huán)中使用循環(huán)變量來控制循環(huán),每重復(fù)一次循環(huán)之后,循環(huán)變量的值將與步長值相加。 ASCII碼表2.關(guān)鍵技術(shù)使用Do…Loop循環(huán)時(shí),可以不知道循環(huán)的具體次數(shù)。ASCII碼由8位二進(jìn)制組成,一共可包含256個符號。 最大公約數(shù)和最小公倍數(shù)例026 輸入數(shù)據(jù) m * n / n1MsgBox str1End Sub(4)返回Excel操作環(huán)境,向工作表中插入一個按鈕,為按鈕指定執(zhí)行上步創(chuàng)建的宏。 vbCrLfstr1 = str1 amp。 的最大公約數(shù)= amp。 , amp。(3)在模塊中編寫以下子過程:Sub 最小公倍數(shù)和最大公約數(shù)()Dim m As Integer, n As IntegerDim m1 As Integer, n1 As IntegerDim t As Integerm = InputBox(輸入自然數(shù)m:)n = InputBox(輸入自然數(shù)n:)m1 = mn1 = nIf m1 n1 Thenm1 = nn1 = m 39。如本例中使用以下語句退出循環(huán):If r = 0 Then Exit Do3.編寫代碼(1)新建Excel工作簿,按快捷鍵“Alt+F11”進(jìn)入VBE環(huán)境。 最大公約數(shù)算法流程圖本例使用Do…Loop循環(huán),并且沒有設(shè)置循環(huán)條件。求最大公約數(shù)的算法流程圖如圖324所示。本例使用輾轉(zhuǎn)相除法求兩個自然數(shù)m、n的最大公約數(shù)和最小公倍數(shù)。最大公約數(shù)是指某幾個整數(shù)的共有公約數(shù)中最大的那個數(shù)。 求最小公倍數(shù)和最大公約數(shù)1.案例說明幾個數(shù)公有的倍數(shù)叫做這幾個數(shù)的公倍數(shù),其中最小的一個叫做這幾個數(shù)的最小公倍數(shù)。(5)單擊“密碼驗(yàn)證”按鈕,彈出如圖323所示對話框,輸入密碼后單擊“確定”按鈕進(jìn)行密碼的驗(yàn)證。 39。退出循環(huán)ElseMsgBox (請輸入正確的密碼!)End Ifi = i + 1Loop While i 3If i = 3 Then判斷密碼是否正確Exit Do輸入密碼If strPassword = test Then 39。保存密碼Dim i As Integer(3)在模塊中編寫以下VBA代碼:Sub login()Dim strPassword As String3.編寫代碼(1)新建Excel工作簿,按快捷鍵“Alt+F11”進(jìn)入VBE開發(fā)環(huán)境。——— Do While…Loop流程圖VBA的Do…Loop循環(huán)有4種結(jié)構(gòu),分別如下:—其流程圖如圖322所示。當(dāng)VBA執(zhí)行這個Do循環(huán)時(shí),首先判斷“邏輯表達(dá)式”的值,如果為False(或零),則跳過所有語句,執(zhí)行Loop的下一條語句,如果為True(或非零),則執(zhí)行循環(huán)體,當(dāng)執(zhí)行到Loop語句后,又跳回到Do While語句再次判斷條件。2.關(guān)鍵技術(shù)在VBA中,最常用的循環(huán)語句是Do…Loop循環(huán)。在登錄操作時(shí)要求用戶輸入密碼,一般都要給用戶三次機(jī)會,每次的輸入過程和判斷過程都相同。例024循環(huán)結(jié)構(gòu)的思想是利用計(jì)算機(jī)高速處理運(yùn)算的特性,重復(fù)執(zhí)行某一部分代碼,以完成大量有規(guī)則的重復(fù)性運(yùn)算。 循環(huán)結(jié)構(gòu)在實(shí)際開發(fā)的應(yīng)用系統(tǒng)中,經(jīng)常需要重復(fù)執(zhí)行一條或多條語句。圖321(7)單擊“計(jì)算”按鈕,可計(jì)算出每個員工的所得稅額,如圖321所示。1600為扣除數(shù)If curP 0 ThenSelect Case curPCase Is = 500curT = curP * Case Is = 2000curT = (curP 500) * + 25Case Is = 5000curT = (curP 2000) * + 125Case Is = 20000curT = (curP 5000) * + 375Case Is = 40000curT = (curP 20000) * + 1375Case Is 60000curT = (curP 40000) * + 3375Case Is 80000curT = (curP 60000) * + 6375Case Is 100000curT = (curP 80000) * + 10375Case ElsecurT = (curP 100000) * + 15375End Select個人所得稅 = curTElse個人所得稅 = 0End IfEnd Function(5)在模塊中編寫“計(jì)算”子過程,計(jì)算工資表中每個員工應(yīng)繳所得稅額,并填寫在對應(yīng)的列中。(3)單擊菜單“插入/模塊”命令插入一個模塊。3.編寫代碼(1)在Excel中打開工資表工作簿。 以上三種情況的混合。例如,Case Is60 表示所有大于90的值?!?表達(dá)式A To 表達(dá)式B:表示一個數(shù)據(jù)范圍。例如:Case 10,15,25。表達(dá)式列表可以按以下幾種情況進(jìn)行書寫:—“表達(dá)式列表”可以是一個或幾個值的列表。圖320如果相等,就執(zhí)行與該Case語句下面的語句塊,執(zhí)行完畢再跳轉(zhuǎn)到End Select語句后執(zhí)行。Select Case語句的功能與If…Then…Else語句類似,但在多分支結(jié)構(gòu)中,使用Select Case語句可使代碼簡潔易讀。這時(shí)可在If…Then…ElseIf結(jié)構(gòu)中添加多個ElseIf塊來進(jìn)行各分支的處理。圖319個人所得稅的計(jì)算公式為:應(yīng)納個人所得稅稅額=應(yīng)納稅所得額適用稅率速算扣除數(shù)本例根據(jù)工資表中的相應(yīng)數(shù)據(jù)計(jì)算出納稅額,并填充在工資表對應(yīng)的列中。 計(jì)算個人所得稅1.案例說明在工資管理系統(tǒng)中,需要計(jì)算員工應(yīng)繳納的個人所得稅。(5)單擊“評定等級”按鈕,即可在成績表的C列顯示出各成績對應(yīng)的等級,如圖317所示。 39。(3)單擊“插入/模塊”命令向工程中插入一個模塊,并編寫以下VBA代碼:Sub 評定等級()Dim i As IntegerFor i = 3 To 11t = Sheets(1).Cells(i, 2).Value If…Then…ElseIf語句流程圖3.編寫代碼(1)在Excel中打開成績表。其流程圖如圖318所示。如果它為False,再判斷“邏輯表達(dá)式2”的值,依此類推,當(dāng)找到一個為True的條件,就會執(zhí)行相應(yīng)的語句塊,然后執(zhí)行End If后面的代碼。其實(shí)VBA中提供了一種If…Then…ElseIf的多分支結(jié)構(gòu),其語法格式如下:If 邏輯表達(dá)式1 Then語句序列1ElseIf 邏輯表達(dá)式2 Then語句序列2.ElseIf 邏輯表達(dá)式3 Then語句序列3... …Else語句序列nEnd If在以上結(jié)構(gòu)中,可以包括任意數(shù)量的ElseIf子句和條件,ElseIf子句總是出現(xiàn)在Else子句之前。 E:小于60分。 C:大于等于70分,小于80分;— A:大于等于90分;—圖317 評定成績