목록에서 데이터 유효성 검사의 반대를 요구하고 있습니다. 실제로 값이 목록에 있으면 성공하는 대신 데이터 유효성 검사에 실패하게됩니다. 데이터 유효성 검사로는 불가능하지만 스크립트로 가능합니다.
다음 스크립트를 고려하십시오. 이 스크립트는 모든 편집 내용을 모니터링하고 셀 값이 동일한 열의 다른 셀 값과 중복 될 때 메시지 상자를 표시합니다.
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 검증의 핵심은 불필요한 계산을 피하기 위해 가능한 빨리 종료하는 것입니다. 함수에서 가장 빠른 종료는 빈 리턴 문입니다.