我试图在 12 个月内分配大量年度经常性业务成本,以使每个月的总支出尽可能接近。手动执行此操作非常耗时,我一直在尝试找出一种方法将这些值自动排序到相关列中。附件是一些值的过于简化的表格和手动分发的表格的另一张图像,以举例说明我正在寻找的结果。尝试在 Excel 中使用 Solver 来解决这个问题,但没有任何进展 - 我愿意尝试任何其他电子表格软件来解决这个问题(Numbers [当前真实数据所在]、Google Sheets、SmartSheet 等)。
有同事建议使用具有 scipy.optimize 之类的 python 库吗?但我绝对是 Python 的初学者,所以这似乎有点不可能
我将尝试逐步告诉您我是如何在 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 列)。
现在将所有公式延伸到可用数据的末尾。它应该看起来像这样:
选择左表并基于它创建数据透视表:
你会得到这样的结果:
是的,您将看到 1、2、3,而不是 Jan、Feb、Mar……但这是一个大问题吗?
如果您得到的结果不太理想,请尝试更改原始表中行的顺序 - 例如,对其进行排序 - 并更新数据透视表:(对于按降序排序的示例数据,我得到了 131, 136 , 131, 126, 121, 132. 122, 128, 127, 123, 125, 122 )