आप किसी सूची से डेटा सत्यापन के विपरीत पूछ रहे हैं। प्रभावी रूप से आप चाहते हैं कि डेटा सत्यापन सफल होने के बजाय विफल हो जाए, अगर मूल्य सूची में है। यह डेटा सत्यापन के साथ संभव नहीं है, लेकिन एक स्क्रिप्ट इसे कर सकती है।
निम्नलिखित स्क्रिप्ट पर विचार करें। यह स्क्रिप्ट सभी संपादन पर नज़र रखती है, और जब एक सेल वैल्यू उसी कॉलम में किसी अन्य सेल वैल्यू को डुप्लिकेट करता है, तो एक संदेश बॉक्स पॉप करता है।
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 से शुरू होती है, तो मैं अपने सिर के ऊपर से याद नहीं रख सकता, इसलिए इस कोड में बग हो सकता है
ऑनडिट सत्यापन की कुंजी अनावश्यक गणना से बचाने के लिए जितनी जल्दी हो सके बाहर निकलना है। किसी फ़ंक्शन से सबसे तेज़ निकास एक खाली रिटर्न स्टेटमेंट है।