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有點難?