カスタム関数が受け取る引数は、範囲ではなく、JavaScript値またはダブル配列です。たとえば、customfunction(A1:A3, B2:D2)
は、引数[[x], [y], [z]]
と[[x,y,z]]
を受け取ります。ここで、x、y、zは、これらのセルに格納されている値です。
特に、配列はブール値の配列で、JavaScriptの独自のfilter
メソッドで使用できます。ここでは、カスタム関数としてFILTER
関数の再実装です:
function myFilter(arr, conditions) {
if (conditions.length == 1) {
return arr.map(function (row) {
return row.filter(function (_, i) {
return conditions[0][i];
});
});
}
else {
return arr.filter(function (_, i) {
return conditions[i][0];
});
}
}
の比較でこれを使用するには、arrayformula
ラッパーが必要になります。
=arrayformula(myfilter(A1:C10, D1:D10 > 5))
理由は返しD1:D10 > 5
ラッパー、なしということですD1 > 5
と同じです。組み込みのFILTER
関数は、配列と連動する関数として既に知られているので、ラッパーのような必要はありません。
「conditions.length == 1」スコープが使用されているかどうかはわかりません。 また、複数の条件についてはどうでしょうか、条件配列はどのように見えますか? – sylr
フィルタの条件の配列は、行または列のいずれか1次元でなければなりません。長さ== 1は行を表し、[[[x、y、z]] 'となります。そうでなければ、列['[x]、[y]、[z]]'です。複数の条件があった場合は、 'return conditions [0] [i] && moreConditions [0] [i];' ... –