用于excel 2003的SUMIFS源代码以及在列上计算的能力

我们正在寻找原始? SUMIFS的源代码用于Excel表格(2003年和2007年)。这是为什么:

  • 2003支持SUMIFS方法
  • 当我们有SUMIFS我们不能利用公式“列”(如YEAR())

例如,我们希望计算与单元格A1中date的YEAR值和L:L范围内的date值相匹配的ANSWERS。 现在这不起作用,因为我们不能使用YEAR(L:L),因此我们需要使用L:L中的YEAR值创build另一个列M:M

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

= SUMIFS(ANSWERS; L:L;“=”&YEAR(A1))<=这是有效的

= SUMIFS(ANSWERS; YEAR(L:L);“=”&YEAR(A1))<=这不是

非常感谢

参照以下问题: 在SUMIFS的Excel 2003 VBA代码中 replace SUMIFS?

我怀疑你会发现原来的代码,我想,C ++和Excel内部的一部分。 如果这是正确的,那么即使微软给了你,也没有多大帮助!

一般来说,我build议不要使用=SUMIF()=SUMIFS()和其他函数,它们需要一个string来定义testing的条件:除了别的,我担心它们会变慢,因为我的最好的猜测是内部他们构build一个string评估每个值。 在XL2007中(至less我现在有这个function),这个结果并不一定是正确的(见下面的评论)。

我通常更快乐的arraysfunction。 例如,这应该在Excel 2003和2007中都可以使用:

 =SUMPRODUCT(--(YEAR(L:L)=YEAR(A1)),ANSWERS) 

这得到相同的答案:

 {=SUM(IF(YEAR(L:L)=YEAR(A1),ANSWERS,0))} 

在后一种情况下,input不带花括号( {} )的公式,并使用Ctrl + Shift + Enter确认,以告诉Excel它是一个数组公式。

在第一个例子中,我们用YEAR(L:L)=YEAR(A1)构build一个布尔结果的列表,并使用双负数将其转换为1和0的数组。 然后SUMPRODUCT负责其余的SUMPRODUCT 。 这个版本要求ANSWERSL:L具有相同的维度,即它应该是整个列(或者L的范围应该受到限制)。

在第二个,Excel将贯穿L:L每个条目。 如果其年份与A1相匹配,那么将使用相应的ANSWERS值,否则为零。 这个公式似乎更容忍维度差异,但我仍然要小心。