总和列基于前12列的行条目(滚动计数)

真的停留在这一个。 请看照片。 我有一个多行数据表(我正在使用的真实数据有2000多行)。 在这里输入图像说明

我需要总结每列中的行条目,但是我需要将这些总和放在两个不同的类别中:“新”和“返回”。 在价值出现的第一个date新的开始,然后在接下来的12个月内被认为是新的(所以10/1/2005 – 10/1/2006)。 然后,在初始12个月的窗口之后,该types的任何值将被视为“返回”。 对于每种types(岩石,纸,剪刀),第一个值出现的date总是不同的,所以没有一个可以测量的静态date,对于每一行,第一个值可以在任何date出现。

所以即使发生了一个值,那么一个值在9个月后出现,这两个值都是“新的”。 只有在第一次发生后的12个月后才会变成“回归”。

任何帮助是HUGELY赞赏。 我可以手动做到这一点,但超过2000行可能需要永久,导致很多错误。 任何解决scheme都有帮助 – 条件格式,公式,vba。 我希望这一切都清楚。 再次感谢。

哇!! – 这一个是我的doozie,但它可以使用数组公式。 (我想看看我能否做到这一点 – 但更好的解决scheme,肯定会在VBA中做到这一点)

我这样做的方式是,假设你设置你的数据,就像你在示例图片中一样 – 这样你的10/1/2005数据将在B列。所以,看看你将如何做每年,假设你正在为2/1/2007月1日的专栏工作(给出这个例子,它将在R列中)

所以,你的返回计算(单元格R6 )如下所示:

 =SUMPRODUCT(--(MMULT(IF(F2:Q4="",0,F2:Q4),TRANSPOSE({1,1,1,1,1,1,1,1,1,1,1,1}))>0),R2:R4) 

请注意, 这个必须input为arraysfunction (使用Ctrl + Shift + Enterinput一次)才能工作。


那么,你的计算只是这个列减去你的回报的总和。 所以,在单元格R5 ,您将拥有:

 =SUM(R2:R4)-R6 

(作为一个正常的公式input)。


作为一个简单的解释,你正在使用matrix乘法来将每行中的值乘以1并且在每一行( MMULT()部分)上一起求和,然后你只是在检查它是否返回>0 -这意味着在过去的12个月里,这一行至less有一个值。

然后,如果有一个值,那么您将当前月份的值添加到返回总和(这是使用SUMPRODUCT()函数完成的)…这给你你所需要的。

关于这一点的好处是它对于任何数量的数据行都很容易,所以你的情况应该得到满足,坏处是这将是相当的处理器密集型,但它会工作!

我希望这至less有助于你的方式!

(我的答案从其他问题复制给任何感兴趣的人)

我添加了一个帮助列C,find行中的第一个非空白(我的数据从D列到列AZ)

 =MATCH(TRUE,INDEX((D2:AZ2<>0),0),0) 

这就是我放入单元格D5的公式,并将其复制

 =SUMIFS(D2:D4,$C2:$C4,">"&COLUMN(D1)-12-3) 

12是12个月,3是数据开始的C列。

退货业务是在D6和整个

 =SUM(D2:D4)-D5 

我的结果