Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Проставление текущей даты при замене статуса в ячейке

Автор Иулия06, 21.02.2025, 13:14:44

« назад - далее »

Иулия06

Здравствуйте!
Существует ли формула, которая проставляет текущую дату, если значение в соседней ячейке изменилось, при этом каждый раз при замене значения ячейки проставляется новая текущая дата? (см. https://docs.google.com/spreadsheets/d/1XOr-mKd-kx62vXOgq_d8RJOFmcqo3v9hy5VyCvfnqXE/edit?hl=ru&gid=0#gid=0)
В примере я показала, как бы менялись статусы и даты, таблица всегда одна и та же.
технически, это человек из списка выбирает новый статус, варианты замен указала правее на разные даты, по факту это замена текущего статуса (или пусто) на новый. Да, конечно, уже были проставлены статусы ранее, но появилась необходимость в указании даты только сейчас.

Дмитрий Щербаков(The_Prist)

#1
Формулами зафиксировать дату изменения ячейки не получится - все функции, которые отвечают за получение даты, будут обновляться при изменении ЛЮБОЙ ячейки.
Можете попробовать сделать так:
=lambda(timestamp;ЕСЛИ(B1<>"";timestamp;ЕСЛИОШИБКА(1/0)))(ТДАТА())реагирует на изменение в ячейке В1. Но, как и писал выше - скорее всего будет обновляться при изменении и других ячеек. Особенность функций текущих даты и времени.
Так что скорее всего - только скриптами можно добиться желаемого.
Я бы показал на Вашем файле - но Вы доступ к нему закрыли.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия06

Ой, я забыла снять ограничение, я сняла сейчас, если получится написать скрипт, было бы здорово :-[

Иулия06

Я бы показал на Вашем файле - но Вы доступ к нему закрыли.
[/quote]
Ой, я забыла снять ограничение, я сняла сейчас, если получится написать скрипт, было бы здорово :-[

Дмитрий Щербаков(The_Prist)

function onEdit(e) {
  const specificSheet = "Лист1"   // имя листа, на котором будет отслеживание изменений
  const lToTrack_Col = 2; //номер столбца, в котором отслеживать изменения
  const lToWriteDate_Col = 3; //номер столбца, в который вносить дату изменения
  var actRng = e.range;
  var sheet = e.range.getSheet();

  //Проверяем, что имя листа, на котором произошло событие соответствует указанному в переменной specificSheet
  if (sheet.getName() !== specificSheet) {
    //если событие произошло на другом листе, то прекращаем выполнение функции
    return;
  }
  var column = actRng.getColumn();
  var row =   actRng.getRow();
  if (column == lToTrack_Col && row >= 3)
  {
    sheet.getRange("B1").setValue(e.value);
    sheet.getRange(row, lToWriteDate_Col).setValue(new Date());
  }
}
Обратите внимание на:
const specificSheet = "Лист1"   // имя листа, на котором будет отслеживание изменений
const lToTrack_Col = 2; //номер столбца, в котором отслеживать изменения
const lToWriteDate_Col = 3; //номер столбца, в который вносить дату изменения
Если у Вас лист называется не "Лист1", а иначе - записать нужное имя.
То же самое с номерами столбцов.
В файле скрипт прописал.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия06

Спасибо огромное!
Я все прописала в своей таблице, выскакивает эта ошибка. Можете подсказать, в чем может быть причина?

20:41:52    Ошибка   
TypeError: Cannot read properties of undefined (reading 'range')
onEdit    @ дата статуса.gs:5

Дмитрий Щербаков(The_Prist)

Цитата: Иулия06 от 24.02.2025, 20:45:33Я все прописала в своей таблице
Я дал готовый код, прописал его в книгу по Вашей же ссылке. Никаких ошибок он не выдает. Если только таблица не изменилась по структуре.
А ошибка вполне красноречива - достаточно хотя бы переводчиком воспользоваться: невозможно получить диапазон. А это значит, где-то либо нет доступа к диапазону, либо он изначально неверно определяется. А здесь опять же: я код проверил и он отлично работает. Как и куда Вы вставили его у себя, что там за книга и что там с доступами к ней - я не знаю. Но явно где-то что-то сделали не так.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия06

Я поняла, он отрабатывает, но только, если изначально ячейка не была заполнена (так что, все супер), но если же заполнена, то не отрабатывает, попробую, конечно, понять почему.
А в ячейке B1 надо что-то прописывать изначально?

Дмитрий Щербаков(The_Prist)

Цитата: Иулия06 от 25.02.2025, 09:57:19но если же заполнена, то не отрабатывает
Нет. При любом изменении ячейки в столбце В отрабатывает. Т.е. если изменили значение ячейки в столбце В(начиная с 3-ей строки) - отработает.
Цитата: Иулия06 от 25.02.2025, 09:57:19А в ячейке B1 надо что-то прописывать изначально?
А какое отношение В1 вообще имеет? Скрипт отрабатывает только для ячеек, начиная с 3-ей строки(если Вы ничего не меняли, конечно).

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Иулия06

Ура, у меня все получилось! Спасибо огромное!!!

Яндекс.Метрика Рейтинг@Mail.ru