
하루에 3시간씩 걸리는 반복적인 업무를 최소 20%씩만 절약해도, 한 달이면 12시간 이상을 절약할 수 있습니다. 어떻게 하면 업무 생산성을 높일 수 있을까요? 해답은 사용자 리본 메뉴 만들기에 있습니다. 사용자 리본 메뉴에 자주 사용하는 메뉴와 매크로를 배치하고, 매크로에 단축키를 만들어 사용한다면, 매일 반복하는 수작업으로부터 받던 고통에서 벗어날 수 있습니다. 그럼 리본 메뉴 만드는 방법에 대해 알아보겠습니다.
1. Excel 추가기능 파일(.xlam) 만들기 2. 나만의 리본 메뉴 만들기 3. 엑셀 추가기능 (Addin) 설치 하기 4. 리본 메뉴 편집 5. 매크로 작성 6. 매크로 단축키 만들기 |
1 | Excel 추가기능 파일(.xlam) 만들기 |
1. 새 Excel 통합문서를 만듭니다. 내용은 입력하지 않습니다.
2. 다른 이름으로 저장 단축키 F12를 누르고, ① [파일 형식]을 [Excel 97-2003 추가 기능] 선택하고, ② [파일 이름]을 Custom_Ribbon_Sample로 통합문서를 저장합니다.

2 | 나만의 리본 메뉴 만들기 |
1. 엑셀파일의 customUI14.xml을 손쉽게 변경하기 위해서는 Office RibbonX Editor를 다운받아서 사용합니다. 아래 사이트에 접속하여 최신 릴리즈 버전을 다운로드 합니다.
https://github.com/fernandreu/office-ribbonx-editor/releases/tag/v1.9.0
2. 설치후 실행하면 다음과 같은 창이 뜹니다.

3. ① [Open] 버튼을 눌러, 좀전에 만들었던 ② Custom_Ribbon_Sample 파일을 선택후 ③ [열기] 버튼을 누릅니다.

4. ① Custom_Ribbon_Sample.xlam에서 마우스 우클릭해서 ② [Insert Office 2010+ Custom UI Part] 선택합니다.

5. customUI14.xml을 더블클릭 합니다.

6. 우측 코드창에 아래의 XML 코드를 복사해 붙여 넣습니다. 코드의 세세한 부분까지는 알 필요가 없습니다. 여기에서는 리본 메뉴가 코드의 어느 부분에 해당 하는지 정도만 알면 됩니다.
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <!-- 리본 사용자 정의 시작 --> <ribbon startFromScratch="false"> <tabs> <tab id="CUSTAB" label="우공이산" insertBeforeMso="TabHome"> <!-- '우공이산'이라는 사용자 정의 탭을 '홈' 탭 앞에 삽입 --> <group id="FileGroup" label="파일"> <!-- '파일' 그룹 생성 --> <control idMso="FileNewDefault" label="New" /> <!-- 새 파일 만들기 --> <control idMso="FileOpenUsingBackstage" label="Open"/> <!-- 파일 열기 --> <control idMso="FileSave" label="Save"/> <!-- 파일 저장 --> </group> <group id="FontsGroup" label="글꼴"> <!-- '글꼴' 그룹 생성 --> <box id="box01" boxStyle="horizontal"> <!-- 가로로 정렬된 상자 생성 --> <comboBox idMso="Font" label=" "/> <!-- 글꼴 선택 콤보 박스 --> <comboBox idMso="FontSize" label=" "/> <!-- 글꼴 크기 선택 콤보 박스 --> <button idMso="FontSizeIncrease" label=" "/> <!-- 글꼴 크기 증가 버튼 --> <button idMso="FontSizeDecrease" label=" "/> <!-- 글꼴 크기 감소 버튼 --> </box> <box id="box02" boxStyle="horizontal"> <!-- 두 번째 가로 정렬 상자 --> <buttonGroup id="HFButtonGroup1"> <!-- 버튼 그룹 생성 --> <control idMso="FormatPainter" label=" " /> <!-- 서식 복사 버튼 --> <toggleButton idMso="Bold" /> <!-- 굵게 토글 버튼 --> <toggleButton idMso="Italic" /> <!-- 기울임꼴 토글 버튼 --> <menu id="Udline00" imageMso="Underline"> <!-- 밑줄 메뉴 생성 --> <control idMso="Underline" label="밑줄" /> <!-- 밑줄 --> <control idMso="UnderlineDouble" label="이중 밑줄" /> <!-- 이중 밑줄 --> <control idMso="Strikethrough" label="취소선" /> <!-- 취소선 --> </menu> <control idMso="FontColorPicker" label=" "/> <!-- 글꼴 색상 선택기 --> </buttonGroup> </box> <box id="box03" boxStyle="horizontal"> <!-- 세 번째 가로 정렬 상자 --> <splitButton idMso="MergeCenterMenu"/> <!-- 병합 및 가운데 맞춤 스플릿 버튼 --> </box> </group> <group id="CellsAlign" label="맞춤/셀 편집"> <!-- '맞춤/셀 편집' 그룹 생성 --> <button id="btn01" label="셀병합" onAction="MergeCell" imageMso="MergeCells"/> <!-- 셀 병합 버튼 --> <button id="btn02" label="셀분할" onAction="unMergeCell" imageMso="UnmergeCells"/> <!-- 셀 분할 버튼 --> <button id="btn05" label="채우기" onAction="EmptyCellFill" imageMso="FillDown"/> <!-- 셀 채우기 버튼 --> </group> <group id="StyleGroup" label="스타일"> <!-- '스타일' 그룹 생성 --> <control idMso="ConditionalFormattingMenu" label="조건부" /> <!-- 조건부 서식 메뉴 --> <control idMso="FormatAsTableGallery" label="표서식"/> <!-- 표 서식 갤러리 --> <control idMso="CellStylesGallery" label="셀서식"/> <!-- 셀 서식 갤러리 --> </group> <group id="InsertGroup" label="삽입"> <!-- '삽입' 그룹 생성 --> <control idMso="ShapesInsertGallery" label="도형" /> <!-- 도형 삽입 갤러리 --> <control idMso="ChartTypeAllInsertDialog" label="차트"/> <!-- 차트 삽입 대화 상자 --> <control idMso="TextBoxInsertHorizontal" label="글자" /> <!-- 텍스트 상자 삽입 --> <control idMso="SymbolInsert" label="기호"/> <!-- 기호 삽입 --> <control idMso="AutoSumMenu" label="합계" /> <!-- 자동 합계 메뉴 --> <button idMso="PivotTableSuggestion" label="피벗테이블" /> <!-- 피벗 테이블 버튼 --> </group> <group id="DataGroup" label="데이터"> <!-- '데이터' 그룹 생성 --> <control idMso="SortDialog" label="정렬" /> <!-- 정렬 대화 상자 --> <control idMso="Filter" label="필터"/> <!-- 필터 --> <control idMso="AdvancedFilterDialog" label="고급"/> <!-- 고급 필터 대화 상자 --> <control idMso="DataValidation" label="유 효 성"/> <!-- 데이터 유효성 검사 --> <control idMso="QuickCode" label="빠른채우기"/> <!-- 빠른 채우기 --> <menu id="DupMenu" label="중복찾기" size="normal" imageMso="DatasheetColumnLookup"> <!-- 중복 찾기 메뉴 --> <control idMso="ConditionalFormattingHighlightDuplicateValues" label="중복 값 찾기(조건부 서식) " screentip="중복값 찾기" /> <!-- 조건부 서식을 통한 중복 값 찾기 --> <control idMso="RemoveDuplicates" label="중복값 제거" /> <!-- 중복 값 제거 --> </menu> <button idMso="ConvertTextToTable" size="large" /> <!-- 텍스트를 표로 변환 버튼 --> <menu idMso="SelectMenuExcel" size="large" /> <!-- 선택 메뉴 --> </group> <group id="ViewGroup" label="보기"> <!-- '보기' 그룹 생성 --> <gallery idMso="ViewFreezePanesGallery" size="large" /> <!-- 틀 고정 갤러리 --> <toggleButton idMso="ViewNormalViewExcel" label="기본" /> <!-- 기본 보기 토글 버튼 --> <toggleButton idMso="ViewPageBreakPreviewView" label="나눔" /> <!-- 페이지 나누기 미리 보기 토글 버튼 --> </group> </tab> </tabs> </ribbon> <!-- 리본 사용자 정의 끝 --> </customUI> |
위의 코드를 간단히 설명하면,
1. 탭: 우공이산 (CUSTAB)
4. 그룹: 스타일 (SheetsStyle)
5. 그룹: 삽입 (InsertObjects)
6. 그룹: 데이터 (Data) 데이터 정렬, 필터링, 고급 필터 |
6. ① 저장후, ② 닫기 버튼을 누릅니다.

7. Custom_Ribbon_Sample.xlam 파일을 더블클릭하여 열면, [우공이산] 탭이 생성된 걸 볼 수 있습니다.

3 | 엑셀 추가기능 (Addin) 설치 하기 |
1. 다운로드 파일 [차단 해제] 활성화 : 첨부파일 다운받은 경우 해당됨.
2022년 3월 윈도우 업데이트 이후, 인터넷에서 다운받은 파일은 보안문제로 매크로가 차단되어 있으므로 '차단 해제'를 체크하여 매크로를 활성화 해야 합니다. ① 다운받은 파일을 마우스 우클릭 - 속성으로 이동한 후, ② 오른쪽 아래 [차단 해제]를 활성화 합니다.

2. 파일 탐색기의 주소 표시줄에 "%appdata%\Microsoft\AddIns" 따옴표안의 문자열을 복사/붙여넣기 하면 추가기능 폴더로 이동합니다. 만들었던 추가기능파일을 해당 폴더로 옮겨 주세요.

3. 엑셀에서 [파일] - [옵션] 으로 이동한 후, [추가기능] 탭으로 이동합니다. 아래에서 'Excel 추가기능'을 선택 후, [이동] 버튼을 클릭하면 추가기능을 선택할 수 있습니다.

4. [찾아보기]를 클릭한 후, 다운로드 받은 추가기능을 선택하고, [확인] 버튼을 누릅니다.

5. [확인] 버튼을 누르면, 추가기능이 목록에 추가됩니다.

※ 추가기능 제거하는 방법은 아래와 같이 제거하고자 하는 추가기능을 선택해제 한뒤, [확인] 버튼을 눌러 제거합니다.

4 | 리본 메뉴 편집 |
1. 리본 메뉴의 구성

2. XML 태그간의 관계

2. XML 기본지식
1. XML문은 대소문자를 구분합니다. 2. <ribbon startFromScratch="false"> : startFromScratch 속성은 리본 메뉴의 탭을 표시할지 여부를 결정합니다. 여기에서 false는 기존 tab이 보이게, true는 기존 tab이 안 보이게 합니다. 3. idMso는 Excel에서 사용되는 Ribbon의 ID로 Ribbon 탭에서 특정 명령을 식별하는 데 사용되는 고유 식별자입니다. 18페이지에 ‘idMso값 쉽게 알아내기’ 방법과 ‘참고 사이트’를 적어 놓았습니다. 4. imageMso는 Office의 내장 아이콘을 의미합니다. 5. id는 중복되어서는 안되며, 첫 글자는 반드시 문자여야 합니다. 6. 이미지의 크기는 보통 이미지(size=“narmal”), 큰 이미지(size=“large”)로 구분합니다. 7. <group idMso=“GroupEditingExcel” visible=“False”/> visible 속성을 이용해 ‘편집’그룹을 숨길 수도 있습니다. 8. 원하는 명령 비활성화 - enabled=“False”하면 비활성화, enabled=“True”하면 활성화 시킬 수 있습니다. 9. 컨트롤의 종류는 control, button, box, comboBox, toggleButton, splitButton, menu, gallery등이 있습니다. 우리는 control과 button 정도만 알아도 충분합니다. |
3. tab 이름
tab 이름 | 설명 |
TabHome | 홈 |
TabInsert | 삽입 |
TabPageLayoutExcel | 페이지 레이아웃 |
TabFormulas | 수식 |
TabData | 데이터 |
TabReview | 검토 |
TabView | 보기 |
TabDeveloper | 개발 도구 |
4. tab 수정
<ribbon startFromScratch="false"> <tabs> <tab id="CUSTAB" label="우공이산" insertBeforeMso="TabHome"> <!-- '우공이산'이라는 탭을 만들고 기본 '홈' 탭 앞에 위치시킴 --> </tab> </tabs> </ribbon> </customUI> ------------------------------------------------------------------------------- tab의 이름과 위치를 변경할 수 있습니다. ① [tab id]는 사용자가 임의로 지정 가능하며, 고유한 번호로 중복되면 안 됩니다. ② label 속성은 탭에 표시될 문자열입니다. ③ insertBeforeMso 속성은 탭의 위치를 지정 할 때 사용합니다. 위의 ‘tab 이름’을 참조하여 탭의 삽입 위치를 변경할 수 있습니다. • insertBeforeMso="TabHome“ • insertAfterMso="TabHome“ |
5. group 수정
<ribbon startFromScratch="false"> <tabs> <tab id="CUSTAB" label="우공이산" insertBeforeMso="TabHome"> <group id="FileGroup" label="파일"> <control idMso="FileNewDefault" label="New" /> </group> <group id="FontsGroup" label="글꼴"> <comboBox idMso="Font" label=" "/> </group> <group id="StyleGroup" label="스타일"> <control idMso="ConditionalFormattingMenu" label="조건부" /> </group> </tab> </tabs> </ribbon> </customUI> ------------------------------------------------------------------------------- 임의로 원하는 이름의 group을 생성할 수 있으며, group내 명령버튼을 추가 할 수 있습니다. ① [group id]는 고유한 번호로 다른 group 태그의 id와 중복될 수 없습니다. ② label 속성은 group에 표시될 문자열입니다. ③ group 태그내에 control, button 태그를 추가해 원하는 명령을 추가할 수 있습니다. |
6. 기본 메뉴의 group
Tab | Control Name | 설명 |
홈 (TabHome) |
GroupClipboard | 클립보드 |
GroupFont | 글꼴 | |
GroupAlignmentExcel | 맞춤 | |
GroupNumber | 표시형식 | |
GroupStyles | 스타일 | |
GroupCells | 셀 | |
GroupEditingExcel | 편집 | |
삽입 (TabInsert) |
GroupInsertTablesExcel | 표 |
GroupInsertIllustrations | 일러스트레이션 | |
GroupOfficeExtension | 앱 | |
GroupInsertChartsExcel | 차트 | |
GroupPowerMap | 보고서 | |
GroupSparklinesInsert | 스파크라인 | |
GroupSlicerInsert | 필터 | |
GroupInsertLinks | 링크 | |
GroupInsertText | 텍스트 | |
GroupInsertSymbols | 기호 | |
페이지 레이아웃 (TabPageLayoutExcel) |
GroupThemesExcel | 테마 |
GroupPageSetup | 페이지 설정 | |
GroupPageLayoutScaleToFit | 크기 조정 | |
GroupPageLayoutSheetOptions | 시트 옵션 | |
GroupArrange | 정렬 | |
수식 (TabFormulas) |
GroupFunctionLibrary | 함수 라이브러리 |
GroupNamedCells | 정의된 이름 | |
GroupFormulaAuditing | 수식 분석 | |
GroupCalculation | 계산 | |
데이터 (TabData) |
GroupGetExternalData | 외부 데이터 가져오기 |
GroupPowerQueryData | 쿼리 | |
GroupConnections | 연결 | |
GroupSortFilter | 정렬 및 필터 | |
GroupDataTools | 데이터 도구 | |
GroupForecast | 예측 | |
GroupOutline | 윤곽선 | |
검토 (TabReview) |
GroupProofing | 언어 교정 |
GroupLanguage | 언어 | |
GroupComments | 메모 | |
GroupChangesExcel | 변경 내용 | |
GroupInk | 잉크 | |
보기 (TabView) |
GroupWorkbookViews | 통합 문서 보기 |
GroupViewShowHide | 표시형식 | |
GroupZoom | 확대/축소 | |
GroupWindow | 창 | |
GroupMacros | 매크로 | |
개발도구 (TabDeveloper) |
GroupCode | 코드 |
GroupAddins | 추가 기능 | |
GroupControls | 컨트롤 | |
GroupXml | XML |
7. control 수정 또는 button 추가
<ribbon startFromScratch="false"> <tabs> <tab id="CUSTAB" label="우공이산" insertBeforeMso="TabHome"> <group id="CellsAlign" label="맞춤/셀 편집"> <control idMso="AlignCenter" label=" "/> ------- ① <button id="btn01" label=" " onAction="unMergeCell" imageMso="UnmergeCells"/> -------------------------------------- ② </group> </tab> </tabs> </ribbon> </customUI> ------------------------------------------------------------------------------- ① control • idMso는 Excel에서 사용되는 Ribbon의 ID로 Ribbon 탭에서 특정 명령을 식별하는 데 사용되는 고유 식별자입니다. 아래 참고 사이트나 “idMso값 쉽게 알아내기” 방법을 통해 원하는 도구모음을 찾아 idMso=" " 쌍따옴표 안에 넣으면 도구모음이 추가 됩니다. • label은 control 옆에 표시될 문자열입니다. ② button • id는 고유한 번호로 다른 button id와 중복될 수 없습니다. • label은 button 옆에 표시될 문자열입니다. • onAction은 버튼 클릭시 실행할 매크로명 입니다. • imageMso는 Office에 내장된 아이콘 이미지입니다. 아래 참고 사이트에서 매크로를 대표 할 만한 아이콘 이미지를 찾아 imageMso=" " 쌍따옴표 안에 넣으면, 리본 메뉴에 아이콘 이미지가 표시됩니다. ※ control과 button의 차이점 • control은 엑셀 리본에 이미 존재하는 제어항목(복사, 잘라내기, 붙여넣기등)을 사용자 리본 메뉴에 추가할 때 사용 합니다. • button은 엑셀 리본에 없는 새로운 기능을 추가하고 싶을 때 사용합니다. |
8. idMso값 쉽게 알아내기
idMso값을 알아 내는 방법중 하나는 ‘Excel 옵션’의 ‘리본 사용자 지정’ 탭을 이용하는 방법입니다. 엑셀에서 [파일] - [옵션] 으로 이동한 후, ① [리본 사용자 지정] 탭으로 이동합니다. ② [명령 선택] 리스트에서 ‘모든 탭’을 선택하고, ③ 명령에 마우스 커서를 가져다 놓으면 ④ 풍선 도움말에 영어 이름이 표시되는데, 이 이름이 idMso 값입니다.

※ idMso 참고 사이트
※ imageMso 참고 사이트
https://bert-toolkit.com/imagemso-list.html
https://codekabinett.com/download/Microsoft-Office-2016_365-imageMso-Gallery.pdf
5 | 매크로 작성 |
1. Button 추가 : 아래 XML코드는 [맞춤/셀 편집] 그룹에 imageMso를 통해 아이콘 이미지를 표시하고, 버튼 클릭시 해당 매크로가 실행되도록 하는 코드입니다.
<group id="CellsAlign" label="맞춤/셀 편집"> <button id="btn01" label="셀병합" onAction="MergeCell" imageMso="MergeCells"/> <button id="btn02" label="셀분할" onAction="unMergeCell" imageMso="UnmergeCells"/> ⁞ <button id="btn05" label="채우기" onAction="EmptyCellFill" imageMso="FillDown"/> </group> |

2. 매크로 작성
(1) Custom_Ribbon_Sample.xlam 파일을 더블클릭하여 실행 시킨후, ① [개발 도구] 탭-[코드] 그룹-② [Visual Basic]을 클릭합니다. 또는 단축키 "Alt + F11"을 누릅니다. ③ [Visual Basic 편집기] 창이 표시 됩니다.

(2) [Visual Basic 편집기] 창에서 ① [삽입] - ②[모듈]을 눌러 모듈을 삽입합니다.

(3) 코드 입력창에 아래의 코드를 붙여 넣습니다. XML코드에서 사용한 매크로 명과 동일하게 작성하여야 하며, 매크로명 옆에 “(control As IRibbonControl)”를 꼭 적어야 합니다.
Sub unMergeCell(control As IRibbonControl) '셀분할하는 프로시저로 리본 컨트롤과 연동 Dim rTable As Range, rng As Range '변수 선업 On Error Resume Next '에러 발생 시 무시하고 코드 진행 Set rTable = Selection '선택 영역을 범위 객체에 저장 rTable.HorizontalAlignment = xlCenter '선택 영역의 가운데 정렬 rTable.UnMerge '선택 영역의 병합 해제 For Each rng In rTable.Cells '선택영역의 모든 셀을 반복 실행 If IsEmpty(rng) Then rng = rng.Offset(-1).Value '셀이 비어 있으면 위쪽 셀 값으로 채움 Next rng End Sub Sub MergeCell(control As IRibbonControl) '셀병합하는 프로시저로 리본 컨트롤과 연동 Dim rX As Range '변수 선업 Dim rMerge As Range, rY As Range Dim ix As Long, i As Long Dim prng() Dim rTable As Range Application.DisplayAlerts = False '경고 메시지 표시하지 않도록 설정 On Error Resume Next '에러 발생 시 무시하고 코드 진행 Set rTarget = Selection '선택 영역을 범위 객체에 저장 rTarget.HorizontalAlignment = xlCenter '선택 영역의 가운데 정렬 설정 For Each rY In rTarget.Columns '선택영역의 모든열 반복 ix = ix + 1 '열 번호 변수에 1을 더함 If ix = 1 Then '첫 번째 열 처리 For Each rX In rY.Cells '루프를 통하여 현재 열의 각 셀 처리 If rMerge Is Nothing Then '병합할 범위가 비어있다면 Set rMerge = rX '병합할 범위 객체 초기 설정 Else If rX = rMerge.Cells(rMerge.Cells.Count) Then Set rMerge = rMerge.Resize(rMerge.Cells.Count + 1) '같은 열에 있는 연속된 셀이면 병합 범위 확장 Else rMerge.Merge '연속된 셀이 아니면 현재 셀까지 병합 후 다시 시작 Set rMerge = rX End If End If Next rX rMerge.Merge '현재 열의 병합 실행 For Each rng In rY.Cells '선택영역의 모든셀 반복 If rng.MergeCells And rng.Address = rng.MergeArea.Cells(1, 1).Address Then '병합된 셀이고, 병합된 영역의 첫 번째 셀이라면 i = i + 1 '배열 인덱스 증가 및 배열 재할당 ReDim Preserve prng(1 To i) Set prng(i) = rng.MergeArea '병합 영역 정보를 배열에 저장 End If Next rng Set rMerge = Nothing '현재 열의 병합 초기화 Else '첫 번째 열 이외의 열 처리 For i = 1 To UBound(prng) Set rTable = prng(i).Offset(, ix - 1).Resize(prng(i).Rows.Count, 1) '현재 열에서 병합 영역의 위치 계산 및 범위 객체 생성 For Each rX In rTable '루프를 통하여 계산된 범위의 각 셀 처리 If rMerge Is Nothing Then Set rMerge = rX '병합할 범위 객체 초기 설정 Else If rX = rMerge.Cells(rMerge.Cells.Count) Then Set rMerge = rMerge.Resize(rMerge.Cells.Count + 1) '같은 열에 있는 연속된 셀이면 병합 범위 확장 Else rMerge.Merge '연속된 셀이 아니면 현재 셀까지 병합 후 다시 시작 Set rMerge = rX End If End If Next rMerge.Merge '현재 열의 병합 실행 Next i End If Next rY Application.DisplayAlerts = True End Sub Sub EmptyCellFill(control As IRibbonControl) '빈 셀을 채우는 프로시저로 리본 컨트롤과 연동 Dim rng As Range '변수 선업 Dim rCol As Range Dim rTable As Range Dim rng_old On Error Resume Next '에러 발생 시 무시하고 코드 진행 Set tTable = Selection '선택 영역을 범위 객체에 저장 For Each rCol In tTable.Columns '선택영역의 모든열 반복 For Each rng In rCol.Cells '각 열에 있는 모든셀 반복 If IsEmpty(rng) Then '셀이 비어 있는지 확인 rng.Value = rng_old '셀이 비어 있으면 이전 값 복사 Else rng_old = rng.Value '비어 있지 않으면 현재 값을 이전 값으로 저장 End If Next rng Next rCol rTable.Cells(1).Select '선택 영역의 첫 번째 셀 선택 End Sub |
(4) ① [저장] 버튼을 클릭, ② [닫기] 버튼을 클릭하여 창을 닫습니다.

(5) 명령 버튼 정상동작 확인
- 셀병합 : 병합할 범위를 선택후, [셀병합] 버튼을 클릭하면, 같은 팀끼리 병합되는 작업이 실행 됩니다.

- 셀분할 : 병합된 범위를 선택후, [셀분할] 버튼을 클릭하면, 병합된 셀이 해제 되고, 빈 셀에 데이터가 있는 윗셀의 값으로 채워지는 작업 실행됩니다.

- 채우기 : 팀필드에서 범위를 선택후, [채우기] 버튼을 클릭하면, 빈 셀에 데이터가 있는 윗셀의 값으로 채워지는 작업이 실행 됩니다.

6 | 매크로 단축키 만들기 |
1. [Visual Basic 편집기] 창에서 [삽입]-[모듈]을 눌러 모듈을 삽입합니다.

2. 코드 입력창에 아래의 코드를 복사/붙여 넣습니다. 혹시 단축키로 만들고 싶은 매크로가 있다면, 아래 표시된 부분에 단축키와 매크로를 넣으세요.
Sub Auto_open() '파일이 열릴 때 실행되는 프로시저입니다. With Application .OnKey "+~", "AddRow" 'Shift + Enter키 동시 누르면, 행삽입 매크로 “AddRow” 실행 .OnKey "+{ENTER}", "AddRow" 'Shift + Enter키 동시 누르면, 행삽입 매크로 “AddRow” 실행 .OnKey "+{BS}", "DelRow" 'SHIFT + 백스페이스키 동시 누르면, 행삭제 매크로 “DelRow” 실행 End With End Sub Sub AddRow() If Application.CutCopyMode = xlCopy Then '현재 복사모드인지 확인 Application.CutCopyMode = False '복사모드라면 복사모드 해제 Selection.EntireRow.Insert '선택 영역의 전체 행 삽입 Else '복사모드가 아니라면 Selection.EntireRow.Insert '선택 영역의 전체 행 삽입 End If End Sub Sub DelRow() Dim YesNo As Integer On Error Resume Next 'VBA 코드 진행 중 에러 발생 시 무시하고 코드 진행 If Application.WorksheetFunction.CountA(Selection.EntireRow) > 0 Then '선택된 행에 데이터가 있는지 확인 YesNo = MsgBox("행에 내용이 있습니다. 그래도 지울까요", vbYesNo) '데이터가 있다면 사용자 확인 메시지 출력 If YesNo = 6 Then '사용자가 "예"를 선택하면 행 삭제 Selection.EntireRow.Delete Else '아니오"를 선택하면 매크로 종료 Exit Sub End If Else Selection.EntireRow.Delete '선택된 행에 데이터가 없으면 바로 삭제 End If End Sub |
※ Onkey 메서드
Onkey 메서드는 Application 개체에 사용하는 메서드로, 특정키에 대한 기능 정의, 새로운 기능 정의 또는 기능 해지 할때 사용합니다. Onkey 메서드 형식 ① Application.Onkey(키조합, 매크로명) |
Key | Code | Key | Code |
BACKSPACE | {BACKSPACE} or {BS} | LEFT ARROW | {LEFT} |
BREAK | {BREAK} | NUM LOCK | {NUMLOCK} |
CAPS LOCK | {CAPSLOCK} | PAGE DOWN | {PGDN} |
CLEAR | {CLEAR} | PAGE UP | {PGUP} |
DELETE or DEL | {DELETE} or {DEL} | RETURN | {RETURN} |
DOWN ARROW | {DOWN} | RIGHT ARROW | {RIGHT} |
END | {END} | SCROLL LOCK | {SCROLLLOCK} |
ENTER (숫자패드) | {ENTER} | TAB | {TAB} |
ENTER | ~ (tilde) | UP ARROW | {UP} |
ESC | { ESCAPE} or {ESC} | F1 ~ F15 | {F1} ~ {F15} |
HELP | {HELP} | Shift | + |
HOME | {HOME} | Ctrl | ^ |
INS | {INSERT} | Alt | % |
3. 예제
① Application.Onkey"+~", "AddRow" : Shift+Enter 누르면, “AddRow” 프로시저 실행
② Application.OnKey "^{p}", "" : Ctrl+P의 기능을 해지
③ Application.OnKey "^{p}" : Ctrl+P의 원래 기능으로 사용할 수 있도록 기능 복원
※ 지금까지 ① 추가기능 파일 만들기, ② Office RibbonX Editor를 통한 리본 메뉴 편집, [Visual Basic 편집기]에서 ③ 매크로 만들기, ④ 매크로 단축키 만들기까지 리본 메뉴 만드는 모든 기능을 배웠습니다. 이제 여러분이 할 일은 매일 반복되는 수많은 수작업을 어떻게 하면 자동화할 수 있는지 고민하고, 매크로로 만들어 리본 메뉴에 등록하는 일입니다.