【Google Apps Script】 개량판: 체크박스에서 스프레드시트의 특정 행 표시/숨기기 전환

소개



스프레드시트에 체크박스를 배치하고 활성 상태에 따라 지정된 행을 표시/숨기기로 전환하고 싶습니다.
요 전날 거의 같은 기사 를 투고했습니다만, 범용성 있는 사양으로 조금 바꾸었으므로 재투고.

완성도





아래 준비



스프레드시트를 새로 만듭니다.
  • A1~A3에 “야채” “고기” “물고기”를 입력.
  • B1~B3에 체크 박스를 배치. 체크 박스는 삽입 → 체크 박스로 배치할 수 있습니다.
  • A6~A30에 카테고리, B6~B30에 재료 이름을 넣습니다. 수가 많아서 귀찮다면, 각 카테고리 2~3개로 OK입니다.



  • 도구 → 스크립트 편집기를 선택하고 다음 코드를 붙여넣습니다.

    코드 전문


    var CHECKBOX_COLUMN = 2; // チェックボックスの列
    var CHECKBOX_COUNT = 3; // チェックボックスの数
    var HIDDEN_FIELD_START = 6; // 何行目から消すのか
    var HIDDEN_FIELD_END = 30; // 何行目まで消すのか
    
    // スプレッドシートの値が変更された時に発火
    function changeEvent() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var activeCell = sheet.getActiveCell();
      if (activeCell.getColumn() == CHECKBOX_COLUMN && activeCell.getRow() <= CHECKBOX_COUNT){ // チェックボックス範囲の値が変更された場合
        checkBoxEvent(sheet);
      }
    }
    
    // チェックボックスのチェック状態に合わせて表示・非表示を切り替える
    function checkBoxEvent(sheet) {
      var rows = sheet.getRange(1, CHECKBOX_COLUMN, CHECKBOX_COUNT, 1).getValues();
      hiddenFields(sheet);
      var dataRows = sheet.getRange(HIDDEN_FIELD_START, 1, HIDDEN_FIELD_END - HIDDEN_FIELD_START + 1, 1).getValues();
      for (var i = 0; i < rows.length; i++) {
        if (rows[i][0] === true) { // チェックが付いている場合、
          var showRow = sheet.getRange(i + 1, CHECKBOX_COLUMN - 1).getValue();
          for (var j = 0; j < dataRows.length; j++) {
            var targetRow = j + HIDDEN_FIELD_START;
            if (dataRows[j] == showRow) {
              sheet.showRows(targetRow); // チェックボックスの1個左のセルの値と一致する行数を表示する
            }
          }
        }
      }
    }
    
    // 非表示行エリアを全非表示にする
    function hiddenFields(sheet) {
      sheet.hideRows(HIDDEN_FIELD_START, HIDDEN_FIELD_END - HIDDEN_FIELD_START + 1);
    }
    

    동작 확인



    스프레드시트의 커서를 B 열의 어딘가에 놓습니다.
      if (activeCell.getColumn() == CHECKBOX_COLUMN && activeCell.getRow() <= CHECKBOX_COUNT){ // チェックボックス範囲の値が変更された場合
    

    소스 코드에서 보면 이 부분, B1~B3의 값 변경 이벤트에만 발화하도록 설정하고 있기 때문입니다.

    스크립트 편집기에서 실행 → 함수 실행 → changeEvent를 선택합니다.
    실행 허가의 윈도우가 나오므로 과거 기사 스쿠쇼 를 참고해 주세요.

    스프레드시트의 10~30행째가 숨겨지고, 체크 ON으로 되어 있는 왼쪽 이웃의 카테고리만 표시되면 성공입니다.

    트리거 설정



    체크 박스를 변경하면, 스프레드 시트의 변경 이벤트를 트리거로서 changeEvent 함수가 자동 실행되도록 자동으로 행의 표시/비표시를 설정합니다.

    스크립트 편집기 "편집 → 현재 프로젝트 트리거"또는 시계 아이콘에서 트리거 설정 화면으로 날아갑니다.
    오른쪽 하단의 "트리거 추가"에서 아래와 같이 설정합니다.





    추가 (2019/10/21)


    function changeEvent() {
    

    ,
    function onEdit() {
    

    하는 것만으로 트리거를 설정하지 않아도 마음대로 움직입니다.

    좋은 웹페이지 즐겨찾기