Я новичок и мне нужно написать скрипт, который будет подсчитывать количество раз, которое ячейка, значение в которой вычисляется по формуле (без ввода данных пользователем), меняло значение в течение дня, а затем в полночь сбрасывает обратный отсчет до 0
Я пытался использовать код onEdit, но он работает только с изменениями пользовательского ввода и не учитывает, когда формула изменяет значение ячейки на основе других значений
Вот ссылка на образец таблицы - https://docs.google.com/spreadsheets/d/1QfM764_cPbtN46oDSbGBFgVNYZ1R6dwxIs744cyRsS4/edit?usp=sharing
Столбец H имеет сигнал (покупка или продажа), который рассчитывается на основе цен и может меняться в течение дня.
В коде должно быть указано количество раз, когда сигнал был на покупке или продаже в течение дня, а затем сброс в конце дня.
Любая помощь будет очень признательна, так как я очень застрял в этом.
EDIT
Я придумал этот код, который работает с одной строкой данных:
function Counter(e) {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Counter");
var r = s.getRange("H2");
var v= r.getValue();
var h = s.getRange("N2").getValue();
if(v !== h) {
var sCounter = s.getRange("I2");
var timestamprange = s.getRange("J2")
var formattedDate = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd HH:mm:ss");
var counter = sCounter.getValue();
if(counter === 0) {
counter = 1;
} else {
counter ++;
}
sCounter.setValue(counter);
timestamprange.setValue(formattedDate)
;}
s.getRange(2, 14).setValue(v)
}
Как настроить код так, чтобы он был одинаковым для диапазонов "H2: H51", "I2: I51", "J2: J51"?
РЕДАКТИРОВАТЬ 2:
Я попробовал самостоятельно и придумал этот код, который не работает:
function Test() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Counter");
var newvalues = s.getRange("H2:H51").getValues();
var oldvalues = s.getRange("N2:N51").getValues();
for(n=0;n<newvalues.length;++n){
var nv = newvalues[n][0] ;
var o = oldvalues[n][0] ;
if(nv !== o) {
var sCounter = s.getRange("I2:I51");
var timestamprange = s.getRange("J2:J51");
var formattedDate = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd HH:mm:ss");
var counter = sCounter.getValues();
if(counter[n][0] === 0) {
counter[n][0] = 1;
} else {
counter[n][0] ++;
}
sCounter.setValues(counter[n][0]);
timestamprange.setValue(formattedDate);
}
}
s.getRange("N2:N51").setValues(newvalues)
}
Любые идеи приветствуются!