web-dev-qa-db-ja.com

新しい列に毎日の値を自動的に記録する

したがって、コンテンツファネルの制御に使用するスプレッドシートがあります。ピボットテーブル以外の何かを使用するためのいくつかの式を考えました。しかし、私が探しているトレンドやアラームを取得するには、このデータを毎日自動的に記録し始める必要があります。これはスプレッドシートです。

enter image description here

列Bと列Cの間に列を追加し、セルC1に現在の日付を設定し、各セルの各数式に対応する値で以下の各セルを完了するスクリプトを探しています。

私が使用しているフォーラムのリストは次のとおりです。

C2: =counta(Check!$J:$J)
C3: =COUNTIF(Check!$L:$L,Validation!$A$6)
C4: =COUNTIF(Check!$L:$L,Validation!$A$7)
C5: =ARRAYFORMULA(countif(Check!$L:$L&Check!$O:$O,Validation!$A$5&"") )
C6: =countif(Check!$O:$O,Validation!$A$1)
C7: =ARRAYFORMULA(countif(Check!L:L&Check!O:O,Validation!A5&Validation!A2) )
C8: =ARRAYFORMULA(countif(Check!O:O&Check!Q:Q,Validation!A1&"") )
C9: =countif(Check!Q:Q,Validation!A1)
C10: =countif(Check!Q:Q,Validation!A2)
C11: =countif(Check!T:T,Validation!A1)

これまでのところ、私はこれだけを達成しました:

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Approval Funnel");
  var source = sheet.getRange("C2:C11");
  var values = source.getValues();
  values[0][0] = new Date();
  sheet.insertColumns(3);

そして、それが私のコーディング知識のフロンティアです。何か案は?

1
Augusto LJ

あなたのドラフトはかなり良いですが、設計上の欠陥があります:BとCの間に値を挿入すると、式を持つ列はDになります。したがって、スクリプトが次にデータを取得しようとすると、間違った場所。

簡単に言えば、記録するデータのsource(つまり、数式の列)は同じ場所にとどまる必要があります。履歴データを右側に配置できます。このような:

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Approval Funnel");
  var source = sheet.getRange("C2:C11");
  var values = source.getValues();
  values = [[new Date()]].concat(values);    // prepending the date to values
  sheet.insertColumnAfter(3);                // inserting AFTER column C
  SpreadsheetApp.flush();         
  sheet.getRange("D1:D11").setValues(values);
}

スクリプトがsetValuesを使用してデータを入力する前に、以前の変更(つまり、列の挿入)が実際に行われることを確認するために、SpreadsheetApp.flush();を配置しました。

また、values[0][0] = new Date();にエラーがありました。このコマンドは、配列の0番目の要素(つまり、C2の内容)を日付で上書きします。日付を追加したかったのですが、これは、1つの要素[[new Date()]]を含む新しい配列を作成し、それに値を連結することで行いました。

1
user79865