多行2列数据汇总。
今天的内容
下图中的数据,需要根据“仪器名称”来汇总数量,实现该效果的方法有很多,最常用的就是数据透视表了,还可以使用分列汇总功能。
今天涂涂给大家分享下,使用VBA的字典来实现汇总的效果。使用vba来处理,单纯从本例子来看,数据透视表是最快的。表亲们,这里先不说哪种方式实现快啊,这里只是提供解题思路而已。
❖数据截图
数据透视表汇总
◆选中数据源的任一非空单元格,选择【插入】选项卡
◆点击数据透视表,弹出创建数据透视表对话框,位置选择现有工作表
◆选择合适的放置位置,确定
◆将“仪器名称”字段拖入行标签,“数量”字段拖入数值即可
VBA字典汇总
◆将表格另存为xlsm后缀的文件
◆按<Ctrl F11>打开VBE编辑界面,创建模块
◆在模块中写入下记代码,保存,关闭VBE界面
◆创建执行按钮,点击按钮运行代码即可
Sub 多行2列()
Dim dic As Object
Dim m As Long, i As Long, k As Long
Dim Arr, Brr
'dic--创建字典
Set dic = CreateObject('scripting.dictionary')
'Arr--将数据区域装入数组
Arr = Range('A1:B' & Cells(Rows.Count, 1).End(xlUp).Row)
'重新声明数组Brr
ReDim Brr(1 To UBound(Arr, 1), 1 To 2)
'遍历数组Arr
For i = 2 To UBound(Arr, 1)
'如果字典关键字中不存在Arr(i, 1)
If Not dic.exists(Arr(i, 1)) Then
'k--计数
k = k 1
'将Arr(i, 1)写入字典
dic(Arr(i, 1)) = k
Brr(k, 1) = Arr(i, 1)
Brr(k, 2) = Arr(i, 2)
Else
'如果字典关键字中存在Arr(i, 1),则把条目m读取出来
m = dic(Arr(i, 1))
'累加
Brr(m, 2) = Brr(m, 2) Arr(i, 2)
End If
Next i
'把数组Brr写入D2单元格区域
[D2].Resize(k, 2) = Brr
End Sub
联系客服