0
セルの値に基づいて行を移動しようとしていますが、私が書いた関数が機能します。ただし、スクリプトをタイムアウトさせるために24行を超える行がある場合。常にタイムアウトになるので、ループをより高速または効率的に実行する方法はありますか?Google App Script - Googleスプレッドシートセルの値に基づいて行を効率的に移動
このスクリプトは列7(G)のセル値を読み取り、販売人名の1つと一致する場合は、その名前を持つシートにコピーします。ここで
function CopyDataToNewFile() {
// How Many Columns over to copy
var columsCopyCount = 11; // A=1 B=2 C=3 ....
// What Column to Monitor
var columnsToMonitor = 7; // A=1 B=2 C=3 ....MONITORS SALES PERSON NAME
//TARGET SPREAD SHEETS
var salesPerson1 = "Lorna";
var salesPerson2 = "Sarah";
var salesPerson3 = "Mark";
//SOURCE SPREAD SHEET
var ss = SpreadsheetApp.openById('1S3F0Dekyda4g77j_a150Obz0IDNKtWMU2WlGDSXdcD4');
var sourceSpreadSheetSheetID = ss.getSheetByName("importdata");
var sourceSpreadSheetSheetID1 = ss.getSheetByName(salesPerson1);
var sourceSpreadSheetSheetID2 = ss.getSheetByName(salesPerson2);
var sourceSpreadSheetSheetID3 = ss.getSheetByName(salesPerson3);
var numRows = sourceSpreadSheetSheetID.getLastRow()+1;
for(var i = 2; i < numRows; i++)
{
var r = sourceSpreadSheetSheetID.getRange(i, columnsToMonitor);
var rValue = r.getValue();
if(rValue == salesPerson1) {
var targetRange = sourceSpreadSheetSheetID1.getRange(sourceSpreadSheetSheetID1.getLastRow() + 1, 1);
sourceSpreadSheetSheetID.getRange(i, 1, 1, columsCopyCount).copyTo(targetRange), {contentsOnly: true};
//sourceSpreadSheetSheetID.deleteRow(i);
}else if (rValue == salesPerson2) {
var targetRange = sourceSpreadSheetSheetID2.getRange(sourceSpreadSheetSheetID2.getLastRow() + 1, 1);
sourceSpreadSheetSheetID.getRange(i, 1, 1, columsCopyCount).copyTo(targetRange), {contentsOnly: true};
//sourceSpreadSheetSheetID.deleteRow(i);
}else if (rValue == salesPerson3) {
var targetRange = sourceSpreadSheetSheetID3.getRange(sourceSpreadSheetSheetID3.getLastRow() + 1, 1);
sourceSpreadSheetSheetID.getRange(i, 1, 1, columsCopyCount).copyTo(targetRange), {contentsOnly: true};
//sourceSpreadSheetSheetID.deleteRow(i);
}else {//Fail Safe
var targetRange = sourceSpreadSheetSheetID1.getRange(sourceSpreadSheetSheetID1.getLastRow() + 1, 1);
sourceSpreadSheetSheetID.getRange(i, 1, 1, columsCopyCount).copyTo(targetRange), {contentsOnly: true};
//sourceSpreadSheetSheetID.deleteRow(i);
}
}
}
スクリプトを使用してシートのコピーです。スクリプトはスクリプトエディタから実行できます。
私は以下のコードを最適化しているあなたに
素晴らしい!迅速な対応に感謝します。それは完璧に動作し、シート全体を即座に処理します。 –
最後の1つの質問で、この最後の行が行をクリアします。移動された行を完全に削除すると、データ間に空の行がありません。ありがとうございます –
私はコードを変更しました。 – Ritz