Как исключить ячейку из диапазона?
Помогите найти решение, пожалуйста. Есть столбец в таблице с данными. Задача: при внесении данных в любую ячейку этого столбца- проверить, нет ли уже такого значения в других ячейках этого столбца и уведомить пользователя (проверка на дубль). Как пробежать циклом по столбцу я знаю, но не знаю как сделать так, чтобы он не учитывал текущую ячейку при проверке. Спасибо.
Ответы (1 шт):
Конечно, условное форматирование работает быстрее, чем код скрипта. Но все же главный вопрос "как исключить текущую ячейку" задан и надо ответить на него. К сожалению, автор вопроса не приводит свой код, где есть цикл по столбцу. Поэтому мне пришлось написать свой вариант:
function onEdit(e) {
var row = e.range.getRow(), col = e.range.getColumn();
if (col != 3) return; // это если нас интересует ввод именно в колонку 3
var sheet = e.source.getActiveSheet();
var lastRow = sheet.getLastRow();
var values = sheet.getRange(1, col, lastRow).getValues();
var isDuplicate = values.reduce(function(acc, vs, index) {
// Здесь мы исключаем текущую ячейку, поскольку для нее index == row - 1
if (e.value != '' && vs[0] == e.value && index != row - 1) acc = true;
return acc;
}, false);
if (isDuplicate) SpreadsheetApp.getActive().toast('Дубликат!');
}
Здесь цикл реализован в методе reduce и счетчиком цикла является index. Для текущей ячейки ряд row отсчитан от единицы, а index берет начало от нуля. Поэтому в строке сравнения делается поправка на 1.