Serhii_Kolesnyk
@Serhii_Kolesnyk
Учусь и развиваюсь. Не судите строго.

Как сделать историю изменения значения ячейки в специальную колонку?

Есть общая сумма
Как сделать что бы при любом изменении этой суммы она вписывалась в сроку под названием "история"
Пример
При добавлении суммы 100$ в ячейку Расходы их будет вычтено из общей суммы
Старая сумма 1500$ вписывается в колонку под словом история, а новая вчитывается в колонке А2
И так далее
Другими словами история изменения колонки А2
5f305b37b9ea5297678231.png
И также вопрос. Как сделать, чт бы при введении числа в колонну с названием Расходы, а именно B2, было следующее действие
Сумма, записанная в ячейку B2 перемещалась на ячейку ниже и в тоже время проводила вычитание от общей суммы и ячейка B2 обнулялась
И так по кругу
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
Если кликнуть правой кнопкой - там будет история изменений. Или использовать onEdit() - это менее надёжно, но в простых ситуациях работает.

//Telegram - @ProgrammerForever
function onEdit(event) {
  //Перенос в архив
  //Возникает при изменении ячейки
  var ss = event.source.getActiveSheet();//Текущий лист
  var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
  var row = event.range.getRow();      //Номер строки
  var col = event.range.getColumn();  //Номер столбца
  var newValue = event.value;            //Новое значение
  var oldValue = event.oldValue;        //Старое значение
  
  if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return;	//Указываем на каких листах должен работать скрипт
  //Можно при желании ещё фильтровать по строке/столбцу (row/col), или по старому/новому значению (oldValue/newValue)
  
  const archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
  archive.getRange(archive.getLastRow()+1, 1).setValue(
    formatDateTime(new Date())+" " + "[" + ss.getName() + "!" + address + "] '" + (oldValue==undefined?"":oldValue) + "' >> '" + (newValue==undefined?"":newValue) +"'"
  );
};

function formatDate(date) {
  try{
    var dd = date.getDate();
    if (dd < 10) dd = '0' + dd;
    var mm = date.getMonth() + 1;
    if (mm < 10) mm = '0' + mm;
    var yy = date.getFullYear() % 100;
    if (yy < 10) yy = '0' + yy;  
    
    return dd + '.' + mm + '.' + yy;
  }catch(err){
    return "";
  };
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы