AI로 만드는 '엑셀 자동화 리본 메뉴' 30분 완벽 정리
리본 메뉴 편집기로 나만의 자동화 탭을 만들고 AI가 작성한 VBA 코드를 버튼에 연결해 추가기능 파일로 배포하는 전체 흐름을 정리합니다.
이 강의에서는 리본 메뉴 편집기와 AI가 작성한 VBA 코드를 활용해 엑셀에 나만의 자동화 탭을 추가하는 방법을 다룹니다. ChatGPT 바로가기, 폴더 내 파일 취합, 웹사이트 이동 드롭다운 같은 실무 버튼을 직접 만들고, 완성한 파일을 추가기능(xlam)으로 저장해 모든 통합 문서에서 동일한 자동화 메뉴를 사용할 수 있도록 등록하는 과정까지 정리합니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
리본 메뉴 편집기로 자동화 탭 만들기
리본 메뉴 편집기는 엑셀 화면 위쪽 메뉴 영역에 사용자 정의 탭과 버튼을 드래그만으로 배치할 수 있는 웹 기반 도구입니다. 빈 통합 문서를 열어두고 작업하면 새 탭과 그룹·버튼을 자유롭게 설계할 수 있습니다.
- 편집기에서 탭 추가를 눌러 새 탭을 만들고, 드래그로 홈 탭 뒤로 옮긴 뒤 레이블을 원하는 이름으로 바꿉니다.

- 새 탭 안에 버튼을 드래그로 추가하고 레이블·아이콘을 지정합니다. 기본 아이콘 목록에서 선택하거나 ChatGPT 로고처럼 직접 준비한 이미지를 등록할 수 있습니다.

- 버튼 크기를 라지에서 노말로 바꿔 작은 버튼으로 표시하거나, 그룹 추가로 메일 발송 같은 카테고리를 묶어 정리합니다.

- 웹사이트·폴더 이동을 위한 드롭다운도 동일하게 드래그로 배치한 뒤 항목과 ID를 정리합니다.

사용 중인 파일에 리본 메뉴를 얹고 싶다면 다른 파일 불러오기로 대상 파일을 먼저 열고 작업합니다.
메뉴 자동화에 꼭 알아야 할 VBA 핵심 이론 2가지
이제 리본 메뉴 편집기에서 생성한 버튼 위에 AI가 작성한 코드를 얹으면 자동화가 끝납니다.
그 전에, 원활한 실습을 위해 엑셀 매크로 편집기의 기본적인 사용법과 VBA 코드의 이름을 찾는 방법을 빠르게 살펴보겠습니다.
- 엑셀에서 Alt + F11을 누르면 매크로 편집기가 열립니다. 노트북에서 펑션키가 잠겨 있으면 Alt + Fn + F11로 매크로 편집기를 열 수 있습니다.

- 편집기 왼쪽 프로젝트 창에서 삽입 → 모듈로 새 모듈을 추가합니다. VBA 편집기의 코드 실행 영역은 '워크시트/통합문서, 유저폼, 모듈, 클래스모듈' 이 있지만 리본 메뉴에서 호출하는 일반 매크로는 거의 모두 모듈에 작성합니다.

- 모든 매크로는 Sub 이름 ~ End Sub 사이에 동작을 적습니다. 오류가 발생하면 어떤 Sub에서 났는지 표시되므로 이름을 알아보기 쉽게 짓는 편이 좋습니다.

- 예를 들어 "테스트" 라는 코드를 추가한 후, MsgBox "헬로우 엑셀"로 메시지박스를 출력하는 한 줄짜리 코드를 작성합니다.

- 이제 [실행] 버튼을 클릭하면 안내창이 출력됩니다.

- Sub 안에서 다른 Sub 이름을 호출해 여러 매크로를 묶어서 실행하는 것도 가능합니다. 예를 들어, "호출" 이라는 코드를 추가하고 그 안에 '테스트' 매크로를 작성하면 "호출"을 실행했을 때 '테스트' 매크로가 실행됩니다.

예제1: ChatGPT 이동 버튼 만들기
리본 메뉴 편집기에서 만든 버튼은 콜백 매크로 이름을 통해 VBA 코드와 연결됩니다. ChatGPT 바로가기 버튼을 예시로 매크로 등록부터 실행까지 따라갑니다.
- 먼저 ChatGPT (또는 클로드, 제미나이 등) 편한 AI 모델로 VBA 코드를 작성합니다. 이번에는 VBA로 ChatGPT를 실행하기 위한 코드를 작성하도록 다음과 같이 요청하겠습니다. 그러면 ChatGPT로 이동하는 엑셀 VBA 코드가 작성됩니다.
'ChatGPT.com 으로 이동하는 엑셀 vba 코드를 작성하세요.' - 리본메뉴 편집기에서 ChatGPT 버튼을 추가한 후, 오른쪽 콜백 영역에서 새 매크로 만들기로 호출 매크로 이름을 지정합니다. 이번에는 'btn_ChatGPT'로 지정합니다.

- [추가] 버튼을 클릭해 콜백 매크로가 등록되었으면, 그 다음 단계로 넘어갑니다.

예제2: 드롭다운으로 웹사이트 이동 메뉴 만들기
이번에는 드롭다운 버튼을 활용해서 각 항목을 클릭했을 때, 특정 동작을 수행하는 버튼을 만들어 보겠습니다. 이 때, 각 항목에 ID를 지정해두면 VBA 코드에서 어떤 항목이 선택됐는지 구분해 분기할 수 있습니다.
- 엑셀 리본메뉴 편집기에서 [드롭다운] 메뉴를 추가한 후, 항목에 유튜브·구글·오빠두엑셀을 추가합니다.

- 각 항목의 ID를 youtube, google, oppadu처럼 의미 있는 영문으로 바꿔 VBA 코드를 편리하게 작성하고 직관적으로 식별되도록 합니다.

- 마지막으로 콜백메뉴를 추가합니다. 이번에 드롭다운에 적용할 콜백은 '항목을 선택했을 때 동작'하는 것이므로, onAction 으로 매크로를 추가합니다. 이번에는 'cbo_Website' 라는 매크로를 추가하겠습니다.

- [추가] 버튼을 클릭해 'cbo_Website' 콜백 매크로가 잘 등록된 것을 확인합니다.
예제3: 폴더 내 파일 취합 자동화 버튼 만들기
파일 취합은 실무에서 자주 쓰이는 엑셀 작업입니다. 이번에는 AI에 '파일 취합'을 자동화하는 코드를 요청해보겠습니다. AI로 코드를 작성할 때는 작업 흐름과 함께 검토해야 할 항목까지 함께 물어보면 빠뜨리는 옵션 없이 코드를 받을 수 있습니다.
- ChatGPT에 폴더 내 엑셀 파일을 한 시트로 취합하는 VBA 코드를 요청하면서, 꼭 확인해야 하는 항목만 표로 알려달라고 함께 요청합니다.
엑셀 VBA로 폴더를 선택하면 폴더 안에 파일을 취합하는 코드를 작성하려고 합니다. 추가로 제가 무엇을 알려드려야 하나요? 저는 완전 입문자입니다. 반드시 검토가 필요한 항목만 표로 알기 쉽게 정리하세요. 나머지 중요하지 않은 항목은 일반적인 설정(기본값)으로 처리해도 괜찮습니다. 중요하지 않은 항목은 표 아래에 간단하게만 정리하세요. 편리하게 복사/붙여넣기로 답변할 수 있도록 예시 답변도 작성해주세요. 검토 후 코드 작성을 시작합시다.
- AI가 정리해 준 항목(시트 이름, 헤더 위치, 결과 시트 등)을 채워서 다시 코드를 생성하도록 요청합니다.

오빠두Tip : 모든 과정을 직접 알지 못해도 됩니다. 잘 모르니 추가로 알려줘야 할 항목을 표로 정리해 달라고 요청하면 AI가 필수 입력값을 먼저 보여주므로, 답변을 채워가며 코드를 완성합니다. - 파일 취합 코드가 완성되었으면, 코드를 복사해 메모장에 임시 보관합니다.

- 엑셀 리본 메뉴 편집기에서 '파일 취합' 버튼을 추가한 후, 'btn_Merge' 라는 콜백 매크로를 등록하면 파일 취합 자동화 버튼을 만들 준비가 모두 끝났습니다.

매크로 등록: 완성된 파일에 콜백 매크로 적용하기 [버튼]
- 리본메뉴 버튼과 콜백 매크로를 모두 등록하였으면, [저장하기] 버튼을 클릭해 파일을 저장합니다.

- 편집기 오른쪽 아래에서 리본 메뉴 실행에 필요한 콜백 매크로 코드를 복사합니다.

- 엑셀의 매크로 편집기에서 [삽입] - [모듈]로 새 모듈을 추가한 후, 복사한 콜백 매크로 모듈을 붙여넣어 빈 Sub 골격을 준비합니다.

- 다시 새로운 모듈을 추가한 후, 이전 단계에서 만든 'ChatGPT 이동' 매크로와 '파일 취합' 매크로 코드를 붙여넣습니다.
Sub OpenChatGPT() Dim url As String url = "https://chatgpt.com"ThisWorkbook.FollowHyperlink url End SubSub 파일취합()Dim folderPath As String Dim fileName As String Dim wbSource As Workbook Dim wsSource As Worksheet Dim wbResult As Workbook Dim wsResult As WorksheetDim lastRowSource As Long Dim lastColSource As Long Dim nextRowResult As Long Dim sourceRange As Range Dim isFirstFile As Boolean Dim savePath As String Dim desktopPath As String Dim fileCount As Long Dim mergedCount As Long On Error GoTo ErrorHandler ' 속도 최적화 Application.ScreenUpdating = False Application.DisplayAlerts = False Application.EnableEvents = False ' 폴더 선택 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "취합할 엑셀 파일이 있는 폴더를 선택하세요" If .Show <> -1 Then MsgBox "폴더 선택이 취소되었습니다.", vbExclamation GoTo ExitHandler End If folderPath = .SelectedItems(1) End With If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\" ' 결과 통합문서 생성 Set wbResult = Workbooks.Add Set wsResult = wbResult.Sheets(1) wsResult.Name = "취합결과" isFirstFile = True fileCount = 0 mergedCount = 0 ' xlsx 파일 처리 fileName = Dir(folderPath & "*.xlsx") Do While fileName <> "" ' 결과 파일 자신이 다시 취합되지 않도록 방지 If Left(fileName, 2) <> "~$" Then fileCount = fileCount + 1 Set wbSource = Workbooks.Open(folderPath & fileName, ReadOnly:=True) Set wsSource = wbSource.Sheets(1) lastRowSource = GetLastUsedRow(wsSource) lastColSource = GetLastUsedCol(wsSource) If lastRowSource > 0 And lastColSource > 0 Then If isFirstFile Then Set sourceRange = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRowSource, lastColSource)) wsResult.Range("A1").Resize(sourceRange.Rows.Count, sourceRange.Columns.Count).Value = sourceRange.Value isFirstFile = False mergedCount = mergedCount + 1 Else If lastRowSource >= 2 Then nextRowResult = GetLastUsedRow(wsResult) + 1 Set sourceRange = wsSource.Range(wsSource.Cells(2, 1), wsSource.Cells(lastRowSource, lastColSource)) wsResult.Cells(nextRowResult, 1).Resize(sourceRange.Rows.Count, sourceRange.Columns.Count).Value = sourceRange.Value mergedCount = mergedCount + 1 End If End If End If wbSource.Close SaveChanges:=False End If fileName = Dir Loop ' xlsm 파일 처리 fileName = Dir(folderPath & "*.xlsm") Do While fileName <> "" If Left(fileName, 2) <> "~$" Then fileCount = fileCount + 1 Set wbSource = Workbooks.Open(folderPath & fileName, ReadOnly:=True) Set wsSource = wbSource.Sheets(1) lastRowSource = GetLastUsedRow(wsSource) lastColSource = GetLastUsedCol(wsSource) If lastRowSource > 0 And lastColSource > 0 Then If isFirstFile Then Set sourceRange = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRowSource, lastColSource)) wsResult.Range("A1").Resize(sourceRange.Rows.Count, sourceRange.Columns.Count).Value = sourceRange.Value isFirstFile = False mergedCount = mergedCount + 1 Else If lastRowSource >= 2 Then nextRowResult = GetLastUsedRow(wsResult) + 1 Set sourceRange = wsSource.Range(wsSource.Cells(2, 1), wsSource.Cells(lastRowSource, lastColSource)) wsResult.Cells(nextRowResult, 1).Resize(sourceRange.Rows.Count, sourceRange.Columns.Count).Value = sourceRange.Value mergedCount = mergedCount + 1 End If End If End If wbSource.Close SaveChanges:=False End If fileName = Dir Loop ' 파일이 하나도 없을 때 If mergedCount = 0 Then MsgBox "선택한 폴더에 취합할 엑셀 파일이 없거나, 데이터가 비어 있습니다.", vbExclamation wbResult.Close SaveChanges:=False GoTo ExitHandler End If ' 열 너비 자동 맞춤 wsResult.Columns.AutoFit ' 바탕화면에 저장 desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") savePath = desktopPath & "\취합결과_" & Format(Now, "yyyymmdd_hhnnss") & ".xlsx" wbResult.SaveAs fileName:=savePath, FileFormat:=xlOpenXMLWorkbook MsgBox "취합이 완료되었습니다." & vbCrLf & vbCrLf & _ "확인한 파일 수: " & fileCount & "개" & vbCrLf & _ "취합한 파일 수: " & mergedCount & "개" & vbCrLf & _ "저장 위치: " & savePath, vbInformation ExitHandler: Application.ScreenUpdating = True Application.DisplayAlerts = True Application.EnableEvents = True Exit Sub ErrorHandler: MsgBox "오류가 발생했습니다: " & Err.Description, vbCritical On Error Resume Next If Not wbSource Is Nothing Then wbSource.Close SaveChanges:=False If Not wbResult Is Nothing Then ' 결과 파일은 필요시 열어둠 End If Resume ExitHandler End Sub Function GetLastUsedRow(ws As Worksheet) As Long Dim lastCell As Range On Error Resume Next Set lastCell = ws.Cells.Find(What:="*", _ After:=ws.Range("A1"), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious) On Error GoTo 0 If lastCell Is Nothing Then GetLastUsedRow = 0 Else GetLastUsedRow = lastCell.Row End If End Function Function GetLastUsedCol(ws As Worksheet) As Long Dim lastCell As Range On Error Resume Next Set lastCell = ws.Cells.Find(What:="*", _ After:=ws.Range("A1"), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious) On Error GoTo 0 If lastCell Is Nothing Then GetLastUsedCol = 0 Else GetLastUsedCol = lastCell.Column End If End Function
- 다시 콜백 매크로 모듈로 돌아온 후, btn_OpenChatGPT와 btn_Merge 콜백 매크로에 붙여넣은 실행 매크로 코드를 입력합니다.

- 이제 리본 메뉴에서 버튼을 클릭하면 올바르게 동작하는 것을 확인할 수 있습니다.

매크로 등록: 완성된 파일에 콜백 매크로 적용하기 [드롭다운]
- 이번에는 드롭다운 메뉴를 클릭했을 때, 특정 웹사이트로 이동하는 콜백 매크로를 등록하겠습니다. 콜백 매크로 모듈에서 'cbo_Website' 코드를 복사합니다.

- 기존 콜백 매크로를 수정하도록 다음과 같이 프롬프트를 요청합니다.
Sub cbo_Website(control As IRibbonControl, id As String, index As Integer) ' TODO: 선택된 항목 처리 (id / index) End Sub---위 콜백 매크로를 다음과 같이 동작하도록 수정합니다.- 목적: 드롭다운 아이템을 클릭하면 각 id에 맵핑된 웹사이트로 이동합니다. id와 웹사이트 주소는 다음과 같습니다. - youtube : youtube.com - google : google.com - oppadu : oppadu.com
- 기존 콜백 매크로를 수정된 코드로 교체하면 자동화 드롭다운 메뉴가 완성됩니다.

- 이제 드롭다운 메뉴를 선택하면 올바르게 동작하는 것을 확인할 수 있습니다.

완성 파일 저장 및 추가기능으로 엑셀에 등록하는 방법
완성한 자동화 파일은 매크로 사용 통합 문서(xlsm)로 저장해 단독 배포하거나, 추가기능(xlam)으로 변환해 모든 엑셀 파일에서 동일한 메뉴를 사용하도록 등록할 수 있습니다.

완성된 파일을 매크로 파일로 저장하고 추가기능으로 변환하는 방법은 영상 강의에서 알기 쉽게 정리했으니, 전체 과정은 영상 강의를 확인하세요!