標籤:

VBA數組和字典的經典用法及思路

本篇更新第一篇文章的簡便做法,思路來自小龍老師,稱得上是VBA數組,字典使用的經典思路,值得銘記於心吶~~


第一道例題,只使用到數組,思維順暢,耳目一新——

數據源如上,每個人的記錄佔八行,每個中間間隔若干行不定。

切記!!!處理數據,不要改變數據源!!!

看到數據源的特點,使用數組的思路——

1.先把當前表格區域一次性裝入數組,並初始化

2.對數據進行處理

3.把數組投放到單元格中

1.先進行第一步,把當前所有區域裝入arr中

endrow = Sheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row 萬金油:用來獲取最後的行號arr = Sheets("sheet1").Range("a1:a" & endrow).Value

將a列數據裝入數組arr中,此時arr是二維數組。(一維數組是一行值)

2.再進行第二步,以空格為分隔符將每個人的記錄分開,以「:」為分隔符將每個人記錄的每個屬性分開,裝入數組brr中

k = 1 ReDim brr(1 To endrow, 1 To 8) For i = 1 To UBound(arr) If arr(i, 1) <> "" Then k = k + 1 用來記錄每條記錄,自動+1 For col = 1 To 8 brr(1, col) = Split(arr(i, 1), ":")(0) brr(k, col) = Split(arr(i, 1), ":")(1) i = i + 1 巧用列循環,增加行號,取得每列的值 Next col End If Next i

3.將brr投放到單元格區域

Sheets("sheet2").Range("a1").Resize(k, 8).Value = brr

可以看一下arr和brr的結構:


第二道例題,根據題目要求可知,需要用到數組和字典

要求:

數據源:

(需要用到字典的情況——關於重複和次數)

思路:

1.當前區域裝入數組

2.需要計數的裝入字典

3.如果判斷>1,提取

4.投放

1.先將當前表格區域裝入數組arr

arr = Sheets("附件").Range("a1").CurrentRegion.Value

2.對數組做循環,滿足條件的裝入字典,字典key是名稱,item是出現次數

For i = 2 To UBound(arr) If Trim(arr(i, 4)) = "個人" And Trim(arr(i, 5)) = "新進" Then d(Trim(arr(i, 1))) = d(Trim(arr(i, 1))) + 1 字典計數固定搭配 End IfNext i

註:trim是去掉單元內容中的空格

3.如果字典的item大於1,則取出裝入數組brr

Dim brrDim irow As Integer, col As IntegerReDim brr(1 To d.Count, 1 To 7)irow = 1 For col = 1 To 7 取表頭 brr(1, col) = Trim(arr(2, col)) Next col For i = 2 To UBound(arr) If d(Trim(arr(i, 1))) > 1 Then irow = irow + 1 For col = 1 To 7 brr(irow, col) = Trim(arr(i, col)) Next col End If Next i

4.投放

Sheets("需求").Range("a1").Resize(irow, 7).Value = brr


結束語:自己寫了一遍作業,聽老師講了一遍,對VBA數組和字典的認識更深了。

事實證明,還是要做作業的啊,哈哈哈~~~


推薦閱讀:

一個word文檔裡邊有很多內容是Access資料庫里的內容,如何能自動綁定到資料庫?
Excel VBA入門(零)
VBA逐句注釋:文本透視
FSO對象操作txt文件
你為什麼覺得Excel VBA有點難?

TAG:VBA | 數組 | 字典 |