大家好,我們今日繼續(xù)VBA數(shù)組與字典解決方案,今日講解VBA數(shù)組的聲明,一些朋友會問了:數(shù)組都講了這么長時間了,怎么才講聲明?。渴堑?,有些知識不到一定的程度即使講了,大家也不能深入的理解,只有到了一定的程度,再次講解,大家才能有真正的收獲。 一 我們先看看下面的聲明方法 1 Dim arr as Variant 2 Dim arr(1 to 10, 1 to 2 ) 3 dim arr() 4 ReDim arr(1 To k) 我們分析一下各種聲明方法: 第一種:聲明通常用于單元格直接裝入數(shù)組如: arr =range('a9:c100') 這種裝入非常簡單,直接用變量 = 單元格區(qū)域即可。但是這里要注意的是對于這種寫入時數(shù)組的聲明只能是: Dim arr as Variant 這時,聲明一個變量,不能聲明其他數(shù)據(jù)類型。 第二種:通常用于一個固定數(shù)組的聲明,同時給出了數(shù)組的上下界。這種聲明要注意的是不能一次性的裝入單元格的數(shù)據(jù),要靠循環(huán) 第三種,是一個動態(tài)數(shù)組的聲明,也就是說,我們在命名數(shù)組時還不知道數(shù)組的大小,要靠后期的再次定義 第四種 是再次聲明arr的大小,以正好盛下k數(shù)量的值。 二 把單元格數(shù)據(jù)填入數(shù)組和數(shù)組數(shù)據(jù)的回填 我們利用數(shù)組就是為了計算,下面我們看看把工作表中的數(shù)據(jù)填入數(shù)組,及計算后數(shù)組數(shù)據(jù)回填給工作表單元格的方法,看我給出的代碼: Sub MyNZsz_31() '第31講 數(shù)組的聲明及賦值的回填 Dim arr As Variant '注意此處的Variant Dim brr() '注意此處定義了一個動態(tài)數(shù)組 Sheets('31').Select arr = Sheets('31').UsedRange 'Usedrange的行數(shù)和列數(shù)是未知的 MsgBox UBound(arr, 1) '可以計算這個區(qū)域有多少行 MsgBox UBound(arr, 2) '可以計算出這個區(qū)域有多少列 ReDim brr(1 To UBound(arr, 1), 1 To UBound(arr, 2)) For x = 1 To UBound(arr, 1) '通過循環(huán)在arr數(shù)組中循環(huán) For y = 1 To UBound(arr, 2) brr(x, y) = arr(x, y) * arr(x, y) '數(shù)組自身相乘 Next Next '把數(shù)組放回到單元格中 Range('A' & Range('A1').End(xlDown).Row + 2).Resize(UBound(arr, 1), UBound(arr, 2)) = brr End Sub 代碼截圖: 代碼的講解:此代碼在代碼部分我都做了詳細(xì)的注釋,不再一一講解了,僅看看下面的這句代碼: Range('A' & Range('A1').End(xlDown).Row + 2).Resize(UBound(arr, 1), UBound(arr, 2)) = brr 這句設(shè)定了數(shù)組回填的區(qū)域大小,注意這個區(qū)域必須和數(shù)組的大小要一致,不然會產(chǎn)生錯誤。所以我利用了Resize(UBound(arr, 1), UBound(arr, 2))來保證這一點。 下面我們看代碼的運行: 運行前: 運行,先提示行數(shù): 再提示列數(shù): 最后看結(jié)果: 今日內(nèi)容回向: 1 如何給數(shù)組聲明? 2 上述實例如果再次運行一下會有什么結(jié)果呢? |
|