0

给定一列数值,是否可以对值求和,直到总数达到特定阈值,然后重置总和并继续?例如

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,然后重置计数器。

4

3 回答 3

2

我将更多地发布概念证明而不是真正的答案,或者我可以改进它的情况(Issun 也可能有一个想法)。

就是这样:假设你的 Val 是 incolumn A并且 Sum incolumn B和 Titles 是 in row 1
column C中,我们将设置一个公式,该公式将告诉您总结它的“最后一个”单元格 > 在 cell 中C3,输入:

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

这是一个数组公式,您必须使用CtrlShiftEnter.

在 cellB3中,您必须输入第一个值(在您的示例中为 155),抱歉,我没有找到合适的解决方法。
在单元格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)}

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

于 2011-08-04T11:45:57.497 回答
1

这是 VBA 中的一个解决方案(对不起,我知道你想要一个论坛)。显然,您可以将范围调整为您需要的范围。请注意,我使用 LONG 作为数据类型(并且我将其转换为 long 以避免一些错误),但如果您有任何浮点数,则需要使用 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 的变量中。然后我检查它是否超过 150,如果是,我将 currentCount 粘贴到 B 列(同一行)并重置计数并移动到下一个单元格。简单的!

于 2011-08-04T09:56:38.850 回答
1

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

在 B2 中,键入=IF(B1<150,B1+A2,A2)并向下拖动。这将相加直到达到 150 或更多,然后从零重新开始。当然,中间的总和(即接近 150)也会显示出来。如果这让您感到困扰,那么您会想到几个选择:

  • 输入=IF(B2>=150,B2,"")C2 并向下拖动,然后隐藏 B 列。
  • 对 B 列应用条件格式,使 150 以下的数字以白色字体显示。
于 2011-08-04T14:48:48.760 回答