我正在尝试将一系列年度经常性业务成本分配到 12 个月内,以使每个月的总支出尽可能接近。手动执行此操作非常很耗时,我一直在想办法将这些值自动排序到相关列中。附件是一些值的简化表和另一张手动分布表的图像,以说明我正在寻找的结果。尝试使用 Excel 中的 Solver 来解决这个问题,但没有任何进展 - 我愿意尝试任何其他电子表格软件来解决这个问题(Numbers [真实数据当前所在的位置]、Google Sheets、SmartSheet 等)。
有同事建议使用类似 scipy.optimize 的 Python 库吗?但我是 Python 的初学者,所以说实话这似乎有点不可能
答案1
我将尝试逐步告诉您如何在 LibreOffice Calc 中解决这个问题。由于解决方案中使用的函数对于所有类型的电子表格都是相同的,因此您可以将此方法应用于任何可用的工具。
首先,让我们稍微转换一下源数据 - 您在第一个屏幕截图中显示的内容不合适。让我们制作一个这样的表格:三列将包含商品名称、其成本以及需要将此成本归因于的月份数。
稍微向右,从第一行的 E 列开始,我们将写出与我们需要获得的组数相同的零。在这种情况下,我们谈论的是 12 个月 - 这意味着将有 12 个零。如果您需要装载 20 个重量大致相同的箱子,那么将有 20 个零。我希望你明白我的意思。
现在让我们开始计算。在单元格 C2 中我们输入公式=MATCH(MIN(E1:P1);E1:P1;0)
。这将查找上一行中的最小值并返回其数字 - 本质上是此付款到期的月份数字,即第二行 B 列中的付款。在单元格 E2 中我们输入公式=IF(COLUMN()-4=$C2;E1+$B2;E1)
。此公式将下一笔付款添加到当前累积金额最小的列中:
现在将单元格 E2 向右拉伸至零行的末尾(在我们的例子中,至 P 列)。
现在将所有公式延伸到可用数据的末尾。它应该看起来像这样:
选择左边的表并基于它创建一个数据透视表:
你会得到如下结果:
是的,你看到的不是 Jan、Feb、Mar,而是 1、2、3...... 但这是一个大问题吗?
如果得到的结果不太理想,请尝试更改原始表中行的顺序(例如,对其进行排序),然后更新数据透视表:(对于按降序排序的示例数据,我得到了131,136,131,126,121,132.122,128,127,123,125,122)