|
本帖最后由 香川群子 于 2013-1-28 23:10 编辑
如果楼主想要学习字典用法,那么请看附件:- Private Sub CommandButton1_Click()
-
- arr = [a1].CurrentRegion '获取A1单元格所在区域作为原始数据区域读入数组arr
- m = UBound(arr): n = UBound(arr, 2) '获取原始数据区域行、列大小
- ReDim brr(1 To m, 1 To n) '重新定义数组brr用来存放结果
-
- Set d = CreateObject("Scripting.Dictionary") '定义字典d用来记录关键词行位置指针
-
- For i = 2 To m '遍历数据有效行
- t = d(arr(i, 1)) '用字典查询关键词(数据第1列)是否已经存入字典
- If t = "" Then '如果结果为空白,则该关键字尚未加入字典 (注意,我没有使用d.Exists(关键词)的做法)
- k = k + 1: d(arr(i, 1)) = k: t = k '新的行位置指针值k+1递增(即新添一个单词)、接着把该关键词加入字典、最后对t变量赋值=k指针
- brr(k, 1) = arr(i, 1): brr(k, 2) = arr(i, 2) '把这个新单词的第1列、第2列内容写入结果数组
- End If
- For j = 3 To n '接下来,遍历第3列只到最后,把该关键词对应的统计数据加总到结果数组brr相应的行、列位置。
- brr(t, j) = brr(t, j) + arr(i, j) '这里不管开始查询时字典内是否有这个关键词,最后都是以t变量为记录时行位置的指针。
- Next
- Next
-
- [h1].CurrentRegion.Offset(1) = "" '清空输出结果区域
- [h2].Resize(k, n) = brr '输出结果到工作表指定区域
- End Sub
复制代码 我的算法是最高效的。没有其它。
按照楼主17列,12000行做了测试,VBA耗时0.2秒。
而sumif公式也是直接秒杀 → 楼主担心使用sumif函数耗时多,有何根据?
条件汇总2.rar
(42.48 KB, 下载次数: 524)
|
评分
-
2
查看全部评分
-
|