Google 스프레드 시트 열에서 고유성 강요


37

이름이 열 중 하나 인 수많은 열이있는 Google 스프레드 시트 (데이터베이스로 작동)를 만들었으며 이름 필드가 항상 고유하고 이름 필드가 다른 필드와 동일한 경우 행을 만들 수 없도록하려고했습니다. 열.

기본적으로 데이터베이스의 기본 키를 만들고 싶습니다. 누구나 Google 스프레드 시트에서이 작업을 수행하는 방법을 알고 있습니까?

도움이된다면 시트에 데이터를 입력하고 사용자가 이미 목록에 다른 사람과 동일한 이름을 입력하지 않도록하는 Google 스프레드 시트 (데이터베이스)와 함께 사용할 양식을 만들었습니다.


4
좋습니다. Excel과 마찬가지로 Google 스프레드 시트는 데이터베이스 엔진이 아닙니다. 이를 올바르게 수행 할 수있는 실제 데이터베이스 백엔드를 고려할 수 있습니다. 우리는 Excel을 데이터베이스로 사용하는 사람들에 대해 20 년 이상 매우 나쁜 경험을 쌓았으며, 모두가 아직까지도 그 교훈을 배워야한다는 것을 싫어합니다. 스프레드 시트! = 데이터베이스. 그것을 배우고, 살고, 사랑하십시오.
Michael Kohne


2
제대로 사용하면 Excel, 텍스트 파일 및 모래 줄이 데이터베이스가 될 수 있습니다. 즉, Google 스프레드 시트의 대규모 멀티 플레이어 기능은 데이터베이스 기능을 몇 개 더 추가 할 수있는 훌륭한 후보가 될 수 있습니다.
윌리엄 Entriken

답변:


53
=COUNTIF($A:$A,"="&A1)  < 2

이것을 열 A의 데이터 유효성 검사 규칙에 대한 사용자 지정 수식으로 입력하면 열 A는 모든 중복을 거부합니다.


이것은 스크립팅에 들어 가지 않고 중복을 강조 표시하는 매우 간단한 방법입니다. 방금 내 아침을 구했어. 고마워!
Matthew

3
공식의 의미를 설명해 주시겠습니까? 무엇 A1을 의미합니까? A2데이터가 두 번째 행에서 시작되면로 변경해야합니까 ?
Tomáš Zato

6

양식을 사용한다고 주장하면 해결책이 없지만 매우 간단한 해결책이 있습니다. 고유 열이 A라고 가정 해 봅시다 .A2에 대해 다음 데이터 유효성 검사 규칙을 만듭니다 (헤더 다음의 첫 번째 레코드). : =COUNTIF($A$1:$A$999,A2)<=1. 그런 다음 셀을 복사하고 전체 열을 선택하고 마우스 오른쪽 단추를 클릭하여 붙여 넣기 특수 하위 메뉴를 펼친 후 붙여 넣기 데이터 유효성 검증 만 클릭하십시오 . 그게 다야!


2

목록에서 데이터 유효성 검사의 반대를 요구하고 있습니다. 실제로 값이 목록에 있으면 성공하는 대신 데이터 유효성 검사에 실패하게됩니다. 데이터 유효성 검사로는 불가능하지만 스크립트로 가능합니다.

다음 스크립트를 고려하십시오. 이 스크립트는 모든 편집 내용을 모니터링하고 셀 값이 동일한 열의 다른 셀 값과 중복 될 때 메시지 상자를 표시합니다.

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 검증의 핵심은 불필요한 계산을 피하기 위해 가능한 빨리 종료하는 것입니다. 함수에서 가장 빠른 종료는 빈 리턴 문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.