大家好,今日我们继续讲解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專家 的文章