【正文】
As Integer For i = 0 To 100 39。1角 For j = 0 To 50 39。2角 For k = 0 To 20 39。5角 For l = 0 To 10 39。1元 For m = 0 To 5 39。2元 For n = 0 To 2 39。5元 If i + 2 * j + 5 * k + 10 * l + 20 * m + 50 * n = 100 Then t = t + 1 Sheets(1).Cells(t + 1, 1) = i Sheets(1).Cells(t + 1, 2) = j Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 4) = l Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 6) = n End If Next Next Next Next Next Next MsgBox 10元換為零錢共有 amp。 t amp。 種方法!End Sub(4)運(yùn)行該子過程,Excel工作表中每一行將填寫一種可能的換法,如圖331所示。(5)因?yàn)閾Q零錢的方法很多,根據(jù)計(jì)算機(jī)的速度不同該程序的運(yùn)行速度也不同,最后將通過對話框顯示出總的換法次數(shù),如圖332所示。圖331 零錢換法 圖332 換法總數(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í)行效率更高。本例最簡單的優(yōu)化代碼如下:Sub 換零錢2() Dim t As Long For j = 0 To 50 39。2角 For k = 0 To 20 39。5角 For l = 0 To 10 39。1元 For m = 0 To 5 39。2元 For n = 0 To 2 39。5元 t2 = 2 * j + 5 * k + 10 * l + 20 * m + 50 * n If t2 = 100 Then t = t + 1 i = 100 t2 Sheets(1).Cells(t + 1, 1) = i Sheets(1).Cells(t + 1, 2) = j Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 4) = l Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 6) = n End If Next Next Next Next Next MsgBox 10元換為零錢共有 amp。 t amp。 種方法!End Sub(8)以上程序中內(nèi)循環(huán)的執(zhí)行數(shù)數(shù)如下:51211163=212058次可以看出減少最外層循環(huán)的101次,可使用內(nèi)循環(huán)體提高100倍的執(zhí)行效率。本例程序還有很多優(yōu)化方法,這里就不再介紹。 使用數(shù)組在程序中,如果要處理大量的數(shù)據(jù),為每個(gè)數(shù)據(jù)定義一個(gè)變量將使程序變得很難閱讀,并且代碼很煩瑣。對于大量有序的數(shù)據(jù),可以使用數(shù)組對其進(jìn)行存儲(chǔ)和處理。在其他程序設(shè)計(jì)語言中,數(shù)組中的所有元素都必須為同樣的數(shù)據(jù)類型,在VBA中,數(shù)組中各元素可以是相同的數(shù)據(jù)類型,也可以是不同的數(shù)據(jù)類型。例029 數(shù)據(jù)排序1.案例說明在Excel中可以方便地對單元格區(qū)域中的數(shù)據(jù)進(jìn)行排序。本例使用VBA程序首先讓用戶輸入10個(gè)數(shù)據(jù),然后使用冒泡排序法對這10個(gè)數(shù)進(jìn)行排序。2.關(guān)鍵技術(shù)在程序中處理大量數(shù)據(jù)時(shí),使用數(shù)組來保存是比較好的方法。數(shù)組使用之前可以使用Dim、Static、Private或Public語句來聲明。在VBA中,數(shù)組最大可以達(dá)到60維,最常用的是一維數(shù)組和二維數(shù)組。定義一維數(shù)組的語法格式如下:Dim 數(shù)組名([下界 To] 上界) As 數(shù)據(jù)類型其中“下界”可以省略,只給出數(shù)組的上界(即可以使用的最大下標(biāo)值),這時(shí)默認(rèn)值為0,即數(shù)組的下標(biāo)從0開始至定義的上界,如:Dim MyArray(10) As String定義了一個(gè)名為MyArray的數(shù)組,共有11個(gè)元素,分別為MyArray(0)、MyArray(1)、…、MyArray(10)。如果希望下標(biāo)從1開始,可以通過Option Base語句來設(shè)置,其語法格式如下:Option Base 1使用該語句指定數(shù)組下標(biāo)的默認(rèn)下界,只能設(shè)為0或1?!?該語句只能出現(xiàn)在用戶窗體或模塊的聲明部分,不能出現(xiàn)在過程中,且必須放在數(shù)組定義之前。3.編寫代碼(1)新建Excel工作簿,按快捷鍵“Alt+F11”進(jìn)入VBE環(huán)境。(2)單擊菜單“插入/模塊”命令向工程中插入一個(gè)模塊。(3)在模塊中編寫以下代碼:Option Base 1Sub 數(shù)據(jù)排序() Dim i As Integer, j As Integer Dim k Dim s(10) As Integer For i = 1 To 10 s(i) = (輸入第 amp。 i amp。 個(gè)數(shù)據(jù):, 輸入數(shù)組, , , , , , 1) Next For i = 1 To 9 For j = i + 1 To 10 If s(i) s(j) Then t = s(i) s(i) = s(j) s(j) = t End If Next Next For Each k In s k NextEnd Sub在VBA中使用Inputbox函數(shù)接受用戶輸入數(shù)據(jù)時(shí),返回的值為文本型。以上代碼中使用了Application對象的InputBox方法來接受用戶輸入數(shù)據(jù),該方法的語法格式如下:(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)設(shè)置Type參數(shù)可指定返回的數(shù)據(jù)類型,如本例設(shè)置其值為2,則返回的值為數(shù)值型。(4)運(yùn)行上面的宏,彈出如圖333所示的對話