Функция скрипта Google Apps и формула массива не дают желаемого результата - PullRequest
0 голосов
/ 18 марта 2020

В column B формула =ARRAYFORMULA(IF(A4:A="","",((A4:A-A3:A)/A3:A)*100)) работает как ожидалось. Поэтому я думал, что та же самая формула массива будет работать и с другими формулами, но в column C формула:

=ARRAYFORMULA(IF(A4:A="","",IF(ROW(A4)<B1+3,0,IF(ROW(A4)=B1+3,AVERAGE(INDEX(A:A, ROW(A4)-(B1-1)):INDEX(A:A,ROW(A4))),IF(ROW(A4)>B1+3,AVERAGE(INDEX(A:A, ROW(A4)-(B1-1)):INDEX(A:A,ROW(A4))))))))

не дает ожидаемого результата, однако она все еще расширяется до row 4375.

И в столбце D я использовал функцию сценария google app, которая была только потому, что моя формула в column C не дала ожидаемого результата, но функция ниже расширяет намного больше, чем row 4375, когда я на самом деле хочу, чтобы он расширялся только до row 4375:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("D4").setFormula("IF(ROW(A4)<$B$1+3,0,IF(ROW(A4)=$B$1+3,AVERAGE(INDEX(A:A, ROW(A4)-($B$1-1)):INDEX(A:A,ROW(A4))),IF(ROW(A4)>$B$1+3,AVERAGE(INDEX(A:A, ROW(A4)-($B$1-1)):INDEX(A:A,ROW(A4))))))");

  var lr=ss.getLastRow();
  var filldown= ss.getRange(4,4,lr-4);
  ss.getRange("D4").copyTo(filldown);
}

Однако он дает ожидаемый результат до row 4375

Что я делаю неправильно в формуле в column C и функции для column D?

Вот ссылка на лист: https://docs.google.com/spreadsheets/d/1TFf6XO2aIiphIJC3Wp9Bx9Lr6X6R9AevyssdOLeDCcg/edit?usp=sharing

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...