Excel2013版本以上
【第一步】 打开需要进行条件求和的表格,可以看到下图,我用来测试的表格有15132行,是万行以上的数据量,A到C列为原始数据区域,我们需要在I列计算出各个货号的总销量。
【第二步】 我们在I列输入函数 =SUMIF(A:A,H2,C:C) ,然后向下填充公式,就可以得出各个货号的总销量,计算过程需要运行一段时间,接下我用代码来测试使用sumif函数得出结果所需时间。
【第三步】 我们在“开发工具”选项卡,找到Visual Basic ,打开VB代码编辑器,或者直接按下组合键 Alt+F11 也可以打开VB代码编辑器。
【第四步】 在打开的VB代码编辑器中,插入以下代码:Public Sub 用sumif公式得出总数量() Dim RowUBound1, RowUBound2, T1, T2 Application.ScreenUpdating = False RowUBound1 = Cells(Rows.Count, 'H').End(3).Row RowUBound2 = Cells(Rows.Count, 'A').End(3).Row '用sumif公式得出总数量 T1 = Timer Range('I2').FormulaR1C1 = '=SUMIF(C[-8],RC[-1],C[-6])' Range('I2').AutoFill Destination:=Range('I2:I' & RowUBound1) T2 = Timer Application.ScreenUpdating = True MsgBox '用SUMIF函数计算 ' & RowUBound2 & _ ' 行数据并得出总数量用时: ' & Format(T2 - T1, '0.0000') & '秒。'End Sub
【第五步】 点击运行代码,用timer方法得出,用sumif函数计算15132行数据用户2.8672秒,整个运行过程需要等待一会儿,这段代码是模拟sumif函数并向下填充所需要的时间,
【第六步】 我们再一次打开VB代码编辑器,插入下面的一段代码:Public Sub 用字典得出总销量() Dim T1, T2, ARR, I, d As Object, RowUBound2 RowUBound2 = Cells(Rows.Count, 'A').End(3).Row Set d = CreateObject('scripting.dictionary') T1 = Timer ARR = [a1].CurrentRegion For I = 2 To UBound(ARR) d(ARR(I, 1)) = d(ARR(I, 1)) + ARR(I, 3) Next [h2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items)) d.RemoveAll T2 = Timer MsgBox '用字典方法计算 ' & RowUBound2 & _ ' 行数据并得出总销量用时: ' & Format(T2 - T1, '0.0000') & '秒。'End Sub
【第七步】 我们再次点击运行刚插入的代码段,这段是用字典方法,进行条件求和的,运行开始后,立即弹出:用字典方法计算15132行数据并得出总销量用时0.0508秒,0.1秒都不到,比sumif函数快很多,对于大量数据更有效率。
要注意VBA字典的用法!