在不相等的行之间划分值以平衡它们

时间:2015-07-23 22:19:12

标签: google-sheets

我的电子表格结构如下:

Section        Total       Incoming     New Total
AK             56,445      2,655        59,100
AL             58,304      796          59,100
B              55,524      3,576        59,100
C              54,272      4,828        59,100
D              53,956      5,144        59,100
S              59,161      0            59,161
-
Generated Pts  16,999

我试图自动化" Incoming"柱。工作表的目标是通过在每行之间分配生成的Pts来尽可能地平衡总计,直到不再有点为止,确保最低总数首先增加,以便更高的值不会增加而值更低存在。

这可以在电子表格中使用吗?关于如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:0)

我尝试了自定义功能。传递两个参数:与Total列对应的范围,以及包含生成的pts的单元格。然后返回Incoming数组。

function distribute(range, value) {
  var indexedRange = range.map(function (e, index) {return [e[0], e[0], index];});
  indexedRange.sort(function (a, b) {return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;});
  var count = 0, i = 0, limit = indexedRange.length - 1;
  while (count < value) {
    indexedRange[i][0] ++;
    i = i == limit || indexedRange[i][0] <= indexedRange[i + 1][0] ? 0 : i + 1;
    count++;
  }
  indexedRange.sort(function (a, b) {return a[2] < b[2] ? -1 : a[2] > b[2] ? 1 : 0;});
  return indexedRange.map(function (e) {return [e[0] - e[1]];});    
}

它符合您的预期结果,但您可能希望尝试使用不同的数据来检查我的逻辑是否正常。