Stai chiedendo il contrario della convalida dei dati da un elenco. In effetti, si desidera che la convalida dei dati abbia esito negativo, anziché riuscita, se il valore è nell'elenco. Questo non è possibile con la convalida dei dati, ma uno script può farlo.
Considera il seguente script. Questo script monitora tutte le modifiche e apre una finestra di messaggio quando un valore di cella duplica qualsiasi altro valore di cella nella stessa colonna.
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]
+ '"'
) ;
}
}
Ci saranno vari perfezionamenti pratici necessari. Ad esempio, è possibile scegliere di monitorare solo determinate colonne e scegliere di intraprendere ulteriori azioni, ad esempio sopprimendo il valore della cella. Potrebbe essere necessario un trattamento speciale per i valori vuoti (mancanti). Ma questo ti dà la tecnica di base che ti permetterà di convalidare.
Aggiornare:
Per elaborare la risposta originale, ho pensato di aggiungere alcune delle convalide che uso personalmente che sono state menzionate nella risposta.
// Ecco una funzione che utilizzo per assicurare che venga modificata solo una cella.
function isRangeSingleCell(range) {
if(range.getRow() === range.getLastRow() && range.getColumn() === range.getLastColumn()) { return true; }
}
Per usarlo basta saltare la convalida se viene modificata più di una cella
if(!isRangeSingleCell(range_active)) { return; }
Puoi anche saltare la convalida se la riga non è la prima riga:
if(range_active.getRowIndex() != 1) { return; }
Nota: non riesco a ricordare la parte superiore della mia testa se il conteggio delle righe inizia da 0 o 1, quindi questo codice potrebbe avere un bug
La chiave per le convalide onEdit è uscire il prima possibile per salvare da calcoli non necessari. L'uscita più rapida da una funzione è un'istruzione return vuota.