以下以图片为例:
左侧是我目前拥有的原始数据,包括A,B,C,D,E,F组的列。每行代表1个游戏,并且播放了许多游戏(此电子表格有数千行) 。
如何生成团队排名,就像我在右侧手动执行的那样?我想按照他们拥有的分数对队伍进行排序。
在第一排,A队得分最高,因此排名第一; C队得分排在第二位,因此排在第二位,等等。
我无法确定如何按行排序,而不是按列排序,这是默认的sort()函数的作用。我尝试了多种方法,包括使用谷歌SQL查询功能(https://developers.google.com/chart/interactive/docs/querylanguage),但无法弄清楚如何使用它。
在这种情况下使用ArrayFormula()是个好主意吗?我该如何实现?这个表有几千行,所以如果我可以将ArrayFormula()放在第一行,而不是手动自动填充每一行,那将会好得多。
答案 0 :(得分:1)
对于单元格H2,您可以使用costum公式:
=ArraySort(A1:F1,A2:F2001)
这里是要粘贴到脚本编辑器中的代码:
function ArraySort(Arr1, Arr2) {
var w = Arr1[0].length;
var column = [];
var row = [];
var result = [];
for (var i = 0; i < Arr2.length; i++) {
row = [];
for (var k = 0; k < w; k++) {
column[k] = [Arr2[i][k],Arr1[0][k]];
}
column.sort(sortFunction);
for (var j = 0; j < w; j++) {
row[j] = column[j][1];
}
result.push(row);
}
return result;
}
function sortFunction(a, b) {
if (a[0] === b[0]) {
return 0;
}
else {
return (a[0] > b[0]) ? -1 : 1;
}
}
答案 1 :(得分:0)
以下公式在第二行中创建排名:
=array_constrain(transpose(sort(transpose({A$1:F$1; A2:F2}), 2, False)), 1, 6)
可以向下复制以对其余行进行排名。我不认为有一种arrayformula方法可以对数组数组进行排序。
公式说明:它创建一个两行数组(团队名称和分数),对其进行转置,使得分数成为第二列,按该列排序,再次转置,并仅保留名称(第一行)