总和列基于前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