오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

구글시트, 업무 자동화 특별 스터디 (2강) | 정말 쉬운, 나만의 커스텀 메뉴 만들기⚡

라이브 113 회 2022년10월22일 위캔두 Plus

강의 소개

1. 구글 Apps Script 주요 연산자 살펴보기

구글시트 연산자 살펴보기_R

오늘 강의에서는 구글 Apps Script 코딩에서 중요한 연산자를 핵심만 골라 빠르게 살펴봅니다.

.
구글 시트 연산자 사용 실습_R

이후 각 주요 연산자의 사용법을 실전 예제와 함께 단계별로 실습합니다.

2. Apps Script 논리문 (IF) 실전 예제

앱스크립트 if 논리문_R

이후 Apps Script의 논리문(IF)의 기본 문법과 사용법을 간단한 예제와 함께 알아봅니다.

.
앱스크립트 논리문 예제_R

이후 IF 함수를 사용해 각 구간별 BMI를 계산하는 사용자 함수를 직접 만들며 실습합니다.

3. 팝업창 활용 및 커스텀 메뉴 만들기

앱 스크립트 팝업 입력창_R

마지막으로 팝업창을 출력해 사용자에게 값을 입력받아 코드를 실행하는 방법을 알아봅니다.

.
구글시트 커스텀 메뉴_R

마지막으로 구글 시트에 나만의 커스텀 메뉴를 등록하고 사용하는 방법을 알아봅니다.

라이브 미션

  1. 사전미션 ① : BMI를 계산하는 커스텀 함수
    /* 사전미션 ①
     * BMI를 계산하는 커스텀 함수를 작성해보세요!
     */
     
    /**
     * BMI(체질량지수)를 계산합니다.
     * 
     * @param height 키를 "cm" 단위로 입력합니다.
     * @param weight 몸무게를 "kg" 단위로 입력합니다.
     * @customfunction
     */
    
    function BMI(height, weight) {
    	//var result = weight / (height/100)**2
    }
  2. 사전미션 ② : 현재 시간을 알림창으로 출력하는 코드
    /* 사전미션 ②
     * 현재 시간을 알림창으로 출력하는 코드를 작성해보세요!
     */
     
    function printTime() {
    
    	// 현재 시간을 [yyyy년 MM월 dd일] HH시 mm분 형태로 받아옵니다.
    	var newTime = new Date;
    	var timeZone = Session.getTimeZone();
    	var displayTime = Utilities.formatDate(newTime, timeZone, "[y년 M월 d일] H시 m분")
    	
    	//var ui = ... 로 안내창을 출력하는 코드를 작성해보세요!
    	
    }

보충 자료

 ✅ 구글시트 Apps Script 자동화 스터디 2일차 완성 코드

📋Session.getTimeZone 함수는 아직 사용가능하나 향후 미지원 될 예정으로, 함수 작성시 위에 취소선이 표시될 수 있습니다.
그럴 경우, "getTimeZone" 대신 "getSciprtTimeZone" 함수를 사용하면 취소선 없이 코드를 작성할 수 있습니다.
/**
 *  사전미션 - 첫번쨰 미션 (BMI 계산하기)
 *  */
 
/**
 * BMI(체질량지수)를 계산합니다.
 * 
 * @param height 키를 "cm" 단위로 입력합니다.
 * @param weight 몸무게를 "kg" 단위로 입력합니다.
 * @customfunction
 */
 
function BMI(height, weight) {
 
  if (!height || !weight) {
    throw "키(cm) 또는 몸무게(kg)가 누락되었습니다.";
  }
 
  var result = weight / (height/100)**2;
  var condition;
 
  if (result > 25) {
    condition = "비만";
  } else if (result > 23) {
    condition = "과체중";
  } else if (result > 18.5) {
    condition = "정상";
  } else {
    condition = "저체중";
  }
 
  return result.toFixed(2)+" ("+condition+")";
 
   //var result = weight / (height/100)**2
 
}
 
/**
 *  사전미션 - 두번쨰 미션 (현재 시간 출력하기)
 *  */
 
function printTime() {
 
	// 현재 시간을 [yyyy년 MM월 dd일] HH시 mm분 형태로 받아옵니다.
	var newTime = new Date;
	var timeZone = Session.getTimeZone();
	var displayTime = Utilities.formatDate(newTime, timeZone, "[y년 M월 d일] H시 m분")
 
	//var ui = ... 로 안내창을 출력하는 코드를 작성해보세요!
  var ui = SpreadsheetApp.getUi();
  ui.alert(displayTime);
 
}
 
/**
 *  연산자 살펴보기
 *  */
 
function test() {
  var a = 1;
  a = a + 1;
  a += 1;
 
}
 
/**
 *  입력창으로 키/몸무게 받아온 후, BMI 출력/계산하기
 *  */
 
function printBMI() {
 
  var app = SpreadsheetApp;
  var ui = SpreadsheetApp.getUi();
  var height = ui.prompt("키를 cm단위로 입력하세요.").getResponseText();
  var weight = ui.prompt("몸무게를 kg단위로 입력하세요.").getResponseText();
  var result = weight / (height/100)**2;
 
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeCell = activeSheet.getActiveCell();
 
  activeCell.setValue(result.toFixed(2));
 
  ui.alert("당신의 BMI는 "+result.toFixed(2)+" 입니다.");
 
}
 
/**
 *  나만의 커스텀 메뉴 등록하기
 *  */
 
function initCustomMenu() {
 
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu("커스텀메뉴");
  var submenu = ui.createMenu("기능모음");
 
  menu.addItem("BMI입력","printBMI");
  menu.addSeparator();
 
  menu.addItem("현재시간출력","printTime")
  menu.addSeparator();
 
  submenu.addItem("BMI입력","printBMI");
  submenu.addItem("현재시간출력","printTime");
 
  menu.addSubMenu(submenu);
  menu.addToUi();
 
}
 
/**
 *  구글 시트 실행 트리거 이벤트 코드
 **/
 
function onOpen() {
  initCustomMenu();
}
댓글 5
5 (3개 평가)
테카포
테카포 2023.03.18 21:53
앱스크립트 강의 너무 소중합니다. !! 감사합니다!! 더 많은 강의 간절히 부탁드립니다!!
ATOM
ATOM 2023.07.13 11:50
안녕하세요
  var timeZone = Session.getTimeZone(); 에서
getTimeZone 이 취소선으로 나타납니다.
왜 그런걸까요?
오빠두엑셀
오빠두엑셀 작성자 2023.07.16 15:12
안녕하세요.
getTimeZone 함수가 폐기되어서(사용 불가하게 될 예정) 그렇습니다.
아직 geTimeZone 함수는 사용 가능하나, getTimeZone 대신 getScriptTimeZone 함수를 사용해보세요 :)
감사합니다.
Screenshot_2
ATOM
ATOM 2023.07.18 16:01
감사합니다.
강민준🤗
강민준🤗 2024.08.12 09:54
좋은 강의 정말 감사합니다🙇‍♂️