如果单元格超出范围(范围=行+最后11列中最左边的值)R或Excel?

所以请看照片。 在matrix图中,从最左边的值+接下来的11列(总共12个月),条目被认为是“新业务”。 我用黄色突出显示了这个“窗口”。 窗口右侧的任何内容都是“退货业务”。 对于每一列/每月,我需要计算新&回报业务。 我需要一个公式或一些方法来从一列中得出这两个总和。 真的,我只需要能够得到其中的一个,因为那么我可以从总的列总和中减去另一个值。

在这里输入图像说明

在单元格O6中,每个结果只有25美元,因为第5行的最左边的值在列O之前没有延长整整12个月/列,所以在12个月窗口内的任何东西仍然被认为是“新的”你可以看到它超出了我试图得到结果的单元格)。 连续第一个值右边的所有11列可以被填充,但它们都将是新的。 只有从第十三栏才算是“回报”。

正如你所看到的,每一行中的第一个值并不总是出现在同一个点上,它会移动。

我正在使用的电子表格是2000多行。 我其实是经过手工做的,但那并不好玩! 我手动find每一行中最左边的值,在它之后数出11个单元格,然后将其余的行着色为黄色。 然后,我使用了一个自定义函数,允许我基于单元格颜色进行求和。 所以如果有一种方法来有条件地格式化值,那也可以,我可以使用我的颜色求和function。

此外,如果在R中有更好的方法来做到这一点,请告诉我。 我对R是新手,但是我认为matrixmath做起来更容易/更快,但是我只是玩了一下,我从来没有做过这样的事情。

感谢你的帮助!

我添加了一个帮助列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 

我的结果

这在VBA中不应该太难做。 我不会为你编写所有的代码,而是提出我将如何计划解决这个问题,并build议你至less自己去编写代码,然后再针对你所遇到的任何具体问题打开更多的问题。

我会寻找像下面这样的东西:

  1. 指定您正在使用的范围;
  2. 循环遍历每一行获取新业务并返回业务价值并将其添加到累计总计;
  3. 在每一行使用一个函数来确定第一个使用的行(例如,当前行的B列的.End(xlToRight)可能是有帮助的),然后将范围从这个和列偏移量12求和得到新的业务按照你的build议,用这个来得到回报业务;
  4. 使用您的累计总数来更新所需的字段。

如果您在录制macros时手动执行任何语法的语法,那么查看生成的代码通常会有所帮助。