我有一个包含2行的简单电子表格:
ActualJAN | BudgetJAN | ActualFEB |预算FEB | ActualMAR | BudgetMAR ....
100 200 300 400 500 600 ....
我想将预算列总结到当月(月(今天()) 与实际列相同。
所以,如果我们目前在2月份,那么
迄今为止的预算将是:600 = 200 + 400
实际到目前为:400 = 100 + 300
我似乎无法到达那里,至少简单而优雅。
答案 0 :(得分:1)
这是一个执行数组操作的非数组公式。因此,应避免使用大范围参考,否则您将遇到系统速度减慢或潜在崩溃的问题。对于小的定义范围,只要公式不重复太多次,效果都很好。
此外,TODAY()是一个volitile函数,这意味着只要电子表格中的任何内容发生变化,公式就会重新计算,而不仅仅是当与公式相关的内容发生变化时。
这个公式有点概括,因此您的数据可以放在工作表的任何位置,而不需要重新排列数据。
要获得实际金额,请使用以下内容:
=SUMPRODUCT($C$4:$H$4*(COLUMN($C$4:$H$4)-COLUMN($C$4)+1<=MONTH(TODAY())*2)*(LEFT($C$3:$H$3)="B"))
要获得预算金额,请使用以下内容:
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<div data-ng-app="" data-ng-init="price=5">
<h2>Cost Calculator</h2>
Price: <input type="number" ng-model="price">
<input type="number" ng-model="price">
<p><b>Total in dollar:</b> {{price+price}}</p>
</div>
</body>
</html>
更改C4:H4以适合您的号码范围。 ChangeC3:H3适合您的列标题范围。将C4更改为您的号码范围的第一个单元格。
警告:假设从1月开始最多12个月
概念证明:
答案 1 :(得分:0)
我建议以不同方式构建数据。如果您垂直排列所有内容并将数据分成三列,那将是一项更容易的任务。第一个是类别,它将填充“预算”或“实际”。下一列将是月。之后,当然,您拥有值列。然后,使用基本的SUMIF,例如“= SUMIF(A1:A6,”预算“,C1:C6)。” A1:A6是Excel将扫描所需变量的范围。在这种情况下,该变量是“预算”。然后,C1:C6是对应于“预算”月份的值。只要您扩展SUMIF公式以包含全部值,例如“SUMIF(A1:A317,”预算“,C1:C317),该公式将为您提供所需的答案。”
答案 2 :(得分:0)
所以我认为我明白你要做的是什么,我不能在没有电子表格的其余部分的情况下制作整个公式,但这目前正在运作:
对于实际:
=IF(MONTH(TODAY())=1,A2,IF(MONTH(TODAY())=2,A2+C2,IF(MONTH(TODAY())=3,A2+C2+E2,"")))
预算:
=IF(MONTH(TODAY())=1,B2,IF(MONTH(TODAY())=2,B2+D2,IF(MONTH(TODAY())=3,B2+D2+F2,"")))
以下是我为测试而创建的电子表格:
如果你给我剩下的数据我可以完成公式,基本上你需要做的就是给公式增加几个月并改变它添加的数量。
我确信可能有更有效的方法来实现这一目标,但这种方式有效。
答案 3 :(得分:0)
我建议使用隐藏行来控制日期。比如说,1月在C列,输入[C1] = 1,[D1] = C1,[E1] = C1 + 1,[F1] = E1。选择E1:F1并向右复制到12月。隐藏第1行。
在第2行中使用这两个公式。
[C2] ="Actual" & UPPER(TEXT("1/" & C$1,"mmm"))
[D2] ="Budget" & UPPER(TEXT("1/" & D$1,"mmm"))
选择C2:D2并向右复制到12月。此练习不是必需的,因为生成的显示正是您已有的。但是在公式的帮助下产生这个结果可以确保免于错误,而且速度更快。作为额外的奖励,您可以直观地检查隐藏行中的内容。
现在,您可以使用此公式从第3行中提取您拥有值的总计。
=SUMIFS($C3:$Z3,$C$2:$Z$2,"Budget*",$C$1:$Z$1,"<="&MONTH(TODAY()))
将“预算”更改为“实际”,相同的公式将提取实际金额。