多语言展示
当前在线:1300今日阅读:175今日分享:29

excel如何更有效率的进行条件求和(字典方法)

用过Excel办公的人,应该都知道对数据进行条件求和,我们需要用到sumif函数,如果数据量不大的话,用sumif函数进行计算速度也不慢,但是如果数据量达到万行,上万行的话,就会明显感觉到sumif函数计算速度慢了很多,甚至需要等待一段时间,本文将教你excel如何更有效率的进行条件求和,速度是sumif函数的N倍,并且数据量越大越明显。
工具/原料

Excel2013版本以上

方法/步骤
1

【第一步】  打开需要进行条件求和的表格,可以看到下图,我用来测试的表格有15132行,是万行以上的数据量,A到C列为原始数据区域,我们需要在I列计算出各个货号的总销量。

2

【第二步】  我们在I列输入函数  =SUMIF(A:A,H2,C:C)   ,然后向下填充公式,就可以得出各个货号的总销量,计算过程需要运行一段时间,接下我用代码来测试使用sumif函数得出结果所需时间。

3

【第三步】  我们在“开发工具”选项卡,找到Visual Basic ,打开VB代码编辑器,或者直接按下组合键  Alt+F11  也可以打开VB代码编辑器。

4

【第四步】  在打开的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

5

【第五步】  点击运行代码,用timer方法得出,用sumif函数计算15132行数据用户2.8672秒,整个运行过程需要等待一会儿,这段代码是模拟sumif函数并向下填充所需要的时间,

6

【第六步】  我们再一次打开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

7

【第七步】  我们再次点击运行刚插入的代码段,这段是用字典方法,进行条件求和的,运行开始后,立即弹出:用字典方法计算15132行数据并得出总销量用时0.0508秒,0.1秒都不到,比sumif函数快很多,对于大量数据更有效率。

注意事项

要注意VBA字典的用法!

推荐信息