在Excel中有大量数据的SumIf

在Excel中有大量数据的SumIf,excel,sumifs,Excel,Sumifs,我想做的是对大约200000行数据进行简单的sumif,这会给excel带来问题。 基本上我的清单是这样的 List of Companies Dummy1 Dummy2 Company A 0 1 Company A 0 1 Company A 1 1 Company B 1 1 Company B 0

我想做的是对大约200000行数据进行简单的sumif,这会给excel带来问题。 基本上我的清单是这样的

List of Companies    Dummy1  Dummy2  
Company A             0       1
Company A             0       1
Company A             1       1 
Company B             1       1
Company B             0       1
Company B             0       1
....
如果某个公司的B列的任何一行中有1,我需要在该公司的C列的每一行中插入1。
因此,虚拟2基本上是特定公司所有分录虚拟1的总和。 数据已按列A排序。 不管怎样,Excel变得疯狂了。 我在这里做的只是因为我生成了太多的比较运算,这是不是很愚蠢?
要完成我在这里要做的事情,最简单的方法是什么?

我认为更好的解决方法是使用透视表,您可以按公司对Dummy1求和,并将数据作为摘要

以下是一个例子:


我希望这有帮助

根据您的样本数据,在C2:C200000中填入

=SUMIF(A:A,A2,B:B)

。。。将执行3×必要的
SUMIF
计算。
IF
公式仅根据标准的解析方式处理正确或错误的部分,因此将公式更改为以下内容:

=IF(A2A1,SUMIF(A:A,A2,B:B),C1)

。。。应该大大减少计算周期中的处理。改进的程度将取决于A列中有多少重复的公司值,以及A列是否已排序以将公司名称保持在一起。独特公司的数量越少,您将看到的改进就越多。简而言之,除非公司从一行到另一行进行更改,否则不会计算
SUMIF

示例计算计时环境:

  • Excel 2010 64位(14.0.7015.1000),在Windows 7 Pro下运行,运行于带8Gbs DRAM的商务级i5笔记本电脑上
  • XLSB;计算手册;保存前重新计算工作簿;保存自动恢复信息关闭
测试1:26家公司(A公司到Z公司),A列中各有7683个条目,已排序。B列随机0和1恢复为值。C2:C200000清除,计算工作表,然后在C2:C200000中填写公式,新的计算周期计时完成

 formula                                        calculation cycle (hh:mm:ss)
=SUMIF(A:A, A2, B:B)                                    00:21:44
=IF(A2<>A1, SUMIF(A:A, A2, B:B), C1)                    00:00:09
 formula                                        calculation cycle (hh:mm:ss)
=SUMIF(A:A, A2, B:B)                                    00:22:10
=IF(A2<>A1, SUMIF(A:A, A2, B:B), C1)                    00:00:37
如果地区差异不重要(货币、日期等),则
selection=selection.value2
更好


唯一会减慢上述操作的是将范围内的依赖项恢复为值的公式,因为它们将被重新计算。

现在,我正在使用sumif执行此操作。问题是excel永远都在计算,而且会崩溃。好吧,每个公司都要计算虚拟1。像SUMIF(A:A,A,B:B)是的,我试过了。没有多大帮助。请看下面我的其他评论。嗨,谢谢你的帮助!这实际上是一个很好的观点,因为我使用了一个pivot表,它只做了我想要的事情,并且不需要任何时间来“计算”pivot表。但是,由于某些原因,透视表还不够。感谢您的帮助!是的,你的小“把戏”不知何故我并没有得到。我遇到的另一个问题是使用数据表中的数据。我认为将表格转换为一系列数据+用你的技巧最小化计算已经有了一些帮助。最后我在VBA中做了基本相同的工作,现在我很好,几乎不需要一秒钟就能完成这项工作。仍然让我思考的是:为了好玩,我在VBA中测试了我的“原始想法”,也就是说,没有你的把戏,它也工作得非常好,也不会花太长时间。
sub sel_2_Value
    application.enableevents = false
    selection = selection.value
    application.enableevents = true
end sub