2

私はしばらくの間、この質問に対する答えを探していましたが、まったく運がありませんでした。私がする必要があるのは、アプリ スクリプトを使用して、特定の行のすべてのセル (空白のセルでも問題ありません) を別のシートの列にコピーすることです。行の範囲を単一の列にすることもできるのは素晴らしいことですが、私はどんな解決策でも解決します. それが不可能な場合は、それも知っておくとよいでしょう。

現在、数式を使用していますが、処理しようとしているデータの量が多いため、1 つのスプレッドシートで数式の数が制限に達しています。

ありがとう

この配列の例を投稿から引用しましたが、自分の状況に適用する方法がわかりません。

 function transposeArray(array){
    var result = [];
    for(var row = 0; row < array.length; row++){ // Loop over rows
      for(var col = 0; col < array[row].length; col++){ // Loop over columns
        result[row][col] = array[col][row]; // Rotate
      }
    }
    return result;
}

編集:

以下のコードを使用して、目的を達成することになりました。行ごとに移動し、それらを転置してから、前のエントリの下の同じ列 (2 ページ目の B2) に値を設定します。

function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c];     }); });
}

function betaUpdate(fromRange,toAnchor) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheets()[0];
  var destination = ss.getSheets()[1];

////////////////////////////////////////////////////////////////////   July 1
//Row 1
  var fromRange = source.getRange("B5:AD5");  
  var toAnchor = destination.getRange("B2");
  var data = fromRange.getValues();
  var flip = transpose(data);
  var toRange = toAnchor.offset(0, 0, flip.length, flip[0].length);
  toRange.setValues(flip);

//Row2
  var fromRange1 = source.getRange("B6:AD6");  
  var toAnchor1 = destination.getRange("B2");
  var data1 = fromRange1.getValues();
  var flip1 = transpose(data1);
///Offset must be set to the length of previous row 
  var toRange1 = toAnchor1.offset(28, 0, flip1.length, flip1[0].length);
  toRange1.setValues(flip1);

//Row3
  var fromRange2 = source.getRange("B7:AD7");  
  var toAnchor2 = destination.getRange("B2");
  var data2 = fromRange2.getValues();
  var flip2 = transpose(data2);
///Offset must be set to the length of previous row
  var toRange2 = toAnchor2.offset(56, 0, flip2.length, flip2[0].length);
  toRange2.setValues(flip2);

};
4

1 に答える 1