Добрый день. Не могу придумать ни скрипта, ни логики по защите данных ввода в ячейку. Суть задачи такова: Есть Диапазон А1:A100, в нем есть данные "Брак", "Экспорт". В диапазоне B1:B100 в каждой ячейке имеется выпадающий список с уже прописанными значениями. Нужно чтобы если в A1=Брак то B1 не могли вносить значения, ну и так далее по диапазонам.
Настроить проверку данных по кастомной формуле типа "=NOT(A1="Брак")" и поставить галочку "Запрещать ввод данных". Плюс сообщение можно для полного счастья добавить с объяснением причин.
PiShim, тогда, наверное, только ловить событие onEdit() и защищать соседнюю ячейку через Range.protect() или устанавливать новую проверку данных через Range.setDataValidation().
Владимир, решил написать примерно то что вы обозначили выше, но состоящих из 2 диапазонов которые могут заполнить 3 по условию. Теперь надо построчно прописать изменения, то есть A1=Брак, то B1=Запрет
function somname(){//функция которая проверяет два массива данных и сводит один по условию
var cell = SpreadsheetApp.getActive().getRange('A46:A50');
var range = SpreadsheetApp.getActive().getRange('D45:D50');
var range2 = SpreadsheetApp.getActive().getRange('C45:C45');
var cell2 =SpreadsheetApp.getActive().getRange('B46').getValue();
if(cell2=="Брак"){
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range2).build();
cell.setDataValidation(rule);}
else{var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cell.setDataValidation(rule);};
Владимир, сейчас не могу, уехал от рабочего места. До этого пытался перевести функцию на события построчно
пока написал так, пока не работает времени нет доработать ...
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var row = e.range.getRow();
var colum = e.range.getColumn();
var value = e.source.getActiveSheet.getRange(row, 1).getValue();
var range1 = SpreadsheetApp.getActive().getRange('D45:D50');
var range2 = SpreadsheetApp.getActive().getRange('C45:C45');
var cell2_1 = SpreadsheetApp.getActive().getRange("B46").getValue();
if (colum == 1 && value =="B46"){
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range1).build();
cell.setDataValidation(rule);
PiShim, мне кажется очень сомнительным что у вас жестко прописаны ссылки на ячейки, вплоть до одной конкретной (B46). Обычно это не самая хорошая идея. Но нужно видеть таблицу чтобы что-то сказать.
Владимир, спасибо большое за рабочий скрипт. Правда спасибо, но у меня проблема что значения в ячейку подгружаются путем присваивания A6=A$473$ и так получается что скрипт не работает без события.
Владимир, В ячейку A6 у меня значения перетягиваются при помощи importrange с другого документа, далее из ячейки A6 значения при помощи формулы автоматически перетягиваются в ячейку A473, на этом моменте скрипт не хочет работать. Извиняюсь за наглость, может есть возможность связаться по видеосвязи?
Владимир Юрченков открыл, но не нашел защита по условию. Мне нужно если в ячейке A1 есть Брак, то B1 блочилась для ввода данных и так по всему диапазону