수정 이력(3건, 최종 수정 2026년 08월 02일)
이 글에 적용한 변경 사항의 기록입니다. 보관해 둔 수정 전 버전은 DOI가 부여된 고정 URL에서 읽을 수 있습니다.
- 글 맨 앞에 「이 글의 지식 맵」 절을 추가했습니다. 본문에서 다루는 개념과 그 관계를 요약·그림·상세 페이지 링크로 정리한 것입니다. 본문의 주장은 바꾸지 않았습니다.
- 외부 리뷰(1283건)에 대한 대응으로 본문을 갱신했습니다. 개별 변경 내용은 아래 이력을 참조하십시오.
- 같은 집계 처리를 VBA와 Office Scripts로 나란히 둔 대비와, 네 가지 생각의 차이 표를 추가했습니다(`main` 함수가 유일한 진입점, `ActiveSheet`가 없음, `WorksheetFunction`을 쓸 수 없음, `return`으로 플로우에 값을 반환할 수 있음). 조작 기록부터 손질해 플로우에 넣기까지의 4단계, 먼저 확인할 제한 3가지를 추가하고, 본문의 전각 괄호를 다른 글에 맞춰 반각으로 통일했습니다.
- 최초 공개
이 글을 인용하기(DOI(등록된 아카이브): 10.5281/zenodo.22174512)
아래 DOI는 이전에 등록된 아카이브를 가리키며 현재 본문과 다를 수 있습니다. 현재 본문을 참조할 때는 이 페이지의 URL을 사용하세요.
Go Komura (2026). 「Excel VBA 매크로를 Power Automate로 이전하기 ── Office Scripts로 대체할 범위와 VBA로 남길 범위」. 합동회사 코무라소프트. https://comcomponent.com/ko/blog/excel-vba-to-power-automate-office-scripts/
- DOI(등록된 아카이브)
- 10.5281/zenodo.22174512
- DOI(마지막 등록 버전)
- 10.5281/zenodo.22174513
「이 업무는 Excel 매크로로 돌아가고 있는데, 만든 사람이 이제 회사에 없어서요. Power Automate라는 걸로 이전할 수 있을까요」──이런 상담을 자주 받습니다. VBA로 만든 일별 집계나 장표 작성이 현업에서 돌아가는 한편, 작성자 퇴사나 VBScript 폐지 소식을 계기로 VBA 자산의 앞날을 걱정하는 담당자가 많습니다.
먼저 말하면, 「VBA를 Power Automate로 이전한다」는 정확히는 「VBA 일부를 Office Scripts로 다시 써서 Power Automate에서 호출한다」, 「일부는 커넥터로 대체한다」, 「일부는 VBA로 남긴다」는 여러 이야기의 조합입니다. VBA 매크로를 클라우드 플로우에서 그대로 돌리는 기능은 없습니다. 이 글에서는 어떤 처리를 어디로 옮길 수 있고, 어디는 VBA로 남겨야 하는지를 Microsoft Learn의 1차 정보로 확인하며 정리합니다.
1. 먼저 결론
- VBA 매크로를 Power Automate의 클라우드 플로우에서 직접 실행할 수는 없습니다. Excel Online (Business) 커넥터는 .xlsm 파일을 다룰 수 있지만, 그 안의 매크로는 실행할 수 없으며 실행할 수 있는 것은 Office Scripts뿐입니다.1
- Office Scripts는 VBA의 완전한 대체물이 아닙니다. Excel 전용이며, 다른 Office 앱 조작·이벤트 기반 실행·UserForm·COM/OLE 연동·로컬 파일 접근은 할 수 없습니다.23
- 반대로, 워크북 안에서 끝나는 정리·집계·옮겨 쓰기는 Office Scripts로 바꿀 가치가 큽니다. Power Automate와 맞추면 예약 실행이나 메일 수신을 트리거로 한 자동 실행이 가능해지고, VBA로는 불가능했던 「Excel을 열지 않고 돌아가는 자동화」가 됩니다.2
- 테이블에 행을 추가·조회하는 정도라면 스크립트를 쓰지 않고 Excel Online (Business) 커넥터 액션으로 직접 처리할 수 있습니다. 다만 테이블 필수·기본 256행·최대 25MB 등의 제한을 먼저 확인하세요.4
- 아무래도 VBA가 필요한 처리는, 데스크톱 플로우의 Run Excel macro 액션으로 기존 VBA를 그대로 실행하는 선택지가 있습니다. VBA를 다시 쓰지 않고 실행과 전후 연동만 자동화할 수 있습니다.5
- Office Scripts에는 상용 또는 교육용 Microsoft 365 라이선스와 OneDrive for Business가 필요합니다. VBA는 추가 라이선스가 필요 없으므로, 이 부분이 이전 판단의 전제 조건이 됩니다.62
그림의 실선은 항상 성립하는 관계, 점선은 조건이 붙는 관계입니다(성립 조건은 상세 페이지의 관계별 설명에 적혀 있습니다). 관계 전체 목록(총 21건, 근거와 확신도 포함)과 주요 개념의 정의는 지식 맵 상세 페이지에 정리되어 있습니다(일본어). 데이터: JSON-LD / Turtle
2. VBA·Office Scripts·Power Automate의 관계를 정리하기
먼저 관련 구성 요소를 정리합니다. 비슷한 이름이 많아, 여기서 헷갈리기 쉽습니다.
flowchart TB
subgraph Cloud[클라우드 쪽]
CF[Power Automate<br/>클라우드 플로우]
Conn[Excel Online Business<br/>커넥터]
OS[Office Scripts<br/>TypeScript로 Excel 조작]
CF --> Conn
Conn -- Run script --> OS
Conn -- 행 추가/조회/업데이트 --> Table[Excel 테이블]
end
subgraph Desktop[데스크톱 쪽]
DF[Power Automate<br/>데스크톱 플로우]
VBA[기존 VBA 매크로]
DF -- Run Excel macro --> VBA
end
CF -- 호출 --> DF
OS -.-> Book[OneDrive / SharePoint 위의 워크북]
VBA -.-> LocalBook[로컬/파일 서버 위의 워크북]
- Office Scripts는 TypeScript로 Excel을 조작하는 스크립트 기능입니다. Excel의 웹판·Windows판(버전 2210 이후)·Mac판에서 동작하며, Power Automate의 클라우드 플로우에서 호출할 수 있습니다. VBA와의 근본적인 차이는, VBA가 데스크톱용, Office Scripts가 클라우드·크로스 플랫폼용으로 설계되어 있다는 점입니다.26
- Excel Online (Business) 커넥터는 OneDrive for Business나 SharePoint 위의 Excel 파일을 클라우드 플로우에서 조작하는 커넥터입니다. 테이블에 대한 행 조작 액션과, Office Scripts를 실행하는 「스크립트 실행(Run script)」 액션을 제공합니다.7
- 데스크톱 플로우(Power Automate for desktop)는 Windows 위의 앱을 조작하는 RPA입니다. Excel 액션 안에 VBA 매크로를 실행하는 액션이 있습니다.5
VBA로는 되고, Office Scripts로는 안 되는 것
이전 판단에서 가장 중요한 지점이 여기입니다. Microsoft Learn의 「Differences between Office Scripts and VBA macros」를 바탕으로 정리합니다.2
| VBA로 되는 것 | Office Scripts에서의 취급 |
|---|---|
| Word·Outlook·Access 등 Excel 이외의 Office 앱 조작 | 불가. Office Scripts는 Excel 전용이며, 다른 Office 앱에서는 쓸 수 없음 |
| COM / OLE를 통한 다른 앱·외부 컴포넌트 연동, Win32 API 호출(Declare) | 불가. 스크립트는 워크북에만 접근할 수 있고, 호스트 머신에는 접근할 수 없음 |
| Workbook_Open, Worksheet_Change 등의 이벤트 기반 실행 | 불가. Excel 수준 이벤트는 지원하지 않으며, 실행 수단은 수동 실행 또는 Power Automate에서의 호출뿐 |
| UserForm으로 만든 사용자 지정 대화 상자·입력 화면 | 불가. 워크북 밖의 UI(대화 상자나 작업 창)가 필요하면 Office 추가 기능의 영역3 |
| 로컬 폴더의 파일 조작(열기·저장·목록 가져오기) | 불가. 워크북 밖으로 나가는 처리는 Power Automate 쪽 커넥터(OneDrive, SharePoint 등)로 수행 |
| 데스크톱판 Excel 고유 기능을 포함한 폭넓은 Excel 기능 | 일부 불가. VBA 쪽이 Excel 기능 커버 범위가 넓고, Office Scripts는 웹판 Excel 시나리오를 거의 커버하는 위치 |
외부 웹 서비스 호출에도 주의가 필요합니다. Office Scripts 자체는 제한적인 외부 호출을 지원하지만, Power Automate를 통해 실행한 경우 스크립트 안의 외부 API 호출(fetch)은 실패합니다. 외부 연동은 스크립트 안이 아니라 플로우 쪽 커넥터나 HTTP 액션으로 하는 설계가 됩니다.26 다만 임의의 API를 호출하는 범용 HTTP 액션은 프리미엄 커넥터라서, Microsoft 365 라이선스만으로는 쓸 수 없습니다.8 연동 대상 서비스에 표준 커넥터가 있으면 그쪽을 우선하고, 자체 API 호출이 필수라면 프리미엄 라이선스 추가 비용을 이전 판단에 넣으세요.
이 목록을 보고 「우리 매크로는 거의 다 해당한다」고 느낀 분도 많을 것입니다. 실제로 오래 커온 VBA 매크로는 Outlook 메일 발송, 폴더 순회, UserForm 입력 받기를 흔히 포함합니다. 다만 포기하기 전에 처리를 쪼개 보세요. 「폴더에서 파일을 모아, 워크북을 정리하고, 메일로 보낸다」는 매크로라면, 파일 수집과 메일 발송은 Power Automate 커넥터가 잘하는 일이고, 워크북 정리만 Office Scripts로 만들면 전체로는 이전할 수 있는 경우가 꽤 있습니다.
다시 쓰는 느낌 ── 집계 매크로를 나란히 보기
말만으로는 거리가 잡히지 않으니, 최소 예를 나란히 둡니다. 「매출 시트의 C열(2행 이후)을 합계해 E1에 쓴다」는 처리뿐입니다.
VBA라면 이렇게 씁니다.
Sub 売上合計()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("売上")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
Dim total As Double
total = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow))
ws.Range("E1").Value = total
End Sub
같은 일을 Office Scripts(TypeScript)로 쓰면 이렇게 됩니다.
function main(workbook: ExcelScript.Workbook): number {
const sheet = workbook.getWorksheet("売上");
const used = sheet.getUsedRange();
// getRowIndex는 0부터 시작하므로, 행 수를 더하면 1부터 시작하는 마지막 행이 된다
const lastRow = used.getRowIndex() + used.getRowCount();
const values = sheet.getRange(`C2:C${lastRow}`).getValues();
let total = 0;
for (const row of values) {
const v = row[0];
if (typeof v === "number") {
total += v;
}
}
sheet.getRange("E1").setValue(total);
return total; // 플로우 쪽에서 받을 수 있는 반환값
}
행 수는 늘어나지만, 막히는 지점은 문법이 아니라 다음 네 가지 생각의 차이입니다.
| VBA의 감각 | Office Scripts에서는 |
|---|---|
Sub는 몇 개든 만들어도 되고, 어느 것이든 실행할 수 있음 |
진입점은 main 함수 하나뿐. 여기가 호출됨 |
ActiveSheet·Selection으로 「지금 보고 있는 곳」을 암묵적으로 쓸 수 있음 |
선택 상태라는 개념이 없음. workbook.getWorksheet("売上")처럼 반드시 이름으로 가져옴 |
Application.WorksheetFunction으로 워크시트 함수를 빌릴 수 있음 |
빌릴 수 없음. 값을 배열로 꺼내 직접 계산함 |
결과는 셀에 쓰거나 MsgBox로 표시함 |
return으로 값을 플로우에 넘길 수 있음. 알림이나 메일 발송은 플로우 쪽 커넥터가 담당함 |
getValues()가 반환하는 것은 (string | number | boolean)[][]라는 2차원 배열이며, 셀 내용이 문자열인 경우도 있습니다. VBA의 Sum이 조용히 건너뛰던 숫자가 아닌 값을, 직접 typeof로 걸러야 합니다──「암묵적으로 해 주던 일이 명시적이 된다」는 감각이, 다시 쓸 때 체감 차이의 대부분입니다.
한 가지 더, Office Scripts에서는 셀을 하나씩 읽고 쓰지 않고 범위로 한꺼번에 가져와 배열로 처리하는 것이 기본입니다. VBA에서도 셀 단위 루프는 느리다는 이야기가 있었지만, Office Scripts에서는 요청·응답 크기 상한이나 실행 시간 제한(4장)에 바로 영향을 줍니다.
3. 판단표 ── 다섯 가지 선택지를 유스케이스로 나누기
이전 대상은 「Office Scripts로 바꾸는 것」만이 아닙니다. 실무에서는 다음 다섯 가지로 생각합니다.
| 선택지 | 맞는 경우 | 전제·제약 |
|---|---|---|
| (1) VBA로 남긴다 | 개인·소규모 팀의 로컬 작업. UserForm·이벤트·다른 앱 연동이 본질적으로 필요하고, 담당자가 실행 시 자리에 있는 운영으로 문제없는 경우 | 추가 라이선스 불필요.2 다만 특정인 의존·관리되지 않는 매크로의 위험은 목록화로 다룬다 |
| (2) Office Scripts로 바꿔 클라우드 플로우에서 실행 | 워크북 안에서 끝나는 정리·집계·옮겨 쓰기. 예약 실행이나 메일·폼 수신을 트리거로 하고 싶은 경우. 워크북을 OneDrive / SharePoint에 둘 수 있는 경우 | 상용/교육용 Microsoft 365 라이선스 필요.6 이벤트·UserForm 등은 재설계 필요 |
| (3) Excel Online (Business) 커넥터로 직접 처리 | 테이블에 대한 행 추가·조회·업데이트·삭제만 있는 단순한 처리. 「폼 응답을 Excel에 추가」 같은 경우 | 대상 범위가 테이블이어야 함. 기본 256행·최대 25MB 등의 제한 있음4 |
| (4) 데스크톱 플로우로 기존 VBA를 그대로 실행 | VBA를 다시 쓸 여유는 없지만, 실행·전후 처리(파일 배치, 알림)만 자동화하고 싶은 경우. 워크북이 사내 파일 서버에 있는 경우 | Windows 머신이 필요. 클라우드 플로우에서의 실행에는 연결 소유자의 Power Automate Premium 라이선스(무인 실행은 Process 라이선스)가 필요910 |
| (5) .NET으로 다시 만든다 | 대량 데이터 처리, 복잡한 업무 로직, 자동 테스트나 Git 관리가 필수, 장표 생성이 주목적인 경우 | 개발 비용이 최대. 다만 장기 유지보수성·성능은 가장 높음. 장표는 Open XML 등으로 Excel에 묶이지 않게 만들 수 있음 |
어느 쪽을 고를지는 다음 흐름으로 대략 정해집니다.
flowchart TD
Start[VBA 매크로를 1개 고른다] --> Q1{처리는 워크북 안에서<br/>끝나는가?}
Q1 -- 아니오 --> Q2{Excel 밖 부분은<br/>커넥터로 대체할 수 있는가?<br/>메일 발송·파일 수집 등}
Q2 -- 가능 --> Split[처리를 분해:<br/>Excel 부분→Office Scripts<br/>그 외→플로우의 커넥터]
Q2 -- 불가<br/>다른 앱 UI 조작/COM 연동 --> Q5{VBA를 다시 쓸<br/>여유가 있는가?}
Q1 -- 예 --> Q3{워크북을 OneDrive/<br/>SharePoint에 둘 수 있는가?}
Q3 -- 둘 수 있음 --> Q4{테이블에 대한 행 조작<br/>만으로 끝나는가?}
Q4 -- 충분함 --> C3[Excel Online Business<br/>커넥터로 직접 처리]
Q4 -- 서식/여러 시트/<br/>로직 있음 --> C2[Office Scripts로 바꿔<br/>Run script로 실행]
Q3 -- 둘 수 없음<br/>사내 서버 한정 --> C4[데스크톱 플로우로<br/>VBA를 그대로 실행]
Q5 -- 없음 --> C4
Q5 -- 있음/성능·테스트 필요 --> C5[.NET으로 다시 만든다]
Split --> C2
주의할 점은 (4)가 「이전의 종착점」이 아니라 시간을 버는 수단이라는 점입니다. VBA 본체의 특정인 의존이나 버전 관리 과제는 그대로 남습니다. 그래도 「먼저 실행을 자동화해 사람 손 실행 실수를 없애고, 그 사이에 VBA 내용을 단계적으로 Office Scripts나 .NET으로 옮긴다」는 시간 벌기로서는 충분히 실용적입니다.
4. 구현 패턴 ── Run script 액션과 커넥터 제한값
스크립트 실행(Run script)
클라우드 플로우에서 Office Scripts를 실행하려면 Excel Online (Business) 커넥터의 두 액션을 씁니다. Run script는 OneDrive(기본 저장 위치)에 있는 스크립트용이고, Run script from SharePoint library는 팀 SharePoint 라이브러리에 저장한 스크립트용입니다.7
전형적인 구성은 다음과 같습니다.
- 트리거: 예약(Recurrence), 메일 수신, 폼 제출 등
- OneDrive / SharePoint 커넥터로 대상 워크북을 특정
- Run script로 Office Scripts를 실행하고, 반환값을 받음
- 반환값으로 Teams 알림이나 메일 발송
스크립트는 파라미터를 받고 값을 반환할 수 있으므로, 「플로우에서 검색 키를 넘기고, 워크북 안의 해당 데이터를 돌려받아, 플로우 쪽에서 메일로 만든다」와 같은 데이터 전달이 됩니다. 참고로 Excel 쪽에 있던 「스크립트 예약 실행」 기능은 이 글을 쓴 시점(2026년 7월)에는 일시적으로 꺼져 있으며, 예약 실행은 Power Automate 플로우로 짜는 방법이 안내되어 있습니다.11
기록하고, 다듬고, 플로우에 넣기
처음부터 TypeScript를 쓸 필요는 없습니다. VBA 매크로 기록과 같이 「기록한 뒤 고치는」 방식으로 진행할 수 있습니다. 실제 절차는 다음과 같습니다.12
- 기록한다. Excel(웹판 또는 Windows판)에서 대상 워크북을 열고, 리본의 「자동화 (Automate)」 탭에서 「새 스크립트 (New Script)」 > 「기록에서 만들기 (Create from Recording)」를 선택한 뒤, 평소 조작을 한 바퀴 하고 중지합니다. 「자동화」 탭이 안 보이면 리본 오버플로(아래쪽 화살표)를 확인합니다. 그래도 없으면 라이선스나 플랫폼 조건을 충족하지 못한 것입니다(5장).
- 내용을 읽는다. 기록이 끝나면 세부 창이 열리므로 「편집 (Edit)」으로 코드 편집기를 엽니다. 여기서 자기 조작이
getRange나setValue의 어떤 호출이 되었는지 알 수 있습니다. VBA 매크로 기록과 같이, 조작 결과만 있는 그대로 늘어선 코드가 나옵니다. - 다듬는다. 기록되는 것은 조작 그 자체뿐이므로, 조건 분기·루프·시트 이름을 받는 방법은 직접 넣습니다. 기록 직후 코드는
getActiveWorksheet로 「지금 열려 있던 시트」를 잡는 경우가 많아, 플로우에서 무인으로 돌리면 의도하지 않은 시트에 걸립니다. 여기를getWorksheet("売上")처럼 이름으로 가져오는 형태로 고치는 것이, 가장 먼저 할 손질입니다. - 플로우에 넣는다. 스크립트는 OneDrive(또는 SharePoint 라이브러리)에 저장되므로, 클라우드 플로우 쪽에서 「스크립트 실행 (Run script)」 액션을 추가하고 워크북과 저장한 스크립트를 고릅니다. 스크립트의
main에 파라미터를 넣어 두면 액션 입력란이 그만큼 늘어나, 플로우에서 값을 넘길 수 있게 됩니다.
이 「기록→손질→넣기」를 한 번 끝까지 해 보는 것이, 판단표를 들여다보는 것보다 빠른 이해의 지름길입니다. 이전 대상 중 가장 단순한 매크로로 한 번 해 두면 3장의 분류 정확도가 올라갑니다.
제한값은 먼저 확인한다
VBA에서 이전할 때 가장 함정이 되는 것은 클라우드 실행 특유의 제한값입니다. 데스크톱 VBA에는 사실상 없던 상한이, 여기서는 분명합니다.
목록을 전부 외울 필요는 없습니다. 실무에서 부딪히는 순으로 먼저 확인할 제한은 다음 세 가지입니다.
- 동기 처리의 120초 타임아웃. 「VBA에서 3분 걸리던 집계」는 그대로 가져오면 실패합니다. 이전 전에 현재 매크로의 소요 시간을 한 번 재 두세요. 여기가 가장 먼저, 그리고 가장 자주 부딪힙니다.
- 1회 요청·응답의 5MB. 「시트 전체를
getValues로 가져오는」 쓰기를 하면, 행이 많은 워크북에서 쉽게 넘습니다. 필요한 열·행으로 좁히거나 나눠 처리하는 설계가 필요합니다. - 커넥터가 다루는 파일 크기 25MB. 이것은 쓰는 방식으로는 피할 수 없습니다. 워크북 자체가 25MB를 넘으면, 그 시점에 클라우드 쪽 선택지는 사라지고 데스크톱 플로우 경유나 .NET이 됩니다.
거꾸로 「1분 안에 끝난다」, 「다루는 양이 수천 행」, 「워크북이 수 MB」라면, 아래 표는 거의 신경 쓰지 않고 진행할 수 있습니다.
| 제한 | 값 | 출처 |
|---|---|---|
| Office Scripts의 1회 요청·응답 크기 | 최대 5MB | 6 |
| 하나의 범위(Range) 셀 수 | 최대 500만 셀 | 6 |
| Run script 호출 횟수 | 사용자 1명당 하루 1,600회, 그리고 10초당 3회까지 | 64 |
| 동기 처리 타임아웃 | 120초 | 6 |
| Run script에 넘기는 파라미터 크기 | 최대 30,000,000바이트(약 28.6MB) | 6 |
| 커넥터가 다루는 Excel 파일 크기 | 최대 25MB | 4 |
| 커넥터의 1회 요청 크기 | 최대 5MB | 4 |
| 커넥터의 API 호출 | 연결 1개당 60초 동안 100회 | 4 |
Excel Online (Business) 커넥터로 테이블을 직접 조작할 때는 다음도 확인하세요.4
- 행 조작은 테이블이 전제입니다. 「행 추가(Add a row into a table)」, 「행 가져오기(Get a row)」 등의 액션은 테이블(ListObject)을 지정하는 설계라, 그냥 셀 범위에 쓴 데이터는 대상이 되지 않습니다. VBA 시절의 「A1 셀부터 적당히 쓰기 시작한 시트」는 이전 전에 테이블화가 필요합니다.
- List rows present in a table은 기본값으로 256행까지만 반환합니다. 전체 행을 가져오려면 페이지네이션 설정을 켭니다. 가져올 수 있는 열도 기본값으로 앞 500열까지입니다.
- 쓰기 반영에는 최대 30초 정도 지연이 생길 수 있습니다. 또한 커넥터 사용 후 파일은 최대 6분간 잠길 수 있습니다.
- 여러 클라이언트에서의 동시 쓰기는 지원하지 않습니다. 데스크톱 Excel에서 열어 둔 워크북에 플로우에서 쓰는 식의 운영은 충돌·불일치의 원인이 됩니다.
- 지원 형식은 .xlsx와 .xlsb(바이너리 워크북)입니다. .xlsm은 Run script 액션에서만 파일 브라우저로 고를 수 있고, 다른 액션에서 쓰려면 파일 ID 지정이 필요합니다. 다만 앞에서 말한 대로 안의 VBA 매크로는 실행되지 않습니다. ActiveX 컨트롤이나 폼 컨트롤을 포함한 .xlsm은 커넥터에서 동작하지 않는 경우가 있으므로, 사전 검증이 필수입니다.1
「매일 밤 수십만 행을 집계하는 매크로」를 그대로 Office Scripts로 다시 쓰면, 5MB 제한이나 120초 타임아웃에 정면으로 부딪힙니다. 이 규모는 처음부터 .NET(선택지 5)으로 나누는 편이 건전합니다.
데스크톱 플로우로 VBA를 실행하기
VBA를 그대로 남기는 경우, 데스크톱 플로우의 Launch Excel로 워크북을 열고, Run Excel macro 액션으로 매크로 이름(인수는 세미콜론 구분)을 지정해 실행합니다. 개인용 매크로 워크북(PERSONAL.XLSB)의 매크로를 쓰는 경우는, Launch Excel의 고급 설정에서 「새 Excel 프로세스 아래 배치(Nest under a new Excel process)」와 「추가 기능과 매크로 로드(Load add-ins and macros)」를 켜야 합니다.5
클라우드 플로우에서 데스크톱 플로우를 실행하려면 머신 등록과 데스크톱 플로우 연결이 필요하며, 유인 실행에서는 연결 소유자에게 Power Automate Premium 사용자 라이선스가, 무인 실행에서는 머신에 Power Automate Process 라이선스(또는 구 Unattended RPA 추가 기능)가 필요합니다.910 오류 처리나 무인 실행 전제 조건 등 데스크톱 플로우 전반의 설계는 별도 글 「Power Automate로 업무를 자동화하기 ── 클라우드 플로우·데스크톱 플로우 구분과 오류 처리 설계」에서 자세히 다루었습니다.
5. 라이선스와 전제 조건
Office Scripts는 「Excel에 붙어 있는 무료 기능」이 아니라는 점은, 이전 판단의 이른 단계에서 확인해야 합니다.
- Office Scripts의 이용·작성에는 상용 또는 교육용 Microsoft 365 구독 라이선스(Office 365 Business / Business Premium / ProPlus / ProPlus for Devices / A3 / A5 / E1 / E3 / E5 / F3)와 OneDrive for Business가 필요합니다. 조직 내 공유 링크 활성화와, 연결된 환경(connected experiences)을 켠 인터넷 연결도 전제입니다.6
- Power Automate에서 Office Scripts를 쓸 때도 Microsoft 365 비즈니스 라이선스가 필요합니다. E1과 F3는 Power Automate를 통해 스크립트를 실행할 수 있지만, Excel 안의 Power Automate 통합(Excel의 「작업 자동화」 기능 등)은 사용할 수 없습니다.7
- 개인·가정용 Microsoft 365에서의 Office Scripts는, 이 글을 쓴 시점(2026년 7월)에는 미리 보기 단계이며 Microsoft 365 Insider 프로그램 참여가 필요합니다. 업무 이용의 전제로 삼을 수 없습니다.6
- 클라이언트 쪽은 Excel on the web, Excel for Windows(버전 2210 이후), Excel for Mac에서 동작합니다.6
- 한편 VBA는 데스크톱판 Excel에 들어 있어 특별한 라이선스가 필요 없습니다.2
위 라이선스 조건은 이 글을 쓴 시점(2026년 7월) 기준입니다. 대상 플랜이나 전제 조건은 바뀔 수 있으므로, 도입을 판단하기 전에 각주의 Microsoft Learn에서 최신 조건을 확인하세요.
즉 「사내 Excel은 영구 라이선스판(일시불)이고, Microsoft 365는 미계약」인 환경에서는, 애초에 Office Scripts라는 선택지가 없습니다. 이 경우 이전 대상은 데스크톱 플로우를 통한 실행 자동화나 .NET으로의 재작성으로 좁혀집니다.
보안 면의 차이도 짚어 둘 가치가 있습니다. VBA 매크로는 Excel과 같은 권한으로 돌아가 데스크톱 전체에 접근할 수 있지만, Office Scripts가 접근할 수 있는 것은 워크북뿐이며, 로그인한 사용자의 인증 토큰이 스크립트에 넘어가는 일도 없습니다. 관리자는 테넌트 단위·그룹 단위로 Office Scripts 사용 여부나 Power Automate에서의 사용 여부를 제어할 수 있습니다. 매크로 보안 관리로 고생해 온 정보시스템 담당자에게, 이 통제의 쉬움은 이전의 이점 중 하나입니다.2
6. 이전을 진행하는 방법 ── 목록화, 분류, 단계적 이전
실제 이전은 다음 세 단계로 진행하는 것을 권합니다.
1단계: 목록화. 어떤 워크북에, 어떤 매크로가, 누구의 관리로 돌아가는지를 목록으로 만듭니다. VBScript 폐지 대응과 같은 절차를 쓸 수 있으므로, 구체적인 방법은 별도 글 「VBScript 폐지에 대비하는 VBA·사내 도구 점검 가이드」를 참조하세요. 목록화 시점에서 「이미 쓰이지 않는 매크로」가 20~30% 나오는 것이 보통이며, 이들을 이전 대상에서 빼는 것만으로 작업량이 줄어듭니다.
2단계: 분류. 남은 매크로를 3장의 판단표에 맞춥니다. 이때 매크로를 1개 단위가 아니라 처리 단위로 쪼개는 것이 요령입니다. 「파일 수집→정리→메일 발송」 매크로는 (3) 커넥터 + (2) Office Scripts + 메일 커넥터의 조합으로 나눌 수 있습니다. 나눠도 남는 VBA 의존(UserForm 대화형 입력, 다른 앱의 COM 조작 등)만 (1) 그대로 두기나 (4) 데스크톱 플로우 경유의 후보가 됩니다.
3단계: 단계적 이전. 처음부터 모든 매크로를 다시 쓰지 않고 우선순위를 둡니다.
- 실행 빈도가 높고, 워크북 안에서 끝나는 것부터 착수한다. 이전 효과가 크고, Office Scripts 숙련에도 맞습니다. VBA와 TypeScript는 언어는 다르지만, Office Scripts에도 조작 기록(Action Recorder)이 있어 VBA 매크로 기록과 같은 감각으로 초안을 만들 수 있습니다.2
- 이전한 플로우를 병행 가동하고, VBA 판과 결과를 맞춰 보는 기간을 둡니다. 테이블화나 날짜 형식 차이로 인한 차이는 여기서 드러납니다.
- VBA로 남기기로 한 것은 「관리하며 남긴다」. 실행 절차서와 담당자를 분명히 하고, 가능하면 데스크톱 플로우 실행으로 옮겨 실행 로그를 남깁니다.
VBA 전반의 앞날이나, 애초에 VBA를 계속 써도 되는 상황에 대한 생각은 「VBA란 무엇인가 - 제약, 전망, 교체가 필요한 경우와 현실적인 이전 패턴」에, 장표 생성을 .NET으로 옮기는 경우의 방식 비교는 「Excel 장표 출력 만드는 법 - COM/Open XML/템플릿」에 정리해 두었습니다. 또한 .NET에서 Excel을 COM으로 조작하는 구성을 고를 때는 프로세스가 남는 고전적인 문제가 있으므로 「C# Excel 조작에서 EXCEL.EXE가 남는 문제 ── COM 참조 해제 패턴과 교체 판단」도 함께 확인하세요.
7. 정리
「VBA에서 Power Automate로 이전할 수 있나요」에 대한 답은, 「매크로를 통째로 옮길 수는 없지만, 처리를 쪼개면 대부분은 옮길 곳이 있다」입니다.
워크북 안에서 끝나는 처리는 Office Scripts로 바꿔 클라우드 플로우에서 호출하고, 단순한 행 조작은 커넥터에 직접 맡기고, 다른 앱 연동이나 UserForm이 얽힌 부분은 VBA로 남기거나 데스크톱 플로우로 시간을 벌고, 대량 데이터나 복잡한 로직은 .NET으로 나눈다. 이 구분만 처음에 해 두면, 이전을 한 번에 할 필요가 없고 빈도가 높은 매크로부터 조금씩 진행할 수 있습니다.
반대로 구분 없이 「전부 Office Scripts로 다시 쓰자」고 시작하면, 이벤트나 UserForm의 벽, 5MB·120초 제한, 테이블 필수 제약에 잇달아 부딪혀 멈춥니다. 이전의 성패는 다시 쓰는 솜씨보다, 착수 전의 목록화와 분류로 거의 정해집니다. VBA 자산은 「언젠가 버릴 것」이 아니라 「나눠서 살릴 것」으로 다루는 편이, 결국 가장 비용이 적게 듭니다.
관련 글
- VBA란 무엇인가 - 제약, 전망, 교체가 필요한 경우와 현실적인 이전 패턴
- VBScript 폐지에 대비하는 VBA·사내 도구 점검 가이드
- Power Automate로 업무를 자동화하기 ── 클라우드 플로우·데스크톱 플로우 구분과 오류 처리 설계
- Excel 장표 출력 만드는 법 - COM/Open XML/템플릿
- C# Excel 조작에서 EXCEL.EXE가 남는 문제 ── COM 참조 해제 패턴과 교체 판단
관련 상담 영역
합동회사 코무라소프트에서는 Excel / VBA로 돌아가는 기존 업무의 목록화부터, Power Automate·Office Scripts·.NET으로의 단계적 이전 설계까지, 기존 자산을 살리는 전제로 상담을 다룹니다.
참고 링크
-
Microsoft Learn, How to use macro-enabled files in Power Automate flows. .xlsm 파일 안의 매크로는 Power Automate에서 실행할 수 없고 Office Scripts만 유효하다는 점, Run script 액션에서만 .xlsm을 파일 브라우저로 고를 수 있다는 점, ActiveX/폼 컨트롤을 포함한 파일이 동작하지 않는 경우가 있다는 점에 대해. ↩ ↩2
-
Microsoft Learn, Differences between Office Scripts and VBA macros. Office Scripts가 Excel 전용이며 워크북에만 접근할 수 있다는 점, 이벤트가 지원되지 않는다는 점, COM/OLE는 VBA만 가능하다는 점, Office Scripts에는 상용/교육 라이선스가 필요하고 VBA는 데스크톱판 Excel에 기본 탑재되어 있다는 점, 조작 기록·보안 통제의 차이에 대해. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
Microsoft Learn, Differences between Office Scripts and Office Add-ins. Office Scripts는 워크북과만 상호작용할 수 있으며, 대화 상자나 사용자 지정 UI 컨트롤이 필요하면 Office 추가 기능이 필요하다는 점에 대해. ↩ ↩2
-
Microsoft Learn, Excel Online (Business) - Connectors reference. 최대 파일 크기 25MB, 1회 요청 5MB, List rows 기본 256행과 페이지네이션, 가져올 열의 기본 500열 상한, Run script의 10초당 3회·하루 1,600회 제한, 마지막 사용 후 최대 6분의 파일 잠금, 쓰기 반영의 최대 30초 지연, 연결 1개당 60초에 100회의 스로틀링, 동시 편집 미지원, 지원 파일 형식에 대해. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Microsoft Learn, Run macros on an Excel workbook. 데스크톱 플로우의 Run Excel macro 액션으로 VBA 매크로를 실행하는 것, PERSONAL.XLSB 매크로 실행에 Launch Excel의 「Nest under a new Excel process」, 「Load add-ins and macros」 옵션이 필요하다는 점에 대해. ↩ ↩2 ↩3
-
Microsoft Learn, Platform limits and requirements with Office Scripts. 필요 라이선스 목록과 OneDrive for Business 요건, 지원 플랫폼(Excel on the web / Windows판 2210 이후 / Mac), 요청·응답 5MB 제한, 범위 500만 셀 제한, Run script 하루 1,600회 제한, 120초 타임아웃, 파라미터 30,000,000바이트 제한, Power Automate 실행 시 외부 API 호출(fetch)이 실패한다는 점, 개인·가정용은 미리 보기라는 점에 대해. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12
-
Microsoft Learn, Run Office Scripts with Power Automate. Run script / Run script from SharePoint library의 두 액션, Power Automate에서 Office Scripts를 쓰려면 Microsoft 365 비즈니스 라이선스가 필요하다는 점, E1·F3는 Power Automate에서의 실행은 가능하지만 Excel 안의 통합 기능은 쓸 수 없다는 점에 대해. ↩ ↩2 ↩3
-
Microsoft Learn, Trigger desktop flows from cloud flows. 클라우드 플로우에서 데스크톱 플로우를 실행하기 위한 전제 조건(등록된 머신, 데스크톱 플로우 연결, 실행 형태에 따른 라이선스)에 대해. ↩ ↩2
-
Microsoft Learn, A failed license check on a desktop flow run. 데스크톱 플로우의 유인 실행에는 연결 소유자의 Power Automate Premium 사용자 라이선스, 무인 실행에는 Unattended RPA 추가 기능 또는 Power Automate Process 라이선스가 필요하다는 점에 대해. ↩ ↩2
-
Microsoft Learn, Office Scripts in Excel. Excel의 스크립트 예약 기능이 일시적으로 꺼져 있으며, 대신 Power Automate 플로우로 예약 실행하도록 안내되고 있다는 점에 대해(2026년 7월 시점의 기재). ↩
-
Microsoft Learn, Tutorial: Create and format an Excel table. Excel의 「Automate」 탭에서 「New Script」 > 「Create from Recording」으로 조작을 기록하는 것, Automate 탭이 안 보이면 리본 오버플로나 플랫폼 요건을 확인하는 것, 기록 후 세부 창의 「Edit」으로 코드 편집기를 열어 다듬는 「기록한 뒤 편집하는」 방식에 대해. 기록 직후 코드가
workbook.getActiveWorksheet()로 시트를 가져오는 예도 같은 페이지에 실려 있음. ↩
관련 기사
같은 태그를 공유하는 최신 기사입니다. 더 가까운 주제로 지식을 넓힐 수 있습니다.
Power Automate로 업무를 자동화하기 ── 클라우드 플로우·데스크톱 플로우 구분과 오류 처리 설계
Power Automate의 클라우드 플로우와 데스크톱 플로우의 차이, PowerShell/VBA와의 역할 구분, 라이선스, 오류 처리, UI 자동화 안정화, 인증 정보를 안전하게 다루는 방법까지, 업무 자동화를 실제 운영에 적용하기 위한 실무 ...
메일로 도착하는 주문서·청구서 PDF를 Power Automate로 자동 처리하기 ── 저장·분류·알림·읽기 설계
메일로 도착하는 주문서·청구서 PDF의 저장·분류·알림을 Power Automate로 자동화하는 설계를 정리합니다. Outlook 트리거와 공유 사서함의 전제, 서명 이미지 오탐 대책, AI Builder로 읽는 방법과 라이선스 주의점까지 실무자...
Power Automate 라이선스 ── Microsoft 365만으로 어디까지 무료인가, Premium이 필요한 때는 언제인가
Power Automate는 Microsoft 365 범위에서 표준 커넥터 클라우드 플로우를 무료로 만들 수 있습니다. 다만 HTTP·SQL Server·Dataverse 같은 프리미엄 커넥터와 RPA·AI Builder에는 유료 라이선스가 필요...
Excel 대장을 SharePoint 리스트로 바꾸기 ── 공유·이력·플로우 연동으로 「대장이 깨지는」 문제에서 벗어나기
공유 폴더의 Excel 대장을 SharePoint 리스트(Microsoft Lists)로 이전하는 실무 가이드입니다. 동시 편집·덮어쓰기·행 밀림 문제의 해소, Excel에서 가져오는 절차, 열 유형 설계, 리스트 뷰 임계값 5,000의 정확한 ...
Power Automate의 오류 처리와 재시도 설계 ── 「돌아가던 플로우가 멈춰 있었다」를 막기
Power Automate 플로우가 「어느새 멈춰 있었다」가 되지 않게 하는 설계 패턴입니다. 재시도 정책의 기본값, 스코프를 이용한 Try-Catch, 실패 알림, 재제출과 멱등성, 동시 실행 제어까지 Microsoft Learn 사양을 바탕으...
관련 토픽
이 기사와 가까운 토픽 페이지입니다. 기사를 출발점 삼아 관련 서비스와 다른 기사로 이어집니다.
Windows 기술 토픽
Windows 개발, 장애 조사, 기존 자산 활용에 관한 KomuraSoft LLC 기사를 모은 토픽 허브입니다.
이 주제와 연결되는 서비스
이 기사는 다음 서비스 페이지로 이어집니다. 가까운 입구부터 확인해 주세요.
기술 상담 & 설계 리뷰
설계 방향, 아키텍처 경계, 수명 관리, 기존 Windows 자산 처리 방법을 정리하는 데 도움을 드립니다.
기존 자산 활용 & 이관 지원
COM / ActiveX / OCX 자산, 네이티브 코드, 32비트 의존성을 유지하면서 단계적인 이관 계획을 지원합니다.
자주 묻는 질문
이 기사 주제에 대해 상담 시 자주 나오는 질문을 모았습니다.
- 기존 VBA 매크로는 Power Automate에서 직접 실행할 수 있나요?
- 클라우드 플로우에서는 실행할 수 없습니다. Excel Online (Business) 커넥터는 .xlsm 파일 자체는 다룰 수 있지만, 그 안의 매크로를 Power Automate에서 실행할 수는 없으며, 실행할 수 있는 것은 Office Scripts뿐입니다. 한편 데스크톱 플로우(Power Automate for desktop)에는 Run Excel macro 액션이 있어, Launch Excel로 연 워크북의 VBA 매크로를 그대로 실행할 수 있습니다. VBA 코드를 바꾸지 않고 실행만 자동화하고 싶다면 데스크톱 플로우를 거치는 편이 현실적입니다.
- Office Scripts는 VBA를 완전히 대체하나요?
- 그렇지 않습니다. Office Scripts는 Excel 전용이라 Word나 Outlook 등 다른 Office 앱은 조작할 수 없습니다. 워크북에만 접근할 수 있기 때문에 로컬 파일이나 COM/OLE 연동도 불가하고, Workbook_Open 같은 이벤트 기반 실행이나 UserForm 사용자 지정 대화 상자도 없습니다. 반대로 워크북 안에서 끝나는 정리·집계·옮겨 쓰기라면 Office Scripts로 바꿀 수 있고, Power Automate에서 예약 실행이나 이벤트 트리거를 할 수 있게 됩니다. 둘은 대체 관계가 아니라 담당 범위가 다릅니다.
- Office Scripts를 쓰는 데 필요한 라이선스는 무엇인가요?
- 상용 또는 교육용 Microsoft 365 라이선스(Office 365 Business / Business Premium / ProPlus / E1 / E3 / E5 / F3 / A3 / A5)와 OneDrive for Business가 필요합니다. Power Automate에서 Office Scripts를 실행할 때도 Microsoft 365 비즈니스 라이선스가 필요하며, E1과 F3는 Power Automate를 통한 실행은 가능하지만 Excel 안의 Power Automate 통합 기능은 사용할 수 없습니다. VBA가 데스크톱판 Excel에 기본 포함되어 추가 라이선스가 필요 없는 것과는 대조적이므로, 이전 여부를 판단하기 전에 자사 라이선스를 확인해 두어야 합니다.
- Excel Online (Business) 커넥터만으로 자동화가 끝나나요?
- 단순한 처리라면 끝나지만, 제한이 많다는 점에 주의해야 합니다. 행 추가·조회·업데이트·삭제는 테이블(ListObject)로 된 범위를 전제로 하며, List rows present in a table은 기본값으로 256행까지만 반환하므로 페이지네이션을 켜야 합니다. 파일 크기는 최대 25MB, 1회 요청은 최대 5MB이며, 쓰기가 반영되기까지 최대 30초가 걸릴 수도 있습니다. 테이블에 대한 몇 행 정도의 읽기/쓰기는 커넥터로 직접 처리하고, 셀 서식이나 여러 시트에 걸친 처리는 Office Scripts로 나누는 편이 실무적입니다.