0

最初の質問はpatt0によって解決されたので、これは私の2番目の質問です。

シートを編集するたびにチェックする編集中の作業スクリプトがあり、列のいずれかのセルの値が. 7 を "RECEBER" に変更すると、行全体が別のシートにプルされます。最初は、それでうまくいくだろうと思っていましたが、onEdit には、やりたいことと互換性のない制限があることがすぐにわかりました。

私は onEdit に頼ることができないので、いつでも (patt0 によって提案されたように) 作成されたメニューからスクリプトを実行したいと考えています。これは、スプレッドシート全体に対して一度に行うことも、シートごとに行うこともできます(両方の解決策は同様であり、両方の方法が私にとって非常に便利だと思います)。

これが私が持っているコードです(機能していません-以前の編集コードから適応されました):

この最初の部分は、シート名が 1 から 31 の間であるかどうかを確認するために格納されています。

function mustBeCopied(sheetName) {
  var sheetNumber = parseInt(sheetName);
  if (sheetNumber <=31 && sheetNumber >=1)
    return true;
  return false;
}

この 2 番目の部分は、onEdit 関数からもたらされたものであるため、おそらくいくつかの問題があります。

function RECEBER() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // stores the active spreadsheet (where the script is being ran)
  var s = ss.getActiveSheet(); // stores the Active sheet within the stored spreadsheet
  var r = ss.getActiveRange(); // stores the range of rows in my document ?
  if(mustBeCopied(s.getName()) && r.getColumn() == 7 && r.getValue() == "RECEBER") { // if mustBeCopied, when applied to the sheet defined in the s variable is satisfied, it will check on every row if the value "RECEBER" is in its 7th column.
    var row = r.getRow(); // stores the row that satisfied the condition
    var numColumns = s.getLastColumn(); // stores the last column on the sheet ?
    var targetSheet = s.getSheetByName("money"); // sets the target sheet
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); // gets range on the target sheet and adds one more row for the new data to be inserted
    s.getRange(row, 1, 1, numColumns).copyTo(target); // writes the data into the target sheet, but I don't understand how..
  }
}

何が起こっているのかを理解しているかどうかを確認するために、段階的な分析を行っています..

これは非常に簡単に実行できると確信しており、学びたいと思っていますが、ネット上で解決策を見つけることができないようです..これはすでに議論されているテーマだと思いました. これを自動的に行うことができれば、毎月多くの時間を節約できます。また、コンピューターで処理されるため、人的ミスのリスクも減少します。

誰かが私を助けてくれることを願っています..ありがとう。

4

1 に答える 1