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

AI로 만드는 '엑셀 자동화 리본 메뉴' 30분 완벽 정리

오빠두엑셀 by 오빠두엑셀
  • 학습시간 37분
  • 난이도 전문가
  • 작성일 2026.05.29

리본 메뉴 편집기로 나만의 자동화 탭을 만들고 AI가 작성한 VBA 코드를 버튼에 연결해 추가기능 파일로 배포하는 전체 흐름을 정리합니다.

이 강의에서는 리본 메뉴 편집기와 AI가 작성한 VBA 코드를 활용해 엑셀에 나만의 자동화 탭을 추가하는 방법을 다룹니다. ChatGPT 바로가기, 폴더 내 파일 취합, 웹사이트 이동 드롭다운 같은 실무 버튼을 직접 만들고, 완성한 파일을 추가기능(xlam)으로 저장해 모든 통합 문서에서 동일한 자동화 메뉴를 사용할 수 있도록 등록하는 과정까지 정리합니다.

AI로 만드는 '엑셀 자동화 리본 메뉴' 30분 완벽 정리
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

리본 메뉴 편집기로 자동화 탭 만들기

리본 메뉴 편집기는 엑셀 화면 위쪽 메뉴 영역에 사용자 정의 탭과 버튼을 드래그만으로 배치할 수 있는 웹 기반 도구입니다. 빈 통합 문서를 열어두고 작업하면 새 탭과 그룹·버튼을 자유롭게 설계할 수 있습니다.

  1. 편집기에서 탭 추가를 눌러 새 탭을 만들고, 드래그로 홈 탭 뒤로 옮긴 뒤 레이블을 원하는 이름으로 바꿉니다.
    엑셀-자동화-메뉴-추가
  2. 새 탭 안에 버튼을 드래그로 추가하고 레이블·아이콘을 지정합니다. 기본 아이콘 목록에서 선택하거나 ChatGPT 로고처럼 직접 준비한 이미지를 등록할 수 있습니다.
    엑셀-자동화-메뉴-버튼-추가하기
  3. 버튼 크기를 라지에서 노말로 바꿔 작은 버튼으로 표시하거나, 그룹 추가로 메일 발송 같은 카테고리를 묶어 정리합니다.
    엑셀-리본메뉴-버튼-크기-변경
  4. 웹사이트·폴더 이동을 위한 드롭다운도 동일하게 드래그로 배치한 뒤 항목과 ID를 정리합니다.
    엑셀-리본-메뉴-드롭다운-버튼-추가하기

사용 중인 파일에 리본 메뉴를 얹고 싶다면 다른 파일 불러오기로 대상 파일을 먼저 열고 작업합니다.

실습 환경

리본 메뉴 편집기 사용 조건
윈도우맥은 지원 안 됨
엑셀 2013 이후이전 버전은 제한
엑셀 전용한셀·구글시트 미지원

메뉴 자동화에 꼭 알아야 할 VBA 핵심 이론 2가지

이제 리본 메뉴 편집기에서 생성한 버튼 위에 AI가 작성한 코드를 얹으면 자동화가 끝납니다.

그 전에, 원활한 실습을 위해 엑셀 매크로 편집기의 기본적인 사용법과 VBA 코드의 이름을 찾는 방법을 빠르게 살펴보겠습니다.

  1. 엑셀에서 Alt + F11을 누르면 매크로 편집기가 열립니다. 노트북에서 펑션키가 잠겨 있으면 Alt + Fn + F11로 매크로 편집기를 열 수 있습니다.
    엑셀-VBA-편집기-열기
  2. 편집기 왼쪽 프로젝트 창에서 삽입 → 모듈로 새 모듈을 추가합니다. VBA 편집기의 코드 실행 영역은 '워크시트/통합문서, 유저폼, 모듈, 클래스모듈' 이 있지만 리본 메뉴에서 호출하는 일반 매크로는 거의 모두 모듈에 작성합니다.
    새-모듈-추가하기
  3. 모든 매크로는 Sub 이름 ~ End Sub 사이에 동작을 적습니다. 오류가 발생하면 어떤 Sub에서 났는지 표시되므로 이름을 알아보기 쉽게 짓는 편이 좋습니다.
    vba-코드-sub-사이-작성
  4. 예를 들어 "테스트" 라는 코드를 추가한 후, MsgBox "헬로우 엑셀"로 메시지박스를 출력하는 한 줄짜리 코드를 작성합니다.
    엑셀-vba-테스트-코드-작성
  5. 이제 [실행] 버튼을 클릭하면 안내창이 출력됩니다.
    엑셀-vba-안내창-출력
  6. Sub 안에서 다른 Sub 이름을 호출해 여러 매크로를 묶어서 실행하는 것도 가능합니다. 예를 들어, "호출" 이라는 코드를 추가하고 그 안에 '테스트' 매크로를 작성하면 "호출"을 실행했을 때 '테스트' 매크로가 실행됩니다.
    엑셀-sub-묶어서-실행

단축키

Alt + F11

매크로 편집기 열기

작성 위치

모듈 시트

Sub ~ End Sub 사이에 작성

예제1: ChatGPT 이동 버튼 만들기

리본 메뉴 편집기에서 만든 버튼은 콜백 매크로 이름을 통해 VBA 코드와 연결됩니다. ChatGPT 바로가기 버튼을 예시로 매크로 등록부터 실행까지 따라갑니다.

  1. 먼저 ChatGPT (또는 클로드, 제미나이 등) 편한 AI 모델로 VBA 코드를 작성합니다. 이번에는 VBA로 ChatGPT를 실행하기 위한 코드를 작성하도록 다음과 같이 요청하겠습니다. 그러면 ChatGPT로 이동하는 엑셀 VBA 코드가 작성됩니다.
    'ChatGPT.com 으로 이동하는 엑셀 vba 코드를 작성하세요.'
  2. 리본메뉴 편집기에서 ChatGPT 버튼을 추가한 후, 오른쪽 콜백 영역에서 새 매크로 만들기로 호출 매크로 이름을 지정합니다. 이번에는 'btn_ChatGPT'로 지정합니다.
    chatgpt-콜백-버튼-만들기
  3. [추가] 버튼을 클릭해 콜백 매크로가 등록되었으면, 그 다음 단계로 넘어갑니다.
    chatgpt-콜백-등록-완료

예제2: 드롭다운으로 웹사이트 이동 메뉴 만들기

이번에는 드롭다운 버튼을 활용해서 각 항목을 클릭했을 때, 특정 동작을 수행하는 버튼을 만들어 보겠습니다. 이 때, 각 항목에 ID를 지정해두면 VBA 코드에서 어떤 항목이 선택됐는지 구분해 분기할 수 있습니다.

  1. 엑셀 리본메뉴 편집기에서 [드롭다운] 메뉴를 추가한 후, 항목에 유튜브·구글·오빠두엑셀을 추가합니다.
    드롭다운-메뉴-추가
  2. 각 항목의 ID를 youtube, google, oppadu처럼 의미 있는 영문으로 바꿔 VBA 코드를 편리하게 작성하고 직관적으로 식별되도록 합니다.
    항목-id-변경
  3. 마지막으로 콜백메뉴를 추가합니다. 이번에 드롭다운에 적용할 콜백은 '항목을 선택했을 때 동작'하는 것이므로, onAction 으로 매크로를 추가합니다. 이번에는 'cbo_Website' 라는 매크로를 추가하겠습니다.
    드롭다운-매크로-만들기
  4. [추가] 버튼을 클릭해 'cbo_Website' 콜백 매크로가 잘 등록된 것을 확인합니다.

레이블 vs ID

레이블

화면에 표시되는 이름. 자유롭게 변경 가능

ID

VBA 안에서 항목을 식별. 의미 있는 영문 권장

예제3: 폴더 내 파일 취합 자동화 버튼 만들기

파일 취합은 실무에서 자주 쓰이는 엑셀 작업입니다. 이번에는 AI에 '파일 취합'을 자동화하는 코드를 요청해보겠습니다. AI로 코드를 작성할 때는 작업 흐름과 함께 검토해야 할 항목까지 함께 물어보면 빠뜨리는 옵션 없이 코드를 받을 수 있습니다.

  1. ChatGPT에 폴더 내 엑셀 파일을 한 시트로 취합하는 VBA 코드를 요청하면서, 꼭 확인해야 하는 항목만 표로 알려달라고 함께 요청합니다.
    엑셀 VBA로 폴더를 선택하면 폴더 안에 파일을 취합하는 코드를 작성하려고 합니다.
    추가로 제가 무엇을 알려드려야 하나요?
    저는 완전 입문자입니다. 반드시 검토가 필요한 항목만 표로 알기 쉽게 정리하세요.
    나머지 중요하지 않은 항목은 일반적인 설정(기본값)으로 처리해도 괜찮습니다. 중요하지 않은 항목은 표 아래에 간단하게만 정리하세요.
    편리하게 복사/붙여넣기로 답변할 수 있도록 예시 답변도 작성해주세요.
    검토 후 코드 작성을 시작합시다.
  2. AI가 정리해 준 항목(시트 이름, 헤더 위치, 결과 시트 등)을 채워서 다시 코드를 생성하도록 요청합니다.
    파일-취합-vba-작성-기본값
    오빠두Tip : 모든 과정을 직접 알지 못해도 됩니다. 잘 모르니 추가로 알려줘야 할 항목을 표로 정리해 달라고 요청하면 AI가 필수 입력값을 먼저 보여주므로, 답변을 채워가며 코드를 완성합니다.
  3. 파일 취합 코드가 완성되었으면, 코드를 복사해 메모장에 임시 보관합니다.
    완성-코드-메모장-옮기기
  4. 엑셀 리본 메뉴 편집기에서 '파일 취합' 버튼을 추가한 후, 'btn_Merge' 라는 콜백 매크로를 등록하면 파일 취합 자동화 버튼을 만들 준비가 모두 끝났습니다.
    파일-취합-버튼-추가

매크로 등록: 완성된 파일에 콜백 매크로 적용하기 [버튼]

  1. 리본메뉴 버튼과 콜백 매크로를 모두 등록하였으면, [저장하기] 버튼을 클릭해 파일을 저장합니다.
    매크로-파일-저장
  2. 편집기 오른쪽 아래에서 리본 메뉴 실행에 필요한 콜백 매크로 코드를 복사합니다.
    콜백-매크로-복사
  3. 엑셀의 매크로 편집기에서 [삽입] - [모듈]로 새 모듈을 추가한 후, 복사한 콜백 매크로 모듈을 붙여넣어 빈 Sub 골격을 준비합니다.
    vba-콜백-모듈-옮기기
  4. 다시 새로운 모듈을 추가한 후, 이전 단계에서 만든 '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
  5. 다시 콜백 매크로 모듈로 돌아온 후, btn_OpenChatGPT와 btn_Merge 콜백 매크로에 붙여넣은 실행 매크로 코드를 입력합니다.
    콜백-매크로-실행-코드-입력
  6. 이제 리본 메뉴에서 버튼을 클릭하면 올바르게 동작하는 것을 확인할 수 있습니다.
    리본-자동화-메뉴-버튼-동작-확인

매크로 등록: 완성된 파일에 콜백 매크로 적용하기 [드롭다운]

  1. 이번에는 드롭다운 메뉴를 클릭했을 때, 특정 웹사이트로 이동하는 콜백 매크로를 등록하겠습니다. 콜백 매크로 모듈에서 'cbo_Website' 코드를 복사합니다.
    웹사이트-이동-매크로-복사
  2. 기존 콜백 매크로를 수정하도록 다음과 같이 프롬프트를 요청합니다.
    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
  3. 기존 콜백 매크로를 수정된 코드로 교체하면 자동화 드롭다운 메뉴가 완성됩니다.
    드롭다운-자동화-메뉴-완성
  4. 이제 드롭다운 메뉴를 선택하면 올바르게 동작하는 것을 확인할 수 있습니다.
    웹사이트-이동-버튼-동작-확인

완성 파일 저장 및 추가기능으로 엑셀에 등록하는 방법

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

자동화-메뉴-추가기능

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

배포 옵션

xlsm파일 단독 배포. 해당 파일을 열 때만 메뉴 표시
xlam추가기능 등록. 모든 엑셀 파일에서 메뉴 사용
댓글 0
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!