Как настроить подставление текущей даты, при заполнении соседней ячейки?

Добрый день.
Есть таблица, в нее вводятся данные и нужно чтобы было отслеживание по вводу. В силу некоторых обстоятельств, формы не выход.
Была написана формула:
=IF(D201="акт";"=now()";"wait")
Формула проверяет, если в ячейке D201 имеется слово акт, то подставляется формула =now(). Проблема в том, что формула вставляется в ячейку как текст. Как сделать чтобы она выполнялась?

заранее спасибо
  • Вопрос задан
  • 46122 просмотра
Решения вопроса 2
Kalaganov5
@Kalaganov5
Реклама, Аналитика, Веб-разработка
Google docs Скрипт автоматического заполнения ячеек

Ниже представлен скрипт автоматического заполнения ячеек первого и второго столбца датой и временем, при изменении ячейки из третьего столбца.
Работает скрипт так:
если обнаружена правка в документе,
проверяем, изменена ли ячейка из третьего столбца и это изменение произведено на листе с названием "Лист1", если да,
проверяем, не пустая ли ячейка из первого столбца (если не пустая, значит дата была уже ранее проставлена, соответственно время и дату не меняем).
если пуста, то
в ячейку первого столбца добавляем дату в формате: год.месяц.день
в ячейку второго столбца добавляем время GMT+03 в формате: час:минуты
f46
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var idCol = e.range.getColumn();
var idRow = e.range.getRow();
if ( idCol == 3 && sheet.getName() =='Лист1' ) {
var Value = e.range.offset(0, -2).getValues(); // Смотрим что в ячейке с лева на 2
if ( Value == "" ) {

var vartoday = getDate();
var varnow = getTime();


sheet.getRange(idRow, 1).setValue( vartoday );
sheet.getRange(idRow, 2).setValue(varnow);
}
}
}

// Returns YYYYMMDD-formatted date.
function getDate() {
var today = new Date();
today.setDate(today.getDate());
//return Utilities.formatDate(today, 'PST', 'yyyy.MM.dd');
return Utilities.formatDate(today, 'GMT+03:00', 'yyyy.MM.dd');
}

function getTime() {
var today = new Date();
today.setDate(today.getDate());
//return Utilities.formatDate(today, 'PST', 'yyyy.MM.dd');
return Utilities.formatDate(today, 'GMT+03:00', 'HH:mm');
}


Нашёл тут
А также вот
Ответ написан
@CompBOO Автор вопроса
Все, включил мозг и решил проблему..
=IF(D201="акт";now();"wait")
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@Ilyas_B
Сложность задачи в том, что при использовании формул, гуглдоки обновляют ее каждый раз, когда происходит синхронизация, часто возникают ситуации, когда нам нужно зафиксировать дату, когда произошло то или иное событие в какой то из ячеек.
Для этого я использовал макрос Владимир Калаганов и немного его изменил.

function onEdit(e) {
var sheet = e.source.getActiveSheet();
var idCol = e.range.getColumn();
var idRow = e.range.getRow();

if ( idCol == 1 && sheet.getName() =='Проверка' ) { 
//указываем место, где будем писать, точнее его номер и имя листа
  var Value = e.range.offset(0, 2).getValues(); // Смотрим что в ячейке справа на 2
  if ( Value == "" ) {
//если там пусто, то пишем дату
    var vartoday = getDate();
    sheet.getRange(idRow, 3).setValue( vartoday );
//показывает где именно писать дату
} 
}
  if ( idCol == 9 && sheet.getName() =='Проверка' ) {
  var Value = e.range.offset(0, 3).getValues(); 
  var Value1 = e.range.offset(0, 0).getValues();
    if ( Value == "" && Value1=="Одобрено") {
    var vartoday = getDate();

    sheet.getRange(idRow, 12).setValue( vartoday );
} 
}

}



// Returns YYYYMMDD-formatted date.
function getDate() {
var today = new Date();
today.setDate(today.getDate());
//return Utilities.formatDate(today, 'PST', 'dd.MM.yyyy');
return Utilities.formatDate(today, 'GMT+07:00', 'dd.MM.yyyy');
}


5ee885835def4677729712.png
Ответ написан
@akachur
Можно сделать еще таким образом
Если нужно ставить текущую дату при внесении информации в соседнюю колонку, можно использовать такую формулу:
=ЕСЛИ(C6<>"";ТДАТА();)
Ответ написан
@stendi
Использую формулу:
=IF(K5="sample";now();)

Дату вставляет как только в ячейке К5 появляется нужный текст. Но - проблема!
Если размножаю формулу по колонке и в ячейках К6, К7, ..., появляется необходимый текст - все даты сразу синхронизируются в текущую дату.
Как исправить, чтобы соседние даты оставались прежними?
Ответ написан
@MarikMG
Здравствуйте.
Подскажите, почему данные скрипты работают только с моей учетки (у других они не срабатывают).
Как это исправить? Что бы работало у всех, кто пользуется моей таблицей. Спасибо.
----------
Проблема решилась отключением Chrome V8.
Есть еще вопросик:
Для своей таблицы я упростил скрипт до такого вида:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var idCol = e.range.getColumn();
var idRow = e.range.getRow();

if ( idCol == 4 && sheet.getName() =='Time' ) { //Указываем столбец и имя листа для проверки

    var vartoday = getDate();
    sheet.getRange(idRow, 3).setValue( vartoday ); //Столбец для вставки даты
  
}
  
if ( idCol == 10 && sheet.getName() =='Time' ) { //Указываем столбец и имя листа для проверки

    var vartoday = getDate();
    sheet.getRange(idRow, 9).setValue( vartoday ); //Столбец для вставки даты
}
}



// Returns YYYYMMDD-formatted date.
function getDate() {
var today = new Date();
today.setDate(today.getDate());
//return Utilities.formatDate(today, 'PST', 'dd.MM.yyyy');
return Utilities.formatDate(today, 'GMT+03:00', 'dd.MM.yyyy');
}

Дату он проставляет довольно медленно, хотелось бы ускорить процесс.
Можно ли ограничить зону проверки на редактирование? В моем случае достаточно проверять до 27 строки (включительно). И поможет ли это?
Ответ написан
@Jan300385a
Здравствуйте. Подскажите пожалуйста скрипт для заполнения даты в колонке А (без перезаписи даты при изменении), при внесении данных в любую ячейку строки. Пример внёс данные в ячейку B2,C2, D2 и.т.д., а в ячейку А2 подставляется текущая дата. Первая строчка это названия колонок, нужно чтобы скрипт работал начиная со строки 2
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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