私は Google スプレッドシートのスクリプト エディターは初めてで、あまりプログラマーではありません。私はしばらく前から Google ドキュメントを使用しており、日々の活動において重要なツールになっています。私がやろうとしていることは、次のとおりです。ドキュメント全体を探します(「1」、「2」、「3」などの複数のシートを使用して、月に保持できる日数に対応します)および列 7 に特定の値が表示されている場合 (私の場合は RECEBER になります)、その行のすべてのデータを取得し、この目的のために作成されたシートに書き込みます。何が起こっているかというと、イベント onEdit を使用してこの関数をトリガーしています。一見理想的ですが、私の場合、他のスプレッドシートから大量のデータをコピーし、貼り付けコマンドが onEdit イベントをトリガーしません。その代わり、その行を他のシートにコピーするには、セルを手動で編集する必要があります。1 か月のすべての日が埋まり、変更が残っていれば、一度だけ実行することもできますが、本当にやりたいことは、コンテンツがスプレッドシートに挿入されたらすぐに実行することです。
私のコードには別の問題もあります。アクティブなシートが「1」に等しい場合にのみ if 句が完全な操作を実行するため、他のすべてのシートに合わせて調整する必要があります。とにかく、これには簡単な解決策があると思います。
ネットで見つけたコードは次のとおりです。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "1" && r.getColumn() == 7 && r.getValue() == "RECEBER") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("money");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
私はあなたが与えることができるすべての助けに感謝します. 前もって感謝します。
ディオゴ・スーザ
-- 12Oct更新 --
コードのロジックを変更し、patt0 が提案したように、作成したメニューからスクリプトを実行します。コードを修正しようとしましたが、一部のセクションが間違っていると思います。スクリプトは実行されますが、ターゲット シートに何も書き込まれません。
コードは次のとおりです。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "RECEBER", functionName: "RECEBER"} ];
ss.addMenu("Scripts", menuEntries);
}
function mustBeCopied(sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetNumber = parseInt(sheetName);
if (sheetNumber <=31 && sheetNumber >=1)
return true;
return false;
}
function RECEBER() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var r = ss.getActiveRange();
if(mustBeCopied(s.getName()) && r.getColumn() == 7 && r.getValue() == "RECEBER") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("money");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
Mustbecopied 関数は、私が信じていることから、シートの範囲 (1 から 31) のみを適格に設定します。関数 RECEBER は、列 7 の値が条件 (RECEBER) を満たすかどうかを判断するため、すべての行情報を取得してターゲット シートに移動できます。
多分問題はアクティブなシートの問題です..私は自分の利点を生かして、選択したシートにスクリプトを適用できますか? また、両方のオプション (選択したシートに適用するか、ドキュメント全体に適用するか) があれば、毎日の作業が大幅に簡素化されます。