onEdit() 함수


지정 범위 서식 강제 고정


// ----------------------------------------------------------------------
// 범위 겹침 검사
// ----------------------------------------------------------------------
function rangeIntersect(R1, R2) {
  if (R1.getLastRow()    < R2.getRow()   ) return false;
  if (R2.getLastRow()    < R1.getRow()   ) return false;
  if (R1.getLastColumn() < R2.getColumn()) return false;
  if (R2.getLastColumn() < R1.getColumn()) return false;
  return true;
}

// ----------------------------------------------------------------------
// 수정한 범위와 지정한 범위의 영역이 겹치면 지정 영역 내 모든 셀의 스타일 강제 변경
// - onEdit(event) 내에서 사용
// ----------------------------------------------------------------------
// - sheet: SpreadsheetApp.getActiveSheet()
// - eventRange: event.range
// - sheetName: 시트명(문자열)
// - targetRangeA1: 지정 범위(문자열)
// ----------------------------------------------------------------------
function conditionalFormat(sheet, eventRange, sheetName, targetRangeA1) {
  if(sheet.getName() !== sheetName) return;

  // 시트명이 아니라 gid로 검사하려면 하단 행 사용
  //if(sheet.getSheetId() !== 2038650775) return;

  var targetRange = sheet.getRange(targetRangeA1);
  if(rangeIntersect(targetRange, eventRange)) {
    targetRange
    .setBackground(null)
    .setBorder(false, false, false, false, false, false)
    .setNumberFormat("@")
    .setHorizontalAlignment("left")
    .setFontColor("black")
    .setFontWeight("normal")
    ;
  }
}

// 테스트
function onEdit(event) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var eventRange = event.range;

  conditionalFormat(sheet, eventRange, "시트이름1", "A3:B8");
  conditionalFormat(sheet, eventRange, "시트이름2", "E3:F5");
}

수정한 셀의 값 존재 여부에 따라 상단 외곽선 검정/흰색 설정


// ----------------------------------------------------------------------
// 범위 겹침 검사
// ----------------------------------------------------------------------
function rangeIntersect(R1, R2) {
  if (R1.getLastRow()    < R2.getRow()   ) return false;
  if (R2.getLastRow()    < R1.getRow()   ) return false;
  if (R1.getLastColumn() < R2.getColumn()) return false;
  if (R2.getLastColumn() < R1.getColumn()) return false;
  return true;
}

// ----------------------------------------------------------------------
// 수정한 셀의 값 존재 여부에 따라 상단 외곽선 검정/흰색 설정
// ----------------------------------------------------------------------
function automateCeilBorder(sheet, eventRange, sheetId, targetRangeA1) {
  // if(sheet.getName() !== sheetName) return;
  if(sheet.getSheetId() !== sheetId) return;

  var WHITE = "#ffffff";
  var BLACK = "#000000";

  var targetRange = sheet.getRange(targetRangeA1);
  if(rangeIntersect(targetRange, eventRange)) {

    // 여러 셀을 동시에 수정한 경우, 무시
    if(eventRange.getNumRows() * eventRange.getNumColumns() > 1)
      return;

    // 상단 검은선
    if(eventRange.getValue().length > 0)
    {
      eventRange
      .setBorder(true, null, null, null, false, false, BLACK, SpreadsheetApp.BorderStyle.SOLID)
      ;
    }
    // 상단 흰선
    else
    {
      eventRange
      .setBorder(true, null, null, null, false, false, WHITE, SpreadsheetApp.BorderStyle.SOLID)
      ;
    }
  }
}

function onEdit(event) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var eventRange = event.range;
  automateCeilBorder(sheet, eventRange, 1621150376, 'B7:C56');
  automateCeilBorder(sheet, eventRange, 2038650775, 'B7:C55');
}