- 최초 작성일: 2025-01-25
- 최종 수정일: 2026-09-27
- 조회수: 74 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VBA 파워 코딩 257회 - 메모 투명도 조절
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
셀에 특이 사항을 기록할 필요가 있을 때 유용하게 쓸 수 있는 것이 '메모' 기능입니다. 포스트잇과 비슷하죠.
하지만 메모가 많아지면 불편합니다. 편하자고 달아둔 메모가 오히려 애물단지가 될 지경입니다.
이런 경우에는 메모의 크기를 조절하거나 위치를 이리저리 옮기는 것으로 대처할 수 있습니다만, 그다지 마음에 드는 해결책은 아닙니다.
해서 오늘은 다른 방식으로 해결해 보겠습니다.
메모가 셀 내용을 가리는 경우 대처법
핵심 요약: 메모가 가리는 셀 내용을 투명도로 해결하기
메모 서식의 [투명도]를 높이면 메모 뒤쪽 셀 내용이 보입니다. 메모가 많다면 VBA로 Shape.Fill.Transparency 값을 한꺼번에 바꿀 수 있습니다.
- 메모가 적을 때: 메모 우클릭 - [메모 서식] - [색 및 선] - [투명도]
- 메모가 많을 때: Comments 컬렉션을 For Each로 순회하며 투명도 일괄 변경
- 모든 시트: Worksheets를 도는 For Each를 한 번 더 중첩
- 투명도 범위: 대화상자 0~100%, VBA 0~1 (클수록 더 투명)
메모가 몇 개 안 되는 경우
(1) 서식을 변경할 메모를 마우스 오른쪽 버튼으로 클릭하고 [메모 서식] 메뉴를 선택합니다.
(2) [메모 서식] 대화상자에서 [색 및 선] 탭을 선택하고 [투명도] 값을 조절합니다. 투명도는 0 - 100% 사이 값을 지정할 수 있으며, 값이 클수록 더 투명해집니다. 100%면 완전히 투명해지죠. 여기서는 50%로 설정하였습니다.
(3) [확인] 버튼을 클릭합니다. 메모 뒤쪽에 있는 셀의 내용이 함께 보입니다.
모든 메모 한꺼번에 건드리기
(1) <Alt> + <F11> 키를 눌러 Visual Basic Editor를 표시합니다.
(2) [삽입] - [모듈] 메뉴를 클릭하여 Module 시트를 삽입합니다. 아래 코드를 붙여 넣고 실행시킵니다.
Sub ChangeMemoTransparency()
Dim sngTP As Single ' 투명도 값을 저장할 변수
Dim oMemo As Comment ' 메모(Comment)에 접근할 개체 변수
' 메모 개체가 없는 경우에 대한 대처
If ActiveSheet.Comments.Count = 0 Then
MsgBox "메모가 없어서 작업을 진행할 수 없습니다."
Exit Sub
End If
For Each oMemo In ActiveSheet.Comments ' For Each 문을 통해 메모에 접근
sngTP = oMemo.Shape.Fill.Transparency ' 메모의 현재 투명도 값을 변수에 저장
oMemo.Shape.Fill.Transparency = 0.5 ' 메모의 투명도를 50%로 변경
Next
End Sub
참고: 원문 코드 수정
원문 코드는 메모가 없을 때의 대처를 If Err.Number <> 0으로 검사했는데, 이 시점에는 오류가 발생한 적이 없어서 Err.Number가 항상 0이므로 안내 메시지가 뜨지 않습니다. 메모 개수를 직접 확인하는 ActiveSheet.Comments.Count = 0 조건으로 바꾸었습니다. 프로시저 이름의 오탈자(Tranparency)도 함께 바로잡았습니다.
참고: 최신 Microsoft 365에서는 예전의 '메모'가 '노트'라는 이름으로 바뀌었고, '메모'는 대화형(스레드) 댓글을 가리킵니다. 위 코드의 Comments 컬렉션은 예전 방식의 메모(현재의 '노트')를 대상으로 동작합니다.
통합 문서의 모든 워크시트에 있는 메모에 대해 처리하려면 For Each ~ In Next 문을 한 번 더 중첩하면 됩니다.
Dim shtX As Worksheet
For Each shtX In ActiveWorkbook.Worksheets
For Each oMemo In shtX.Comments
sngTP = oMemo.Shape.Fill.Transparency
oMemo.Shape.Fill.Transparency = 0.5
Next
Next
메모의 속성이나 메서드가 생각나지 않는다면 [매크로 기록기]를 켜놓고 필요한 작업을 한 다음, 기록된 코드를 보면 쉽게 파악할 수 있습니다.
참고: 이미지에 대하여
이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 위 이미지는 본문 설명을 바탕으로 당시 화면 구성을 재구성한 예시 이미지이며, 실제 엑셀 화면과 세부 디자인(버전별 UI)은 다를 수 있습니다.
정리 — 메모가 셀을 가릴 때의 대처법
| 상황 | 방법 |
|---|---|
| 메모가 몇 개 안 될 때 | [메모 서식] - [색 및 선] 탭 - [투명도] 지정 |
| 현재 시트의 모든 메모 | For Each로 Comments를 순회하며 Shape.Fill.Transparency 변경 |
| 통합 문서의 모든 메모 | Worksheets를 도는 For Each를 한 번 더 중첩 |
| 투명도 값의 범위 | 대화상자 0~100%, VBA 0~1 (클수록 더 투명) |
자주 묻는 질문 (FAQ)
Q1. 메모가 셀 내용을 가릴 때 어떻게 하면 되나요?
메모 서식의 [색 및 선] 탭에서 투명도를 높이면 메모 뒤쪽 셀 내용이 함께 보입니다. 메모가 많다면 VBA로 Shape.Fill.Transparency 값을 한꺼번에 바꿀 수 있습니다.
Q2. 투명도는 어떤 값을 지정할 수 있나요?
[메모 서식] 대화상자에서는 0~100%, VBA에서는 0~1 사이 값을 지정합니다. 값이 클수록 더 투명해지며 100%(VBA에서는 1)면 완전히 투명해집니다.
Q3. 통합 문서의 모든 시트에 있는 메모를 한꺼번에 바꾸려면요?
Worksheets 컬렉션을 도는 For Each 문 안에 각 시트의 Comments 컬렉션을 도는 For Each 문을 중첩하면 됩니다.
마치며
메모가 셀을 가릴 때는 투명도만 높여도 훨씬 편해집니다. 개수가 많다면 VBA 몇 줄이면 한 번에 끝나니 꼭 해 보세요!
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 정문 왼쪽에 있는 'VBA 강좌 - VBA 입문강좌'를 읽어보시면 이해가 빠릅니다.