Google Apps Script로 엑셀 반복 업무 자동화하기: 비개발자도 10분 만에 시작하는 방법

엑셀에서 매일 하던 일을 10분 만에 자동화하는 방법

출근해서 엑셀 파일을 열고, 어제 받은 데이터를 복사하고, 필요한 열을 정리한 다음 담당자에게 다시 보내는 업무가 있습니다. 한 번 하는 데는 몇 분밖에 걸리지 않지만, 같은 작업을 매일 반복하면 이야기가 달라집니다.

이런 반복 작업은 Google Apps Script(GAS) ( ( (자세히 보기)자세히 보기)자세히 보기)로 상당 부분 자동화할 수 있습니다. 특히 코드를 처음 접하는 직장인이라도 복잡한 프로그램을 새로 설치할 필요 없이 Google 스프레드시트에 연결된 스크립트 편집기에서 바로 실행할 수 있다는 점이 장점입니다.

이번 글에서는 개발 지식보다는 실제 업무 상황에 맞춰 보겠습니다. 예제로 거래처별 주문 데이터를 정리하고, 처리되지 않은 주문만 별도 시트로 모으는 작업을 자동화해 보겠습니다.

먼저 자동화할 업무를 하나로 좁혀보세요

처음부터 복잡한 업무 전체를 자동화하려고 하면 오히려 어렵습니다. 다음처럼 사람이 반복해서 하는 동작을 찾아보는 것이 좋습니다.

  • 새로운 데이터를 복사해서 붙여넣기
  • 특정 조건의 행만 찾아 별도 시트에 복사하기
  • 빈칸이나 특정 문구를 확인하기
  • 날짜 형식을 통일하기
  • 거래처별 데이터를 분류하기
  • 매일 같은 형식의 보고용 데이터를 만들기

예를 들어 원본 시트가 다음과 같다고 가정하겠습니다.

주문일 거래처 품목 수량 처리상태
2026-08-11 A거래처 제품A 100 완료
2026-08-11 B거래처 제품B 50 대기
2026-08-11 C거래처 제품C 80 완료
2026-08-11 D거래처 제품D 120 대기

여기서 사람이 매일 하는 일은 간단합니다.

‘처리상태가 대기인 행만 찾아서 대기목록 시트로 복사한다.’

바로 이런 작업이 첫 번째 자동화 대상으로 적합합니다.

1단계. Google 스프레드시트 준비하기

Google 스프레드시트를 새로 만들고 첫 번째 시트의 이름을 주문현황으로 지정합니다.

첫 번째 행에는 반드시 열 제목을 넣습니다.

주문일 | 거래처 | 품목 | 수량 | 처리상태

그리고 두 번째 시트를 만들고 이름을 대기목록으로 지정합니다.

이제 사람이 하던 작업을 코드로 옮길 준비가 끝났습니다.

2단계. Apps Script 편집기 열기

Google 스프레드시트 상단 메뉴에서 확장 프로그램 → Apps Script를 선택합니다.

새로운 스크립트 편집 화면이 열리면 기존에 들어 있는 기본 코드를 지우고 다음 코드를 입력합니다.

실제로 사용할 코드

function makeWaitingList() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = spreadsheet.getSheetByName("주문현황"); const targetSheet = spreadsheet.getSheetByName("대기목록"); const data = sourceSheet.getDataRange().getValues(); // 기존 대기목록 삭제 targetSheet.clearContents(); // 제목 행 복사 targetSheet.getRange(1, 1, 1, data[0].length).setValues([data[0]]); // "대기" 상태인 행만 추출 const waitingRows = data.slice(1).filter(row => row[4] === "대기"); if (waitingRows.length > 0) { targetSheet .getRange(2, 1, waitingRows.length, waitingRows[0].length) .setValues(waitingRows); } }

코드를 처음 보면 낯설 수 있지만, 지금 단계에서는 모든 문법을 이해할 필요가 없습니다.

이 코드가 하는 일은 네 가지입니다.

  1. 주문현황 시트의 데이터를 가져옵니다.
  2. 대기목록 시트를 비웁니다.
  3. 처리상태가 대기인 행만 찾습니다.
  4. 찾은 행을 대기목록에 다시 작성합니다.

3단계. 처음 한 번 실행해보기

스크립트 편집기 위쪽의 함수 선택 메뉴에서 makeWaitingList를 선택한 뒤 실행 버튼을 누릅니다.

처음 실행하면 Google 계정 권한을 요청하는 화면이 나타날 수 있습니다. 스크립트가 해당 스프레드시트의 데이터를 읽고 수정하기 위해 필요한 절차입니다.

권한 승인 후 다시 스프레드시트로 돌아가 대기목록을 확인합니다.

앞의 원본 데이터라면 결과는 다음과 같이 만들어집니다.

주문일 | 거래처 | 품목 | 수량 | 처리상태
2026-08-11 | B거래처 | 제품B | 50 | 대기
2026-08-11 | D거래처 | 제품D | 120 | 대기

여기서 중요한 부분은 단순히 ‘코드가 실행됐다’는 것이 아닙니다. 원본 데이터를 건드리지 않고 필요한 결과를 별도의 시트로 생성했다는 것입니다.

스프레드시트 데이터가 조건에 따라 자동으로 분류되는 과정

4단계. 실제 업무에서는 조건을 바꿔 사용합니다

실제 업무에 적용할 때는 대부분 이 부분을 수정하게 됩니다.

현재 코드에서는 다음 부분이 조건입니다.

row[4] === "대기"

여기서 row[4]는 다섯 번째 열인 처리상태를 의미합니다. 컴퓨터는 첫 번째 열을 0으로 계산하기 때문에 다섯 번째 열은 4가 됩니다.

예를 들어 수량이 100개 이상인 주문만 따로 모으고 싶다면 조건을 다음처럼 바꿀 수 있습니다.

const waitingRows = data.slice(1).filter(row => row[3] >= 100);

수량 열이 네 번째 열이므로 row[3]이 됩니다.

이처럼 자동화에서 중요한 것은 코드를 많이 작성하는 것이 아니라 ‘어떤 조건의 데이터를 어떤 결과로 만들 것인가’를 먼저 정하는 것입니다.

5단계. 사람이 하던 작업과 비교해보기

예를 들어 매일 200~300개의 주문 데이터를 확인한다고 가정해 보겠습니다.

작업 수동 처리 스크립트 사용
원본 데이터 확인 수동 자동
조건에 맞는 행 찾기 직접 필터링 자동
결과 복사 복사·붙여넣기 자동
반복 실행 매번 작업 함수 실행

한 번의 작업이 5분 걸린다고 해도 월 20일이면 약 100분입니다. 여기에 데이터를 확인하거나 잘못 복사한 내용을 다시 수정하는 시간이 추가될 수 있습니다.

다만 자동화의 시간 절감 효과를 모든 업무에 동일하게 적용할 수 있는 것은 아닙니다. 데이터의 양, 조건의 복잡성, 오류 검수 방식에 따라 차이가 큽니다. 따라서 처음에는 실제 업무에서 한 번 작업하는 데 걸리는 시간을 측정한 뒤 자동화 후 시간을 비교하는 것이 가장 정확합니다.

대부분 놓치는 부분: 자동화보다 먼저 ‘실패 조건’을 정하세요

처음 Apps Script를 사용하는 경우 ‘정상적으로 실행되는 코드’를 만드는 데 집중하기 쉽습니다.

하지만 업무 자동화에서는 잘못된 데이터가 들어왔을 때 어떻게 할 것인가가 더 중요합니다.

예를 들어 처리상태에 사람이 실수로 ‘대기 ’처럼 공백을 넣으면 현재 코드는 정확히 일치하지 않기 때문에 해당 행을 찾지 못합니다.

따라서 실제 업무에 적용하기 전에는 다음과 같은 예외 상황을 테스트하는 것이 좋습니다.

  • 데이터가 한 건도 없는 경우
  • 처리상태가 비어 있는 경우
  • 같은 데이터가 중복된 경우
  • 열의 순서가 변경된 경우
  • 숫자가 문자로 입력된 경우
  • 예상하지 못한 값이 입력된 경우

특히 열 위치를 기준으로 작성한 코드는 열 순서가 바뀌면 오작동할 수 있습니다. 업무용으로 장기간 사용할 계획이라면 단순히 ‘네 번째 열’이라고 가정하기보다 열 제목을 찾아 해당 열을 처리하도록 개선하는 방법이 더 안전합니다.

직장인이 스프레드시트 데이터를 확인하고 자동화 결과를 검토하는 모습

매일 자동으로 실행하려면?

버튼을 누르는 것조차 반복 작업이라면 Apps Script의 트리거를 활용할 수 있습니다.

예를 들어 매일 오전 9시에 특정 함수를 실행하도록 설정하면 출근 후 반복적으로 처리하던 작업을 자동 실행할 수 있습니다.

Apps Script 편집기의 왼쪽 메뉴에서 트리거를 선택하고 새 트리거를 추가한 뒤 실행할 함수와 실행 조건을 지정합니다.

다만 업무용 자동화에서는 처음부터 예약 실행을 설정하는 것보다 수동 실행 → 결과 검증 → 예외 상황 테스트 → 예약 실행 순서로 진행하는 것을 권장합니다.

자동화가 잘못된 결과를 만들어내는 상황에서는 ‘자동으로 실행된다’는 사실이 장점이 아니라 위험 요소가 될 수 있기 때문입니다.

직장인 업무에 적용하기 좋은 자동화 사례

이번 예제의 구조를 이해했다면 다른 업무에도 응용할 수 있습니다.

반복 업무 자동화 아이디어
미처리 주문 확인 상태가 ‘대기’인 행만 추출
재고 부족 확인 재고가 기준 수량보다 적은 품목 추출
일일 실적 정리 당일 데이터만 별도 시트에 생성
거래처별 자료 분류 거래처 조건에 따라 데이터 분리
보고자료 작성 원본 데이터를 요약표로 변환

예를 들어 재고 수량이 10개 미만인 제품만 추출하려면 조건을 다음처럼 바꾸는 식입니다.

const lowStockRows = data.slice(1).filter(row => row[3] < 10);

이때도 중요한 것은 코드 자체가 아니라 업무 담당자가 평소 어떤 기준으로 데이터를 판단하고 있는지를 정확하게 코드로 옮기는 것입니다.

개인정보와 회사 데이터는 반드시 확인하세요

Google Apps Script는 편리하지만 회사 업무 데이터를 다룰 때는 별도의 주의가 필요합니다.

  • 고객 이름, 전화번호, 주소 등 개인정보를 테스트 데이터로 그대로 사용하지 않습니다.
  • 회사에서 Google Workspace 또는 외부 서비스 사용을 제한하고 있다면 사내 규정을 먼저 확인합니다.
  • 스크립트에 비밀번호, API 키, 인증 토큰을 그대로 적어두지 않습니다.
  • 자동화 결과가 인사·급여·계약·거래 등 중요한 업무에 영향을 준다면 실행 결과를 검수하는 절차를 둡니다.
  • 공유 스프레드시트에서는 누가 스크립트를 실행하고 어떤 권한을 가지는지 확인합니다.

특히 실제 고객 데이터나 사내 민감정보를 가지고 자동화를 처음 테스트하는 것은 피하는 편이 좋습니다. 처음에는 가상의 이름과 숫자로 복사본을 만든 뒤 테스트하는 것이 안전합니다.

FAQ

Q1. 엑셀 파일도 Apps Script로 자동화할 수 있나요?

Apps Script는 기본적으로 Google 서비스와 Google 스프레드시트 환경을 중심으로 동작합니다. 기존 Microsoft Excel 파일을 그대로 대상으로 삼는 것과는 차이가 있습니다. Excel 중심 업무라면 먼저 파일을 Google 스프레드시트로 가져와 사용할 수 있는지, 또는 Microsoft 365 환경에서 Power Automate나 Office Scripts가 더 적합한지 검토하는 것이 좋습니다.

Q2. 코딩을 전혀 몰라도 사용할 수 있나요?

간단한 데이터 필터링이나 복사 정도는 예제 코드를 수정하면서 시작할 수 있습니다. 다만 업무가 복잡해질수록 오류 처리, 권한, 데이터 구조 등에 대한 이해가 필요합니다. 처음에는 한 가지 반복 작업만 자동화하는 것이 좋습니다.

Q3. 회사 데이터를 Google 스프레드시트에 넣어도 되나요?

회사 규정에 따라 달라집니다. 회사에서 승인한 Google Workspace 환경인지, 외부 클라우드 사용이 허용되는지, 개인정보나 기밀정보가 포함되어 있는지 확인해야 합니다. 규정이 불분명하다면 실제 데이터를 사용하지 말고 비식별화한 테스트 데이터로 먼저 자동화 로직을 검증하는 것이 안전합니다.

마무리: 자동화의 시작은 복잡한 프로그램이 아닙니다

Google Apps Script를 활용한 업무 자동화는 거창한 프로그램을 만드는 작업부터 시작할 필요가 없습니다.

먼저 ‘매일 반복하는 작업 하나’를 찾고 → 입력 데이터와 결과를 구분하고 → 조건을 코드로 옮기고 → 복사본에서 테스트한 뒤 → 필요할 때 예약 실행하는 순서로 접근하면 됩니다.

오늘 예제처럼 ‘대기 상태인 주문만 별도 목록으로 만드는 작업’부터 시작해 보세요. 그다음에는 재고 부족 목록, 일일 실적, 거래처별 자료처럼 반복되는 업무를 하나씩 연결할 수 있습니다.

특히 자동화의 목표를 ‘코드를 만드는 것’으로 잡지 않는 것이 좋습니다. 사람이 매일 확인하고 복사하던 판단과 작업을 어디까지 안전하게 줄일 수 있는가를 기준으로 접근하면 훨씬 실용적인 자동화가 됩니다.