例如,我们想要计算与单元格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))< =这不是
非常感谢
答案 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))}
在后一种情况下,您输入的公式没有大括号({
& }
)并使用Control + Shift + Enter确认它,告诉Excel它是一个数组公式。< / p>
在第一个示例中,我们使用YEAR(L:L)=YEAR(A1)
构建一个布尔结果列表,并使用双负将其转换为1和0的数组。然后SUMPRODUCT
负责其余的工作。此版本要求ANSWERS
与L:L
具有相同的维度,即它应该是整个列(或L
中的范围应该受到大小限制)。
在第二个中,Excel将遍历L:L
中的每个条目。如果其年份与A1中的年份相匹配,则将使用相应的ANSWERS
值,否则为零。这个公式似乎更容忍尺寸差异,但我仍然要小心。