Как исключить ячейку из диапазона?

Помогите найти решение, пожалуйста. Есть столбец в таблице с данными. Задача: при внесении данных в любую ячейку этого столбца- проверить, нет ли уже такого значения в других ячейках этого столбца и уведомить пользователя (проверка на дубль). Как пробежать циклом по столбцу я знаю, но не знаю как сделать так, чтобы он не учитывал текущую ячейку при проверке. Спасибо.


Ответы (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.

→ Ссылка