web-dev-qa-db-ja.com

行内のすべての非ゼロ値をそれぞれ列ヘッダーと連結して、1つのセルにマージするにはどうすればよいですか?

この例が明確であることを願っています。 joinおよびfilterを試しましたが、以下のように表示するSummaryフィールドを取得できません。

Example

行1はサブジェクトのリストです。行2は、教師の科目割り当てです(ルックアップから計算)。セルにゼロ以外の値がある場合、Summaryセルが各行を単純に処理し、その数値を取得してサブジェクトに連結し、リストの最後に移動するようにします。

スクリプトを試してみてください。

1
Stu

次のコードを使用すると、必要に応じて概要を準備できます。

コード

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;  
}

スクリーンショット

enter image description here

説明した

カスタム関数を使用するには、2つのパラメーターが必要です:headerrange。最初の反復(var i = 0)は行を処理し、2番目の(var j = 0)は列を処理します。各セルは、空("")またはゼロ以外(> 0)の値について評価されます。いずれかがtrueの場合、結果は中間配列(output2)にプッシュされます。最初の行が完了すると、結合された結果がソートされ、結合されて、2番目の行から始まる前に新しい出力配列(output1)にプッシュされます。

サンプルファイルを作成しました:特別な概要
Tools> Script editorの下にスクリプトを追加し、保存ボタンを押します。

0

次の式を使用しても同様に実行できます。

=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)))

スクリーンショット

enter image description here

サンプルファイルを作成しました:特別な概要

注意

公式はかなり長いと思います。他の基準を追加すると、さらに長くなります。利点は、結果の迅速な再計算です。短所は、ARRAYFORMULAにもかかわらず、スクリプトバージョンのように範囲を指定できないことです。

1