Добрый вечер. Вопрос по Google Sheet. Имеется лист, на котором есть столбик с выпадающим списком. Внизу идет подсчет, сколько выбрано рабочих дней, а сколько выходных. Суть в том, что когда набирается 4 выходных, нужно, чтобы блокировалась возможность в этом столбце поставить еще выходной и всплывало сообщение об этом. Нужно при помощи "Проверки данных" или какого-то скрипта реализовать данную возможность. Пока что удалось добиться такого при помощи "проверки данных", но тогда у меня пропадает возможность выбирать значение из выпадающего списка.
Ниже прикладываю скриншот того, как это должно выглядеть в рабочем виде.
Добрый вечер. Вопрос по Google Sheet. Имеется лист, на котором есть столбик с выпадающим списком. Внизу идет подсчет, сколько выбрано рабочих дней, а сколько выходных. Суть в том, что когда набирается 4 выходных, нужно, чтобы блокировалась возможность в этом столбце поставить еще выходной и всплывало сообщение об этом. Нужно при помощи "Проверки данных" или какого-то скрипта реализовать данную возможность. Пока что удалось добиться такого при помощи "проверки данных", но тогда у меня пропадает возможность выбирать значение из выпадающего списка.
Ниже прикладываю скриншот того, как это должно выглядеть в рабочем виде.dimanechaev2015
Можно "Проверку данных" данных "потратить" на организацию выпадающих списков, а проверку на превышение заданного количества выходных сделать скриптом примерно такого вида: [vba]
Код
function onEdit(e) { var range = e.range; // SpreadsheetApp.getActive().getActiveRange();
if (range.getSheet().getName() == 'Лист4') { // тут указать свой лист var waColFirst = 2; // номер первой колонки рабочей области (wa = work area) var waColLast = 3; // номер последней колонки раб.области var waRowFirst = 2; // номер первой строки раб.области var waRowLast = 11; // номер последней строки раб.области var maxDaysOff = 4; // максимальное кол-во выходных на колонку дня
var vals = range.getSheet().getRange(waRowFirst, range.getColumn(), waRowLast-waRowFirst+1).getValues(); var cnt = 0; vals.forEach(v => { if (v[0] == 'Выходной') cnt++ }); if (cnt > maxDaysOff) { Browser.msgBox('Выходных в этот день станет больше '+maxDaysOff+' ! Отменяем ввод!'); if (range.getNumRows() == 1 && range.getNumColumns() == 1) { range.setValue(e.oldValue); // для одной ячейки восстанавливаем предыдущее значение } else { range.clearContent(); // если вдруг в редактируемом диапазоне несколько ячеек, то стираем все } } } } }
[/vba]
Можно "Проверку данных" данных "потратить" на организацию выпадающих списков, а проверку на превышение заданного количества выходных сделать скриптом примерно такого вида: [vba]
Код
function onEdit(e) { var range = e.range; // SpreadsheetApp.getActive().getActiveRange();
if (range.getSheet().getName() == 'Лист4') { // тут указать свой лист var waColFirst = 2; // номер первой колонки рабочей области (wa = work area) var waColLast = 3; // номер последней колонки раб.области var waRowFirst = 2; // номер первой строки раб.области var waRowLast = 11; // номер последней строки раб.области var maxDaysOff = 4; // максимальное кол-во выходных на колонку дня
var vals = range.getSheet().getRange(waRowFirst, range.getColumn(), waRowLast-waRowFirst+1).getValues(); var cnt = 0; vals.forEach(v => { if (v[0] == 'Выходной') cnt++ }); if (cnt > maxDaysOff) { Browser.msgBox('Выходных в этот день станет больше '+maxDaysOff+' ! Отменяем ввод!'); if (range.getNumRows() == 1 && range.getNumColumns() == 1) { range.setValue(e.oldValue); // для одной ячейки восстанавливаем предыдущее значение } else { range.clearContent(); // если вдруг в редактируемом диапазоне несколько ячеек, то стираем все } } } } }