我的电子表格结构如下:
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来尽可能地平衡总计,直到不再有点为止,确保最低总数首先增加,以便更高的值不会增加而值更低存在。
这可以在电子表格中使用吗?关于如何做到这一点的任何建议?
答案 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]];});
}
它符合您的预期结果,但您可能希望尝试使用不同的数据来检查我的逻辑是否正常。