본문으로 건너뛰기
ArumSoft Learning
EN

    엑셀 전문가 · 12개 중 6번째 튜토리얼

    엑셀 Office 스크립트와 Power Automate로 업무 자동화하기

    Office 스크립트를 기록하고 직접 작성한 다음, Power Automate로 일정에 맞춰 실행하고, 일에 맞는 가장 단순한 자동화 방법을 골라 봐요.

    난이도
    전문가
    Time
    16분 분량
    수정:
    적용 대상:
    웹용 Excel, 회사 또는 학교 계정의 Microsoft 365용 Excel
    tblOrders 표예요. 주문 하나당 한 행이고, 상태(Status)와 주문이 열려 있던 일수(DaysOpen)가 들어 있어요.
    예시: tblOrders 표예요. 주문 하나당 한 행이고, 상태(Status)와 주문이 열려 있던 일수(DaysOpen)가 들어 있어요.

    배울 내용

    • 클라우드 자동화가 데스크톱 VBA 매크로보다 나은 경우 설명하기
    • Office 스크립트를 기록하고 만들어진 코드 읽기
    • 표를 읽고 행을 표시한 뒤 결과를 돌려주는 스크립트 작성하기
    • Power Automate 흐름으로 스크립트를 예약 실행하고 결과를 메일로 보내기
    • 주어진 워크플로에 가장 단순한 자동화 방법 고르기

    예제 파일

    엑셀 Office 스크립트와 Power Automate로 업무 자동화하기.xlsx

    이 튜토리얼에서 사용하는 통합 문서를 내려받아 엑셀에서 직접 따라 해 보세요.

    엑셀 통합 문서(.xlsx) · 7 KB

    예제 파일 다운로드

    VBA 매크로를 쓰려면 Excel 데스크톱 앱이 있어야 하고, 통합 문서가 열려 있어야 하고, 누군가 실행 단추를 눌러야 해요. Office 스크립트(Office Scripts)는 웹용 Excel에서 실행되고, Microsoft의 클라우드 워크플로 서비스인 Power Automate가 정해진 시간이나 특정 사건이 일어날 때 대신 실행해 줄 수 있어요. 키보드 앞에 아무도 없어도요. 이 글에서는 스크립트를 기록하고 직접 작성한 다음, 매주 월요일에 스크립트를 실행하고 결과를 메일로 보내는 흐름을 만들어 봐요. 그리고 언제 이만큼 할 가치가 있는지도 따져 봐요.

    클라우드 자동화가 데스크톱 매크로보다 나은 경우

    다음 중 하나라도 해당하면 Office 스크립트와 Power Automate를 고려해 보세요.

    • 사람 없이 돌아가야 해요. "매일 아침 7시"나 "새 파일이 들어올 때마다" 같은 일은 누군가 엑셀을 열어 주기를 기대할 수 없어요.
    • 팀이 브라우저에서 일해요. 웹용 Excel은 VBA를 실행하지 않아요. 데스크톱 앱을 열지 않는 팀에게 매크로는 쓸모가 없어요.
    • 여러 서비스를 오가야 해요. 흐름 하나가 스크립트를 실행하고, 그 결과를 메일로 보내거나 Microsoft Teams에 올리거나 SharePoint에 사본을 저장할 수 있어요.

    Office 스크립트와 VBA는 같은 도구의 옛 버전과 새 버전이 아니라, 서로 다른 도구예요.

    VBAOffice 스크립트
    언어Visual Basic for ApplicationsTypeScript(형식이 있는 JavaScript)
    코드가 있는 곳.xlsm 통합 문서 안OneDrive에 있는 별도의 스크립트 파일. 통합 문서와 공유할 수 있어요
    아무도 로그인하지 않았을 때 실행안 돼요Power Automate 흐름에서 실행돼요
    접근할 수 있는 대상다른 통합 문서, 로컬 폴더, 프린터, 다른 Office 앱주로 실행 중인 통합 문서. 다른 파일과 서비스는 Power Automate를 거쳐요
    사용자 인터페이스사용자 정의 폼, 메시지 상자, Worksheet_Change 같은 시트 이벤트모두 없어요. 트리거는 Power Automate가 맡아요
    쓸 수 있는 사람Excel 데스크톱 앱이 있는 누구나관리자가 끄지 않은 Microsoft 365 회사 또는 학교 계정

    첫 스크립트 기록하기

    예제에서는 tblOrders라는 이름의 표로 만든 주문 목록을 써요. 통합 문서는 회사 또는 학교용 OneDrive에 저장되어 있어요. Power Automate는 OneDrive나 SharePoint에 있는 파일에만 접근할 수 있거든요.

    ABCDE
    1OrderRegionAmountStatusDaysOpen
    21001East420Closed2
    31002West310Open9
    41003East150Open3
    51004South880Open12
    61005West270Closed5
    71006South95Open7
    tblOrders 표예요. 주문 하나당 한 행이고, 상태(Status)와 주문이 열려 있던 일수(DaysOpen)가 들어 있어요.
    1. 기록을 시작하세요

      웹용 Excel에서 통합 문서를 여세요. 자동화 탭에서 작업 기록(Record Actions) 을 클릭하세요. 작업 기록 창이 열리고, 하는 작업이 하나씩 목록에 나타나요.

    2. 작업을 한 번 해 보세요

      A1:E1을 선택하고 홈 탭에서 굵게를 클릭한 다음, 채우기 색에서 노란색을 고르세요. 작업마다 창에 한 줄씩 나타나요.

    3. 기록을 멈추고 코드를 보세요

      창에서 중지를 클릭하세요. 기록한 내용이 OneDrive에 스크립트로 저장돼요. 스크립트를 편집용으로 열면 코드 편집기(Code Editor) 에서 코드를 볼 수 있어요. 대략 이런 모습이에요.

      function main(workbook: ExcelScript.Workbook) {
        let selectedSheet = workbook.getActiveWorksheet();
        // Set font bold to true for range A1:E1 on selectedSheet
        selectedSheet.getRange("A1:E1").getFormat().getFont().setBold(true);
        // Set fill color to #FFFF00 for range A1:E1 on selectedSheet
        selectedSheet.getRange("A1:E1").getFormat().getFill().setColor("#FFFF00");
      }
      

    스크립트는 모두 모양이 같아요. main이라는 함수가 통합 문서를 workbook: ExcelScript.Workbook으로 받아요. 거기서부터 통합 문서, 워크시트, 범위, 서식, 글꼴 순으로 개체 모델을 따라 내려가요. get… 호출은 다음 개체를 돌려주고, set… 호출은 무언가를 바꿔요.

    기록한 VBA 매크로처럼, 기록한 스크립트도 클릭한 그대로 고정돼요. 그때 활성화되어 있던 시트의 A1:E1이죠. 기록은 어떤 메서드가 무슨 일을 하는지 배우는 가장 빠른 방법이에요. 다시 쓸 스크립트라면 데이터를 이름으로 찾도록 코드를 고치세요.

    표를 읽고 결과를 돌려주는 스크립트 작성하기

    아래 스크립트는 정해진 일수가 지나도록 열려 있는 주문을 모두 강조 표시하고, 몇 건인지 돌려줘요. 자동화 탭에서 새 스크립트(New Script) 를 클릭하고, 처음 들어 있는 코드를 아래 코드로 바꾼 다음, 스크립트 이름을 Flag late orders로 바꾸고 저장하세요.

    function main(workbook: ExcelScript.Workbook, threshold: number = 7): number {
      const table = workbook.getTable("tblOrders");
      if (!table) {
        throw new Error("Table tblOrders not found.");
      }
    
      const body = table.getRangeBetweenHeaderAndTotal();
      const headers = table.getHeaderRowRange().getValues()[0];
      const values = body.getValues();
      const statusCol = headers.indexOf("Status");
      const daysCol = headers.indexOf("DaysOpen");
    
      body.getFormat().getFill().clear();
      let late = 0;
      for (let i = 0; i < values.length; i++) {
        const isOpen = values[i][statusCol] === "Open";
        const days = values[i][daysCol] as number;
        if (isOpen && days >= threshold) {
          body.getRow(i).getFormat().getFill().setColor("#FCE4D6");
          late++;
        }
      }
    
      console.log(`${late} late orders`);
      return late;
    }
    

    부분별로 하는 일은 이래요.

    • workbook.getTable("tblOrders") 는 표가 통합 문서 어디에 있든 이름으로 찾아요. 행이 늘어나거나 표가 옮겨져도 스크립트가 계속 동작해요. 표가 없으면 throw가 알기 쉬운 메시지와 함께 스크립트를 멈춰요. 그래서 뒤에서 엉뚱한 오류가 나지 않아요.
    • headers.indexOf("Status") 는 열 위치를 머리글로 찾아요. 그래서 중간에 열을 끼워 넣어도 스크립트가 깨지지 않아요.
    • getValues() 는 표 본문 전체를 한 번에 메모리로 읽어 와요. 행마다 값이 담긴 배열이에요. 한 번 읽어서 그 사본을 돌며 처리하는 편이 셀을 하나씩 엑셀에 물어보는 것보다 훨씬 빨라요.
    • threshold: number = 7 은 매개 변수예요. Power Automate 흐름이 다른 값을 넘겨줄 수 있고, 기본값이 있어서 직접 실행할 때도 그대로 쓸 수 있어요.
    • return late 는 개수를 스크립트를 실행한 쪽에 돌려줘요. 흐름에서는 다음 단계가 쓸 수 있는 값이 돼요.

    실행을 클릭하세요. 1002, 1004, 1006번 주문이 7일 이상 열려 있어서(Status가 Open) 그 행들이 주황색으로 바뀌고, 출력 창에 3 late orders가 나와요.

    ABCDE
    1OrderRegionAmountStatusDaysOpen
    21001East420Closed2
    31002West310Open9
    41003East150Open3
    51004South880Open12
    61005West270Closed5
    71006South95Open7
    스크립트를 실행한 뒤예요. 7일 이상 열려 있는 주문 세 건이 강조 표시되고, 스크립트는 3을 돌려줘요.

    Power Automate로 스크립트 예약 실행하기

    이제 흐름이 매주 월요일 아침에 스크립트를 실행하고, 개수를 팀장에게 메일로 보내게 해 봐요. Power Automate 화면이 한국어로 설정되어 있으면 메뉴와 동작 이름이 한국어로 보일 수 있어요.

    1. 예약된 클라우드 흐름을 만드세요

      make.powerautomate.com에 같은 회사 또는 학교 계정으로 로그인하세요. 만들기를 고른 다음 예약된 클라우드 흐름(Scheduled cloud flow) 을 선택하세요. 흐름 이름을 정하고, 반복 간격(Repeat every)을 1 주로, 요일(On these days)을 월요일로 고른 뒤 만들기를 클릭하세요.

    2. 스크립트 실행 동작을 추가하세요

      Recurrence 트리거 아래에 동작을 추가하고 Run script(스크립트 실행)를 검색하세요. Excel Online (Business) 커넥터에 있는 것을 고르세요. Location(OneDrive for Business 또는 SharePoint 사이트), Document Library, File(주문 통합 문서), Script(Flag late orders)를 채우세요. 스크립트에 매개 변수가 있어서 threshold 상자가 나타나요. 7을 입력하세요.

    3. 결과를 메일로 보내세요

      동작을 하나 더 추가하세요. Office 365 Outlook 커넥터의 Send an email (V2) 예요. To와 Subject를 채우고, Body에 7일 이상 열려 있는 주문:이라고 입력한 다음 Run script 단계의 동적 콘텐츠에서 result를 넣으세요. 스크립트가 돌려준 숫자예요.

    4. 저장하고 테스트하세요

      저장을 클릭한 다음 테스트를 클릭하고 흐름을 수동으로 실행하도록 고르세요. 실행 기록에 단계마다 초록색 체크 표시나, 실행을 멈춘 오류가 나와요. 통합 문서를 열어 행이 강조 표시되었는지, 받은 편지함에 메일이 왔는지 확인하세요.

    클라우드 자동화는 대부분 같은 틀이에요. 트리거(일정, OneDrive나 SharePoint 폴더에서 파일이 만들어지거나 수정됨, 단추 클릭)가 있고, 그다음 동작이 순서대로 실행돼요. 예를 들어 메일 대신 Teams 채널에 개수를 올리거나, 통합 문서가 바뀔 때만 스크립트를 실행하는 흐름도 만들 수 있어요.

    커넥터, 권한, 파일 위치

    만든 날에는 잘 돌던 흐름도 석 달 뒤에 멈출 수 있어요. 흐름에 업무를 맡기기 전에 다음을 확인하세요.

    • 커넥터마다 누군가의 계정으로 로그인해요. Excel, Outlook, Teams는 각각 연결을 쓰고, 흐름은 그 계정의 권한으로 동작해요. 내 개인 계정으로 연결했는데 내가 부서를 옮기거나 퇴사하면 흐름이 멈춰요. 업무 프로세스라면 공동 소유자를 추가하고, IT 정책이 허용한다면 공용 서비스 계정처럼 조직이 계속 관리하는 계정을 쓰세요.
    • 파일이 클라우드에서 닿는 곳에 있어야 해요. 노트북 드라이브에 있는 통합 문서는 월요일 아침 7시에 노트북이 잠들어 있으면 쓸 수 없어요. OneDrive나 SharePoint 라이브러리에 두고, 이름을 바꾸거나 옮길 때는 흐름도 함께 고치세요.
    • 스크립트 파일 위치도 중요해요. Run script는 흐름 소유자의 OneDrive에서 스크립트를 찾아요. 팀 업무라면 스크립트를 SharePoint 라이브러리에 두고 Run script from SharePoint library 동작을 쓰세요. 그래야 한 사람의 OneDrive에 매이지 않아요.
    • 라이선스와 한도. 일부 커넥터는 프리미엄이라 유료 Power Automate 라이선스가 필요해요. Office 스크립트에는 한 번에 실행할 수 있는 시간과, 흐름이 하루에 호출할 수 있는 횟수에도 한도가 있어요. 대량으로 돌릴 프로세스라면 설계하기 전에 사용 중인 요금제의 한도를 확인하세요.
    • 실패를 지켜볼 사람이 있어야 해요. 실패 알림은 기본적으로 흐름 소유자에게 가요. 알림을 받고 실제로 조치할 사람인지 확인하세요.

    가장 단순한 방법 고르기

    클라우드 자동화는 아래 목록에서 가장 많은 일을 할 수 있지만, 유지 관리도 가장 어려워요. 대략 복잡도 순서인 아래 목록을 차례로 따져 보고, 문제를 해결하는 첫 번째 방법에서 멈추세요.

    1. 수식(LET, LAMBDA 포함): 입력이 바뀌면 저절로 다시 계산되는 계산.
    2. 파워 쿼리(Power Query): 데이터를 매번 같은 방식으로 가져와 정리하고, 클릭 한 번으로 새로 고치기.
    3. VBA: 파일 시스템, 다른 통합 문서, 사용자 정의 폼이 필요한 데스크톱 작업.
    4. Office 스크립트와 Power Automate: 브라우저에서, 일정이나 이벤트에 맞춰, 여러 서비스를 오가며 실행해야 하는 작업.
    워크플로해결하는 가장 단순한 방법
    수식 중심 시트에서 같은 계산을 수천 행에 반복수식
    매달 같은 정리 단계와 새로 고침이 필요한 파일 가져오기파워 쿼리
    내 데스크톱에서만 돌리고 로컬 폴더에 파일을 저장하는 서식 작업VBA
    Excel 데스크톱 앱을 열지 않고 매일 아침 브라우저에서 준비해야 하는 보고서Power Automate가 실행하는 Office 스크립트
    공유 파일이 바뀌면 아무도 엑셀을 열지 않아도 Teams 채널에 알림Power Automate(스크립트 필요 없음)

    마지막 행을 기억해 두세요. 흐름의 기본 동작만으로 해결되는 일이라면 스크립트는 아예 필요 없어요.

    자주 하는 실수

    • 로컬 파일로 만들기. Power Automate는 내 컴퓨터에만 저장된 통합 문서에 접근할 수 없어요. 먼저 OneDrive나 SharePoint에 저장하세요.
    • 기록한 스크립트를 그대로 쓰기. 기록한 스크립트는 A1:E1 같은 주소를 고정해 두고 활성 시트에 의존해요. 흐름에서 실행하기 전에 표 이름과 시트 이름을 쓰도록 고치세요.
    • 반복문 안에서 셀을 하나씩 읽고 쓰기. 통합 문서를 부를 때마다 시간이 걸려요. getValues()로 범위를 한 번에 읽고, 사본에서 작업한 다음, 되도록 적은 횟수로 다시 쓰세요.
    • 한 사람에게 묶인 흐름. 소유자가 한 명뿐인데 그 사람이 떠나면 연결이 끊어져요. 공동 소유자를 추가하고 누가 흐름을 관리하는지 적어 두세요.
    • 너무 일찍 자동화하기. 수식이나 파워 쿼리 새로 고침으로 해결된다면, 스크립트와 흐름은 고장 날 부분만 늘려요.

    연습

    연습

    늦어진 주문 점검 예약하기

    1. 웹용 Excel에서 OneDrive에 통합 문서를 만들고, 위의 주문 데이터를 입력한 뒤 tblOrders라는 이름의 표로 만드세요.
    2. 머리글 행을 굵게 하고 채우기 색을 넣는 스크립트를 기록하고, 만들어진 코드를 읽어 보세요.
    3. Flag late orders 스크립트를 만들어 실행하고, 세 행이 강조 표시되고 3 late orders가 출력되는지 확인하세요.
    4. threshold의 기본값을 10으로 바꾸고 다시 실행하세요. 1004번 주문만 강조 표시되어야 해요.
    5. 매주 월요일에 스크립트를 실행하고 결과를 메일로 보내는 예약된 클라우드 흐름을 만들고, 수동으로 테스트하세요.
    6. 실제 자동화 하나의 개요를 짜 보세요. 매주 손으로 저장해서 보내는 보고서를 하나 골라 트리거, 단계, 필요한 커넥터와 권한, 파일이 있어야 할 위치를 적고, 더 단순한 방법(수식, 파워 쿼리)으로 충분한지도 따져 보세요.

    실력 점검

    • 브라우저 기반 자동화가 데스크톱 매크로보다 나은 경우를 설명할 수 있나요?
    • Office 스크립트가 VBA와 비교해 할 수 있는 것과 할 수 없는 것을 설명할 수 있나요?
    • 흐름을 예약하기 전에 정리해야 할 커넥터나 권한 문제를 하나 짚을 수 있나요?
    • 주어진 워크플로를 실제로 해결하는 가장 단순한 자동화 방법을 고를 수 있나요?

    관련 자료

    도움이 되었나요? 틀린 부분을 발견하셨나요? 피드백 보내기 · admin@arumsoft.com