Bir listeden veri doğrulamanın tersini istiyorsunuz. Sonuçta, değer listede varsa, başarılı olmak yerine veri doğrulamanın başarısız olmasını istiyorsunuz. Veri doğrulama ile bu mümkün değildir, ancak bir komut dosyası bunu yapabilir.
Aşağıdaki betiği düşünün. Bu komut tüm düzenlemeleri izler ve bir hücre değeri aynı sütundaki başka bir hücre değerini çoğalttığında bir ileti kutusu açar.
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]
+ '"'
) ;
}
}
Gerekli çeşitli pratik iyileştirmeler olacak. Örneğin, yalnızca belirli sütunları izlemeyi seçebilir ve hücre değerini boşaltmak gibi ek işlemler yapmayı seçebilirsiniz. Boş (eksik) değerler için özel işlem yapmanız gerekebilir. Ancak bu size doğrulamanızı sağlayacak temel tekniği verir.
Güncelleştirme:
Orijinal cevap üzerinde yoğunlaşmak için, şahsen cevapta belirtilen doğrulamaların birkaçını ekleyeceğimi düşündüm.
// İşte sadece bir hücrenin düzenlendiğinden emin olmak için kullandığım bir fonksiyon.
function isRangeSingleCell(range) {
if(range.getRow() === range.getLastRow() && range.getColumn() === range.getLastColumn()) { return true; }
}
Birden fazla hücre düzenlenmişse, kullanmak için onaylamayı atlamanız yeterli
if(!isRangeSingleCell(range_active)) { return; }
Satır ilk satır değilse, doğrulamayı da atlayabilirsiniz:
if(range_active.getRowIndex() != 1) { return; }
Not: Satır sayma 0 veya 1 ile başlarsa başımın üstünden hatırlayamıyorum, bu yüzden bu kod bir hata olabilir
OnEdit onaylarının anahtarı, gereksiz hesaplamalardan tasarruf etmek için mümkün olduğunca erken çıkmanızdır. Bir fonksiyondan en hızlı çıkış boş bir return ifadesidir.