在Excel 2010中将数值累计到范围内

给定一列数值,是否有可能总和值,直到达到一个特定的阈值,然后重新设置总和并继续? 例如

Val Sum 103 52 155 47 60 103 210 100 76 176 163 163 169 169 87 103 190 84 31 59 174 87 49 67 203 

这将数字组合起来,直到数值超过150,然后重置计数器。

最简单的方法(不需要数组公式,更不用说VBA):

在B2中键入=IF(B1<150,B1+A2,A2)并向下拖动。 这将总和,直到它达到150或更多,然后重新启动在零。 当然,中间款项(即在150的路上)也会显示出来。 如果这让你感到困扰,你可以考虑几个选项:

  • 在C2中键入=IF(B2>=150,B2,"")并向下拖动,并隐藏B列。
  • 将条件格式应用于B列,使得低于150的数字以白色字体显示。

我会张贴更多的概念certificate比真实的答案,或者我可以改善这种情况(Issun也可能有一个想法)。

这里是:假设你的Val在column A和Sum在column B ,标题在row 1
column C ,我们将设置一个公式,它将告诉哪个是您在C3单元格中的“最后一个”单元格,将:

 {=MAX(IF($B$2:B2=0;0;ROW($B$2:B2)))} 

这是一个数组公式,您将不得不使用Ctrl Shift Enter进行validation。

在单元格B3 ,您将必须将第一个值(在您的示例中为155),对不起,我没有find适当的解决方法。
B4单元格中,放入:

 =IF(SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)))>150;SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)));0) 

然后将公式拖放到值的末尾。

[编辑]其实,你可以把它放在单元格B2中的一个公式:

 {=IF(SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)))>150;SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)));0)} 

并将其拖放到值的末尾。 似乎也工作。

这是VBA的解决scheme(对不起,我知道你想要一个论坛)。 你显然可以把范围调整到你需要的地步。 请注意我使用了LONG作为数据types(为了避免一些错误,我需要花费很长时间),但是如果您有任何浮点数,则需要使用DOUBLE。

 Sub SumIt() Dim cell As range Dim currentCount As Long For Each cell In range("A2:A100") currentCount = currentCount + CLng(cell.Value) If currentCount > 150 Then cell.Offset(0, 1).Value = currentCount currentCount = 0 End If Next End Sub 

它是如何工作的 :我遍历范围中的每个单元格,并将该值添加到名为currentCount的variables中。 然后检查它是否超过150,如果是我将currentCount粘贴到B列(同一行),并重置计数,并移动到下一个单元格。 简单!