Ви вимагаєте протилежного підтвердження даних зі списку. По суті, ви хочете, щоб перевірка даних не вдалася, а не вдалася, якщо значення є в списку. Це неможливо за допомогою перевірки даних, але сценарій може це зробити.
Розглянемо наступний сценарій. Цей скрипт відстежує всі зміни та відкриває вікно повідомлення, коли значення комірки дублює будь-яке інше значення комірки в тому ж стовпці.
function onEdit( event )
{
// Store the edited sheet.
var sheet_active = event .source .getActiveSheet() ;
// Store the edited range.
var range_active = event .source .getActiveRange() ;
// Store the row, column, and value of the edited cell.
var row_edited = range_active .getRow() ;
var column_edited = range_active .getColumn() ;
var value_edited = range_active .getValue() ;
// Store a range consisting of the column containing the edited cell.
var range_column_edited = sheet_active .getRange(
1 , column_edited ,
sheet_active .getMaxRows() , 1
) ;
// Store an array consisting of the values in the column.
var values_column_edited = range_column_edited .getValues() ;
// Compare each value to the edited cell.
for( var r = 0 ; r < values_column_edited .length ; r++ )
{
if( r+1 == row_edited ) continue ;
if( values_column_edited[r] == value_edited )
Browser .msgBox(
'value_edited="'
+ value_edited
+ '" values_column_edited['
+ r
+ ']="'
+ values_column_edited[r]
+ '"'
) ;
}
}
Будуть потрібні різні практичні уточнення. Наприклад, ви можете вибрати для моніторингу лише певних стовпців, а також можете зробити додаткові дії, такі як вирівнювання значення комірки. Можливо, вам знадобиться спеціальне поводження з порожніми (відсутніми) значеннями. Але це дає вам основну методику, яка дозволить вам підтвердити.
Оновлення:
Щоб детальніше ознайомитись з оригінальною відповіддю, я подумав, що я би додав кілька перевірок, які я особисто використовую, про які було сказано у відповіді.
// Ось функція, яку я використовую, щоб переконатися, що редагується лише одна комірка.
function isRangeSingleCell(range) {
if(range.getRow() === range.getLastRow() && range.getColumn() === range.getLastColumn()) { return true; }
}
Для його використання просто пропустіть перевірку, якщо відредаговано більше однієї комірки
if(!isRangeSingleCell(range_active)) { return; }
Ви також можете пропустити перевірку, якщо рядок не перший рядок:
if(range_active.getRowIndex() != 1) { return; }
Примітка. Я не можу згадати верхню частину голови, якщо підрахунок рядків починається з 0 або 1, тому цей код може мати помилку
Ключовим фактором для перевірки onEdit є вихід якомога раніше, щоб врятувати від зайвих обчислень. Найшвидший вихід з функції - це порожнє повернення.