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

时间:2012-04-02 12:21:22

标签: excel excel-vba vba

我们正在寻找原件?用于excel表格的SUMIFS源代码(适用于2003年和2007年。原因如下:

  • 2003 doest支持SUMIFS方法
  • 当我们有SUMIFS时,我们不能在列的“周围”使用公式(如YEAR())

例如,我们想要计算与单元格A1中日期的YEAR值匹配的ANSWERS,其中日期值的范围为L:L。现在这不起作用,因为我们不能使用YEAR(L:L),因此我们需要制作另一列M:M,其中YEAR值来自L:L

因此我们需要源能够进一步升级代码

  

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

     

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

非常感谢

参考这些问题: Replacing SUMIFS in Excel 2003 VBA code for SUMIFS?

1 个答案:

答案 0 :(得分:2)

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

一般情况下,我建议不要使用=SUMIF()=SUMIFS()和其他带字符串来定义测试条件的函数:除了其他任何东西,我担心他们会去慢,因为我最好的猜测是在内部他们构造一个字符串来评估每个值。在XL2007(至少我现在都可以使用)中,结果并非如此(请参阅下面的评论)。

我通常对数组函数更满意。例如,这应该适用于Excel 2003和Excel 2003。 2007:

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

这得到了同样的答案:

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

在后一种情况下,您输入的公式没有大括号({&amp; })并使用Control + Shift + Enter确认它,告诉Excel它是一个数组公式。< / p>

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

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