Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SUMIFS excel 2003源代码和计算列的能力_Excel_Vba - Fatal编程技术网

SUMIFS excel 2003源代码和计算列的能力

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>我

我们正在寻找原始的?SUMIFS使用in-out excel工作表的源代码(适用于2003年和2007年。原因如下:

  • 2003不支持SUMIFS方法
  • 当我们有SUMIF时,我们不能使用“围绕”列的公式(如YEAR())
例如,我们想计算与单元格A1中日期的年份值和范围L:L中的日期值相匹配的答案。现在这不起作用,因为我们不能使用年份(L:L),因此我们需要使用L:L中的年份值创建另一列M:M

因此,我们需要源代码来进一步升级代码


= 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-当然,你在{}上是对的。更正。经过一些测试后,我惊讶地发现你在性能方面是对的。100
SUM(IF…)
在我非常不科学的测试中,一百万行需要1.34秒,而
SUMIFS的测试同样需要0.23秒。