この例が明確であることを願っています。 join
およびfilter
を試しましたが、以下のように表示するSummaryフィールドを取得できません。
行1はサブジェクトのリストです。行2は、教師の科目割り当てです(ルックアップから計算)。セルにゼロ以外の値がある場合、Summaryセルが各行を単純に処理し、その数値を取得してサブジェクトに連結し、リストの最後に移動するようにします。
スクリプトを試してみてください。
次のコードを使用すると、必要に応じて概要を準備できます。
function mySummary(header, range) {
var output1 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var output2 = [];
for(var j=0, jLen=range[0].length; j<jLen; j++) {
var value = range[i][j];
if(value != "" || value > 0) {
output2.Push(value + " " + header[0][j]);
}
}
output1.Push([output2.sort().join(", ")]);
}
return output1;
}
カスタム関数を使用するには、2つのパラメーターが必要です:header&range。最初の反復(var i = 0)は行を処理し、2番目の(var j = 0)は列を処理します。各セルは、空(""
)またはゼロ以外(> 0
)の値について評価されます。いずれかがtrue
の場合、結果は中間配列(output2
)にプッシュされます。最初の行が完了すると、結合された結果がソートされ、結合されて、2番目の行から始まる前に新しい出力配列(output1
)にプッシュされます。
サンプルファイルを作成しました:特別な概要
Tools> Script editorの下にスクリプトを追加し、保存ボタンを押します。
次の式を使用しても同様に実行できます。
=JOIN(
", ", ==> delimiter join
TRANSPOSE(
SORT(
TRANSPOSE( ==> data sort
SPLIT(
JOIN( ==> data for split
",", ==> delimiter join
ARRAYFORMULA(
IF(
A2:D2<>"", ==> if statement
A2:D2 & " " & $A$1:$D$1, ==> true statement
"" ==> false statement
)
)
),
"," ==> delimiter split
)
),
1, ==> column index sort
TRUE ==> ascending or descending
)
)
)
copy/paste
=JOIN(", ",TRANSPOSE(SORT(TRANSPOSE(SPLIT(JOIN(",",ARRAYFORMULA(IF(A2:D2<>"",A2:D2 & " " & $A$1:$D$1, ""))),",")),1,TRUE)))
サンプルファイルを作成しました:特別な概要
公式はかなり長いと思います。他の基準を追加すると、さらに長くなります。利点は、結果の迅速な再計算です。短所は、ARRAYFORMULA
にもかかわらず、スクリプトバージョンのように範囲を指定できないことです。