在 Excel 2010 中将数值集中到某个范围内的总计

发布于 2024-11-28 08:44:10 字数 229 浏览 2 评论 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,然后重置计数器。

Given a column of numeric values, is it possible to sum values until the total reaches a particular threshhold, then reset the sum total and continue? for example

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

This sums groups of numbers until the value exceeds 150, then resets the counter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

恋你朝朝暮暮 2024-12-05 08:44:10

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

这里是:
假设您的 Val 位于A 列,Sum 位于B 列,标题位于第 1 行
C 列中,我们将设置一个公式,该公式将告诉您求和的“最后一个”单元格 > >在单元格 C3 中,输入:

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

这是一个数组公式,您必须使用 CtrlShiftEnter 进行验证。

在单元格 B3 中,您必须输入第一个值(示例中为 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)}

并将其拖放到值的末尾。似乎也有效。

i'll post it more for the proof of concept than a real answer or for the case i could improve this (Issun may have an idea too).

Here it is:
Let assume your Val is in column A and Sum in column B and Titles are in row 1.
In column C, we will set a formula that will tell which is the "last" cell where you sumed it up > in cell C3, put:

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

This is an array formula, you will have to validate with CtrlShiftEnter.

In cell B3, you will have to put the first value (155 in your example), sorry, i didn't find a proper workaround.
In cell B4, put:

=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)

Then drag & drop the formulas till the end of your values.

[EDIT] Actually, you could put it all in a single formula in cell 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)}

and drag and drop it till the end of your values. Seems to work too.

没企图 2024-12-05 08:44:10

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

在 B2 中,输入 =IF(B1<150,B1+A2,A2) 并向下拖动。其总和将达到 150 或更多,然后从零重新开始。当然,中间的总和(即达到 150)也会显示。如果这让您烦恼,您会想到以下几个选项:

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

Simplest way to do it (no need for array formulas let alone VBA):

In B2, type =IF(B1<150,B1+A2,A2) and drag down. This will sum until it reaches 150 or more, and then restart at zero. Of course, the intermediate sums (i.e. on the way up to 150) will show as well. If this bothers you, a couple of options spring to mind:

  • Type =IF(B2>=150,B2,"") in C2 and drag down, and hide column B.
  • Apply conditional formatting to column B such that numbers below 150 get shown in white font.
烟花易冷人易散 2024-12-05 08:44:10

这是 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 列(同一行)并重置计数并移至下一个单元格。简单的!

Here's a solution in VBA (sorry I know you wanted a forumula). You can obviously tweat the range to be whatver you need it to be. Please note I used LONG as data type (and I am casting to long to avoid some errors), but you need to use DOUBLE if you have any floating point numbers.

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

How it works: I loop through each cell in the range and add the value to a variable called currentCount. I then check if it's over 150, if it is I paste the currentCount to the B column (same row) and reset the count and move to the next cell. Simple!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文