大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第77講內容:根據數據分類不同,利用數組分別提取填入不同的工作表中。
數據處理中有一塊內容是數據的分類,數據的分類一般來講也可以用兩種辦法來實現,一是數組方法,一是字典方案,在77和78講中我將就這兩種方案詳細講解,今日講解的是數組方案。利用數組進行分類,這講中我介紹的是固定分類,就是事先知道這些數據該如何分類,然後按照分類的要求,新建不同的工作表,把這些數據填到各自工作表中。
實例,如下為部分數據截圖,我們將按照編號的不同分別建立不同的工作表,放進這些數據。
如第一個數據是WG002放到WG002的工作表中,第13個數據是WG001放到WG001的工作表中,如何實現呢?
思路分析:這裡涉及到幾個知識點,其一是新工作表建立,其二是如何在源數據中提取數據,所以思路就這樣建立,在源數據中建立循環,先按要求提取數據,然後,建立工作表填入數據後,之後再開始下一次循環。
下面看我給出的代碼:
Sub mynzsz_77() '第77講 根據數據分類不同,利用數組分別提取填入不同的工作表中
Sheets("77").Select
'定義一個動態數組存放結果
Dim mybrr()
'將數據放到數組中
myarr = Range("a1").CurrentRegion.Value
'定義新增工作表的表名稱
myTable = Array("WG001", "WG002", "WG003", "WG004")
'在數組中按新增工作表的名稱提取不同的值
For i = 0 To UBound(myTable)
For j = 2 To UBound(myarr)
If myarr(j, 2) = myTable(i) Then
t = t + 1
ReDim Preserve mybrr(1 To 4, 1 To t)
mybrr(1, t) = myarr(j, 1)
mybrr(2, t) = myarr(j, 2)
mybrr(3, t) = myarr(j, 3)
mybrr(4, t) = myarr(j, 4)
End If
Next j
'新增工作表
Set uu = Worksheets.Add(after:=Sheets("77"))
uu.Name = myTable(i)
'回填數據,設置格式
With uu
.Range("a1:d1") = Array("序號", "編號", "日期", "金額")
.Range("a2").Resize(t, 4) = _
WorksheetFunction.Transpose(mybrr)
.UsedRange.Borders.LineStyle = xlContinuous
End With
'清空數組
Erase mybrr()
t = 0
Next i
End Sub
代碼的截圖:
代碼分析:
1 上述代碼實現了在源數據中按要求提取數據,然後新建一個工作表,把這些數據回填進去。在此,我們要把源數據存到數組myarr中,然後我們建立一個數組myTable,用於存放新增的工作表 Array("WG001", "WG002", "WG003", "WG004"),在工作表中建立循環時按照上述的特徵提取數據。
2 '將數據放到數組中
myarr = Range("a1").CurrentRegion.Value
上述代碼將源數據存放到數組myarr中。
3 '定義新增工作表的表名稱
myTable = Array("WG001", "WG002", "WG003", "WG004")
上述代碼是把提取數據的特徵作為工作表的名稱來對應。
4 '新增工作表
Set uu = Worksheets.Add(after:=Sheets("77"))
uu.Name = myTable(i)
上面的代碼是新增工作表,工作表名稱即是數據分類的要求。
5 '回填數據,設置格式
With uu
.Range("a1:d1") = Array("序號", "編號", "日期", "金額")
.Range("a2").Resize(t, 4) = _
WorksheetFunction.Transpose(mybrr)
.UsedRange.Borders.LineStyle = xlContinuous
End With
上述代碼是回填數據,回填數據時用了轉置處理。
6 '清空數組
Erase mybrr()
上述代碼清空數組。
下面看代碼的運行:
分類後,把源數據按照分類要求分類,然後分工作表回填。
今日內容迴向:
1 如何按照數據的特徵分類填入工作表?
2 如何實現工作表的插入?
閱讀更多 VBA專家 的文章