セルの範囲があり、列が特定の行の最大値を持つ回数を増やしたいと考えています。
サンプル:
headers -> a b c d e f g h
0 0 12 18* 1 0 0 0
30* 0 15 25 0 0 0 0
35 0 19 31 0 0 31 50*
40 10 19 31 0 2 5 55*
期待される:
#max val per row-> 1 0 0 1 0 0 0 2
最大値にはアスタリスクが付いています。列のa
スコアは 2 番目のデータ行に最大値があるd
ため 1、列のスコアも 1 番目のデータ行に最大値があるため 1、列のh
スコアは 3 番目と 4 番目のデータに最大値があるため 2 です。行。残りの列はどの行にも最大値がないため、0 になります。
1行だけで、各列にこの式をコピーできますが、それで十分ですが、 max row-wise を適用するものが必要ですCOUNTIF(B2:B10, MAX($B2:$B10))
。
私はこの Google Apps スクリプトを作成しましたが、その応答性が気に入りません (セルに "読み込み中..." がほぼ 1 秒間表示されるのは、ネイティブ関数で得られる迅速さと比較して、ちょっと腹立たしいことです)。
function countMaxInRange(input) {
return [input.map(function(row) {
var m = Math.max.apply(null, row);
return row.map(function(x){return x === m && 1 || 0});
}).reduce(function(a, b){
var s = Array(a.length);
for (var i = 0; i < a.length; i++) {
s[i] = (a[i] + b[i]) || 0;
}
return s;
})];
}
そのコードを組み込み関数に置き換える方法についてのアイデアはありますか? 一定数の補助行または列を追加してもかまいません (つまり、データセットを拡張する場合、新しいデータ行または列ごとにヘルパー行または列を手動で追加したくありません)。 )。
各行の最大値を持つ列のヘッダーを収集する追加の列を追加できると思います。次に、各データ列について、ヘッダーがその補助列に表示される回数を数えますが、あまりきれいに見えません。