2017-11-21 8 views
0

Google 시트의 데이터 유효성 검사를 사용하여 다음 상황을 달성하려고합니다. 아래 이미지에서 잘린 버전의 상황을 제공했습니다.다른 셀 값을 기반으로하는 동적 데이터 유효성 검사 및 각 행에 상대적으로 낮은 유효성 검사 기준 복사/채우기 (Google 스프레드 시트)

C 열 (또는 같은 행에있는 여러 열)의 옵션을 자동으로 검사하여 해당 행에 대한 드롭 다운 메뉴를 채우는 B 열에서 데이터 유효성 검사를 설정하고 싶습니다.

Google 스프레드 시트에 데이터 유효성 검사 화면의 수식 옵션이 있고이 지역에 배열 수식을 쓰려고했지만 어떤 종류의 결과물도 얻지 못했습니다.

이 메뉴를 통해 수행 할 수없는 경우 스크립트를 통해이를 달성하는 방법을 알려 주시면 감사하겠습니다. 이를 달성하기

Spreadsheet illustrating situation

답변

0

한 가지 방법은 데이터 유효성 검사 편집기의 "기준"절에 list from a range을 선택하는 것입니다. 그런 다음 드롭 다운에 값을 표시 할 셀을 선택하십시오.

Example Data Validation settings

유일한 문제는이 칼럼을 통해이를 기입 할 때, 구글 시트가 기준 범위를 업데이트 할 것입니다. 세포 B2에서

  1. , list from a range에 따라 데이터 유효성 검사를 사용하여 기준 범위로 D2:F2를 선택하면 다음과 같이 말한다. 이제 B2의 드롭 다운은 여전히 ​​것,
  2. 그런 다음 옵션 존의 엄마, 요한의 아버지, 존의 할머니가 아래로 채우거나 당신이 세포 B3의 드롭 다운을 열 때 전체 열
  3. 를 통해 다운이 셀을 복사합니다 옵션 존의 엄마, 요한의 아버지, 존의 할머니

불행하게도, Google 스프레드 시트를하지 않습니다 현재 내가 아는까지로, 상대적으로 데이터 유효성 검사 참조 또는 수식을 작성/복사 내장 해결책을 가지고 있습니다. 하지만 누군가가 이미 Google Docs forum post에 멋진 스크립트를 작성한 것 같습니다. 대답으로 연결되는 링크 만 피하기 위해 스크립트와 지침을 복사합니다. Google 문서 포럼의 AD:AM 크레디트

자신의 스크립트 사용 방법 :

  1. 이, 유효성 검사 + 사용자 정의 메뉴에서 상대적으로
  2. 을 사용하면 데이터 유효성 검사 규칙을 복사 할 걸쳐 셀 범위를 모두 선택 (해당 옵션을 선택합니다 상대 참조 상부 왼쪽 셀의 검증이 범위의 나머지 복사 될
  3. 절대 열 또는 행 절대)

Link to original solution's example Google Sheets with script already included - 자신의 복사본을 저장 한 다음 사용을 시작할 수 있습니다.

처음부터 다시 만들려면 여기 스크립트가 있습니다.

function onOpen() 
{ 
    SpreadsheetApp.getActiveSpreadsheet().addMenu 
    (
    "Validation+", 
    [ 
     {name: "Copy validation (all relative references)", functionName: "copyValidation"}, 
     {name: "Copy validation (relative rows, absolute columns)", functionName: "copyValidationColumnsAbsolute"}, 
     {name: "Copy validation (absolute rows, relative columns)", functionName: "copyValidationRowsAbsolute"} 
    ] 
); 
} 

function copyValidation(rowsAbsolute, columnsAbsolute) 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var r = ss.getActiveRange(); 
    var dv = r.getDataValidations(); 
    var dvt = dv[0][0].getCriteriaType(); 
    if (dvt != SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) return; 
    var dvv = dv[0][0].getCriteriaValues(); 
    Logger.log(dvv); 
    for (var i = 0; i < dv.length; i++) 
    { 
    for (var j = i ? 0 : 1; j < dv[0].length; j++) 
    { 

     dv[i][j] = dv[0][0].copy().withCriteria(dvt, [dvv[0].offset(rowsAbsolute ? 0 : i, columnsAbsolute ? 0 : j), dvv[1]]).build(); 
    } 
    } 
    r.setDataValidations(dv); 
} 

function copyValidationRowsAbsolute() 
{ 
    copyValidation(true, false); 
} 

function copyValidationColumnsAbsolute() 
{ 
    copyValidation(false, true); 
}