web-dev-qa-db-ja.com

数式をその結果でどのように置き換えますか?

20枚以上のシートで構成されるGoogleスプレッドシートを作成しました(すべて同じ方法でフォーマットされています)。私が働いている会社はコンテナを積んでいます。それらのシートの1つは、それらの20以上のシートのそれぞれの特定のパラメーター(countifs式)を計算し、その日にロードされたコンテナーの合計値を提供します。たとえば、11/20/14に5つのコンテナをシート1、シート2 = 6コンテナ、シート3 = 7コンテナなどにロードしたとします。11/ 20 /にロードされたコンテナの合計数を計算します。 14と数字を吐き出します。ここまでは大丈夫です。

問題は、シートへのロードが完了したら、これらのシートをクリアして再利用する必要があることです。つまり、シートが処理およびクリアされると、上記のパラメーターに付加された値はすべて削除されます。したがって、合計値が11/20/14にロードされた20コンテナーであり、シート1の5コンテナーをクリアすると、値は15コンテナーになります。しかし、実際には20でした。

シートが処理されてクリアされる前に、翌日の初めに終了値をコピーして貼り付けようとしましたが、シートが処理されて翌日の前にクリアされると、状況が同期しなくなることがあります。

「今日」の後に自動的に値を設定し、式に関連付けられなくなる方法はありますか?

繰り返しますが、Googleスプレッドシートでの作業です。それが答えであれば、スクリプトを実装するための段階的なヘルプが必要になります。

6
Edward

概要シートの数式出力をスクリプトで「フリーズ」するには、copyToメソッドとオプションcontentsOnly:trueを使用できます。これを使用して、値を別の場所にコピーしたり、まったく同じセルにコピーしたりすることができます(したがって、数式を出力で上書きします)。これは、「SummarySheet」という名前のシートのセルA1:A10に対してこれを行う簡単なスクリプトです。

このようなプロセスを定期的に実行するには、毎日凍結する必要があるセルを決定する必要があります。これは特定のワークシートに固有のものです。

function freezeOutput(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SummarySheet");
  var range = sheet.getRange("A1:A10");     
  range.copyTo(range, {contentsOnly:true});
}
5
user79865
function RunReplaceInSheet(){
    var sheet = SpreadsheetApp.getActiveSheet()
    replaceInSheet(sheet,"'§'","");
}

function replaceInSheet(sheet, to_replace, replace_with) {
  //get the current data range values as an array
  var values = sheet.getDataRange().getValues();

  //loop over the rows in the array
  for(var row in values){

    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value){
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }

  //write the updated values to the sheet
  sheet.getDataRange().setValues(values);
}
1
Zs András