Este código criará a tabela que você deseja com os dados, conforme mostrado abaixo.
Código
/**
* Create a specific table
*
* @param {range} names The range with names
* @param {range} data The range of all the data
* @return A specific table
* @customfunction
*/
function myTable(names, data) {
var output = [];
for(var i = 0, iLen = names.length; i < iLen; i++) {
var name = names[i][0], nameCount = 0, sum = 0, rows = [];
for(var j = 0; j < 10; j++) {
for(var k = 0, kLen = data[0].length; k < kLen; k++) {
if(names[i][0] == data[j][k]) {
nameCount++;
rows.push(j+1);
}
}
}
if(nameCount != 0) {
sum = rows.reduce(function(a, b) {return a + b;});
output.push([name, nameCount, rows.join(), sum/nameCount]);
}
}
return output.sort(function(a, b) {return b[1] - a[1];}).slice(0,5);
}
Screenshots
data
resultado
Explicado
O intervalo de nomes será usado para iniciar a iteração. No início do intervalo de dados, um contador é definido para esse nome específico mais uma matriz que conterá os números de linha.
Se um nome foi encontrado mais de uma vez ( != 0
), some os números das linhas e adicione os dados ao array de saída. Este array, por sua vez, está sendo classificado, usando a segunda coluna e apenas as primeiras 6 linhas são mostradas.
Nota
Não consegui reproduzir os resultados da sua planilha. Muito provavelmente porque os dados estão sendo renovados ao serem abertos todas as vezes. O exemplo que criei contém dados estáticos. As observações feitas no script servem uma função. Quando a função personalizada é selecionada na planilha, o pop-up de ajuda contém essa informação (JsDoc).
Exemplo
Eu criei um arquivo de exemplo para você: myTable
Adicione o código em Ferramentas > Editor de scripts, pressione o botão salvar e você está pronto para ir.