使用VBA字典,进行数据分类汇总
VBA的字典共有两列,第一列是key,不允许有重复的元素;第二列是item,也就是key对应的值,item的值是可以有重复的值的。
字典的主要操作有读和写。
写操作
d(key)=item;修改key对应的item,如
d(“A”)=-7,是把key为A的item值修改为-7。如果输入的key值在字典里没有,则会自动增加一个key。
读操作
d(key),返回key对应的item值,如d(“A”)则返回其item值6。
其他操作
d.keys----返回字典中所有的key,数组形式,行向量,下标从0开始;以下代码可以遍历key
dim arrkey
arrkey=d.keys
For i = 0 To UBound(arrkey)
MsgBox arrkey(i)
Next
d.items—返回字典中所有的items,数组形式,行向量,下标从0开始;
数据分类汇总
利用字典的key的不可重复性,可以快速进行数据的分类汇总。
上图中,按部门把销售业绩进行汇总,可使用如下VBA代码
Sub huizong()
Dim i%
Dim d As Object '定义字典变量
Dim arr '定义存放待处理数据的数组变量
Set d = CreateObject("Scripting.Dictionary") '申明1个字典变量
arr = Range("A2:C14") '把数据保存到一个2维数组中,提高处理速度
For i = 1 To UBound(arr) '遍历数组里面的“部门”并作为字典的key,并达到数据去重的效果
d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 3) '利用字典key不能重复的特点,把key相同的销售业绩相加,作为该key的item
'arr(i,1)是“部门”,作为字典的key
Next
Range("E2").Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys) '去重后的部门返回到E2单元格开始的列
Range("F2").Resize(d.Count, 1) = WorksheetFunction.Transpose(d.items) '部门对应的销售额,返回到F2单元格开始的列
'Transpose是转置函数,因为d.keys、d.items是个行向量
End Sub