【GAS】풀다운의 연동

16535 단어 GoogleAppsScript

코드 작성 후의 움직임





코드



GAS 코드
function onEdit(e) {

  // リストと一致しなかったら終了
  const value = e.value;
  const list = ['あ行', 'か行', 'さ行', 'た行', 'な行', 'は行', 'ま行', 'や行以降'];
  if (!list.includes(value)) return;


  const range = e.range;
  const sht = range.getSheet();

  // シート名が違ったら終了
  if(sht.getName() !== 'data') return;

  const row = range.getRow();
  const col = range.getColumn() + 1; //入力箇所からズラす列数

  // 入力規則の範囲取得
  const shtName = 'プルダウン';
  const pulldownSht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(shtName);

  // 項目名取得
  const items = pulldownSht.getRange('1:1').getValues().flat().filter(val => val);

  // rangeの取得
  const pulldownCol = items.indexOf(value) + 1;
  const pulldownLastRow = pulldownSht.getMaxRows() - 1;
  const pulldownRange = pulldownSht.getRange(2, pulldownCol, pulldownLastRow, 1);

  // rule作成
  const rule = SpreadsheetApp.newDataValidation();
  rule.requireValueInRange(pulldownRange);

  sht.getRange(row, col).setDataValidation(rule);
}

여기의 시트에서는 풀다운의 Range를 취득해 풀다운을 범위로 지정하고 있으므로,
풀다운 시트에 추가 항목이 있을 때 그것도 대상이 되는 범용적인 쓰기 방법으로 하고 있습니다.

만약 고정으로 좋다고 하는 것이라면, 이쪽이 추천입니다.
시트 API를 두드리지 않는 만큼 움직임이 빨라집니다.

코드 2
function onEdit(e) {


  // リストと一致しなかったら終了
  const value = e.value;
  const list = ['あ行', 'か行', 'さ行', 'た行', 'な行', 'は行', 'ま行', 'や行以降'];
  if (!list.includes(value)) return;


  const range = e.range;
  const sht = range.getSheet();

  // シート名が違ったら終了
  if(sht.getName() !== 'data') return;

  const row = range.getRow();
  const col = range.getColumn() + 1; //入力箇所からズラす列数


  const obj = {
    'あ行': ['', '', '', '', '', ],
    'か行': ['', '', '', '', '', ],
    'さ行': ['', '', '', '', '', ],
    'た行': ['', '', '', '', '', ],
    'な行': ['', '', '', '', '', ],
    'は行': ['', '', '', '', '', ],
    'ま行': ['', '', '', '', '', ],
    'や行以降': ['', '', '', '', '', '', ],
  }

  // rule作成
  const rule = SpreadsheetApp.newDataValidation();
  rule.requireValueInList(obj[value]);

  sht.getRange(row, col).setDataValidation(rule);
}

차이는 rurle requireValueInRange 또는 requireValueInList입니다.

보충



스프레드시트 입력 규칙만으로 구현할 수 있지만,
행수가 많아지면 무거워져 운용적으로 NG였습니다.
GAS로 다르면 바로 처리를 멈추는 방법이 실용적이었습니다.

범위를 지정하는 경우 열의 0 열 앞에서만 움직이거나 설정을 추가해도
좋을까라고 생각하면서, 풀다운의 내용을 오기입하는 것도 적을까라고도 생각하고 있습니다.

좋은 웹페이지 즐겨찾기