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スプレッドシートでの作業です。それが答えであれば、スクリプトを実装するための段階的なヘルプが必要になります。
概要シートの数式出力をスクリプトで「フリーズ」するには、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});
}
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);
}