SUMIFS excel 2003源代码和计算列的能力
我们正在寻找原始的?SUMIFS使用in-out excel工作表的源代码(适用于2003年和2007年。原因如下:SUMIFS excel 2003源代码和计算列的能力,excel,vba,Excel,Vba,我们正在寻找原始的?SUMIFS使用in-out excel工作表的源代码(适用于2003年和2007年。原因如下: 2003不支持SUMIFS方法 当我们有SUMIF时,我们不能使用“围绕”列的公式(如YEAR()) 例如,我们想计算与单元格A1中日期的年份值和范围L:L中的日期值相匹配的答案。现在这不起作用,因为我们不能使用年份(L:L),因此我们需要使用L:L中的年份值创建另一列M:M 因此,我们需要源代码来进一步升级代码 = SUFIFS(回答:L:L;=“&年(A1))< P>我
- 2003不支持SUMIFS方法
- 当我们有SUMIF时,我们不能使用“围绕”列的公式(如YEAR())
= SUFIFS(回答:L:L;=“&年(A1))< P>我怀疑你会找到原始代码,这是我想象的C++和Excel内部的一部分。如果是正确的,那么它不会有太大帮助,即使微软给你了!
一般来说,我建议不要使用=SUMIF()
,=SUMIFS()
和其他使用字符串来定义测试条件的函数:除此之外,我担心它们的速度会很慢,因为我的最佳猜测是,它们在内部为每个值构造一个字符串(我现在所有的资料)至少,事实证明这不一定是真的(见下面的评论)
我通常更喜欢使用数组函数。例如,这在Excel 2003和2007中都适用:
=SUMPRODUCT(--(YEAR(L:L)=YEAR(A1)),ANSWERS)
这得到了同样的答案:
{=SUM(IF(YEAR(L:L)=YEAR(A1),ANSWERS,0))}
在后一种情况下,您需要输入不带大括号({
&}
)的公式,并使用Control+Shift+enter确认它,告诉Excel这是一个数组公式
在第一个示例中,我们构建了一个布尔结果列表,其中YEAR(L:L)=YEAR(A1)
,并使用双负数将其转换为1和0的数组。然后SUMPRODUCT
处理其余部分。此版本要求ANSWERS
具有与L:L
相同的维度,即它应该是整列(或应限制L
中的范围的大小)
在第二种情况下,Excel将遍历
L:L
中的每个条目。如果其年份与A1中的年份匹配,则将使用相应的答案值,否则为零。此公式似乎更能容忍维度差异,但我仍然要小心。sumproduct
本身不是数组公式(只是其中一个的别名),所以它不需要通过Ctrl+Shift+Enter来确认…Excel 2003中的sumproduct和数组公式需要指向规则范围,而不是整列..+当然,sumproduct和数组公式是countifs和sumifs,使用它们处理每个细微差别的开销要比字符串构造大得多+它们必须重新定义为每次重新计算计算每个数组,SUMIF会更好地进行优化,以便只重新计算所需内容。有趣。现在issumif或sumproduct变慢了吗?@deathApril-当然,你在{}上是对的。更正。经过一些测试后,我惊讶地发现你在性能方面是对的。100SUM(IF…)
在我非常不科学的测试中,一百万行需要1.34秒,而SUMIFS的测试同样需要0.23秒。