- 최초 작성일: 2001-09-21
- 최종 수정일: 2026-09-30
- 조회수: 7 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 메모에 대하여
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Exceller 2세(일명 엑셀리아)의 몸 상태가 좋지 않아 병원에 다녀왔습니다. 태어난 이후 지금까지 큰 병 치례를 한번도 하지 않아 감사하게 생각하고 있었는데 덜렁 입원까지 하고 보니 무엇보다도 건강이 중요한 것임을 새삼스레 생각해 보게 됩니다. 斷腸이라는 말의 의미를 조금이나마 이해할 수 있게 되었습니다. 그런데 병원에는 웬 아픈 사람이 그렇게도 많은 것인지…
우리는 무병장수를 염원합니다. 그런데 Exceller가 평소 존경하는 어느 직장상사의 책상에 이런 글귀가 붙어있는 것을 보았습니다.
一病長壽!
관심이 있는 분야는 도적놈 모양(표현이 좀 그렇네… 탐정이 좋겠네요 ^^) 유심히 관찰하는 Exceller가 물어보았습니다. 무병장수도 아니고 일병장수가 도대체 무슨 뜻이냐고… 그랬더니 그 분의 말씀이,
"사람이 너무 건강하면 자신의 건강을 과신하게 되어 도리어 건강을 해칠
소지가 있으나 한 가지 (잔)병을 가지고 있으면 항상 조심하게 된다."
수긍이 가시지요? 그러므로… 여러분들도 病 한가지씩은 가지세요! 라고 하고 보니 영 이상하지요? ^^ 하여튼 평소에 건강관리 잘 하시기 바랍니다.
메모에 대하여
핵심 요약: 메모(Comment) 오브젝트
Comment 오브젝트는 Range의 하위 오브젝트이며, AddComment와 Text로 메모를 만들고 Shape 속성으로 서식을 바꾸며 Comments 컬렉션으로 전체 메모를 다룹니다.
- 1단계: 도움말에서 Comment 오브젝트의 속성과 메서드를 확인합니다.
- 2단계: AddComment와 Text로 메모를 넣고 글꼴과 배경색을 지정합니다.
- 3단계: ActiveSheet.Comments를 순환해 모든 메모를 표시합니다.
Step 1: 이번 시간의 질문
엑셀 사용시 메모를 자주 이용합니다.
그런데 메모에 내용을 기입할 때 글꼴 서식이 고정되어 있어상당히 불만입니다.
메모 글꼴 서식을 매번 변경하는 번거로움을 해결할 기본값 변경은 어떻게
하는지요?... (하략)…
Step 2: Comment 오브젝트 살펴보기
메모와 관련된 것은 오브젝트들 중에서 Comment Object가 담당합니다. Comment 오브젝트가 어떤 것인지에 대해 먼저 On-line 도움말을 살펴보도록 하지요. 아래의 그림은 도움말에서 comment라는 단어로 검색을 한 결과입니다.
여러분들도 도움말에서 Comment 오브젝트를 찾으신 다음에 속성과 메서드 등을 한번씩 살펴보시면 좋을 것입니다. 일단 메모가 들어있지 않은 임의의 셀을 하나 선택하신 다음 아래의 버튼을 눌러 보세요.
Step 3: 메모 추가하고 서식 바꾸기 (AddComment)
Sub AddComment()
Dim Msg As String
If TypeName(Selection) <> "Range" Then
MsgBox "Range 오브젝트를 선택하지 않으셨습니다. 범위를 다시 확인하세요!", , "범위 선택 오류//By Exceller"
Exit Sub
End If
'''위의 그림에서 보시는 바와 같이, Comment 오브젝트는 Range 오브젝트의 졸개 오브젝트
'''입니다. 따라서 Range 오브젝트가 선택되지 않았을 경우에는 에러 메시지를 표시하고
'''프로시저를 종료합니다.
Msg = InputBox("메모내용을 입력하세요: ", "내용 입력//By Exceller")
If Msg = "" Then
MsgBox "아무 것도 입력하지 않았으므로 종료합니다...", , "입력 종료//By Exceller"
Exit Sub
'''메모 내용을 입력하지 않았을 경우, 안내 메시지를 뿌려주고 프로시저를 빠져나갑니다.
End If
With ActiveCell
If Not .Comment Is Nothing Then .Comment.Delete
.AddComment
'''AddComment는 이름에서도 알 수 있듯이 지정한 범위(셀)에 메모를 추가하는 메서드입니다.
.Comment.Visible = True
.Comment.Text Text:=Msg
'''Visible 속성은 메모가 보이도록 할 것인지 숨길 것인지를 지정하는 프로퍼티입니다.
'''당연히 Visible 속성이 True이면 화면상에 메모의 내용을 표시합니다.
'''Text는 메모에 들어가는 텍스트를 지정해 주는 메서드입니다.
'''그런데요… 만약 Text가 메모의 텍스트 내용을 지정해 주는 것이라면 메서드(방법)가
'''가 아니고 프로퍼티(속성)이라고 불러야 하지 않나요?
'''혹시 이런 의문을 가지는 분 없으십니까?
'''만약 그런 분이 있다면 그 분은 아주 문제의식이 투철하고 지금까지 공부를 제대로
'''해 오신 분입니다.
'''프로퍼티는 오브젝트가 가진 특징이나 성질머리를 의미하고,
'''메서드는 오브젝트에 대한 구체적인 동작 명령을 의미한다고 할 때
'''사실 이 경우에 Text는 프로퍼티냐 메서드냐를 구분하기가 모호합니다.
'''컴퓨터가 아닌 현실 세계에서도 모든 것이 명확하게 이분법으로 구분되는 것은 아니지요?
'''불확정성의 원리라는 아주 유명한 물리학 법칙이 있습니다.
'''독일의 물리학자인 하이젠베르크가 주창한 것으로, 움직이는 물체의 속도와 위치를
'''동시에 정확하게 측정하는 것은 불가능하다는 것입니다.
'''당연한 얘기지요. 속도라는 것은 어느 한 시점에서 측정되는 것이 아니라 일정 구간동안에
'''측정되는, 즉 Stock 개념이 아니라 Flow 개념인데 비해, 위치라는 것은 그 반대되는
'''개념이므로 어느 하나를 정확하게 측정하기 위해서는 다른 하나는 상대적으로 부정확해
'''지는 것입니다.
'''위의 경우에 있어 Text도 이와 비슷하다고 할 수 있습니다(아무리 생각해도 Exceller는
'''설명을 너무 잘 한다고 생각합니다! ^^;).
End With
With ActiveCell.Comment.Shape
.TextFrame.Characters.Font.Size = 8
.TextFrame.Characters.Font.Name = "바탕체"
.TextFrame.AutoSize = True
.Fill.ForeColor.SchemeColor = 27
'''Comment 오브젝트에 대한 접근이 끝났으므로 접근한 오브젝트의 폰트와 배경색 속성을
'''바꾸어 줍니다.
End With
ActiveCell.Comment.Visible = False
'''메모를 화면 상에서 다시 숨깁니다.
End Sub
Step 4: 모든 메모 한꺼번에 보기 (DisplayAllComments)
이번에는 메모와 관련된 또다른 재미있는 것을 하나 보도록 합니다. 현재 워크시트 곳곳에 Exceller가 미리 메모를 삽입해 두었습니다. 아래의 버튼을 누르면 메모가 들어있는 셀의 주소와 그 내용이 한꺼번에 나타납니다.
재미있지요?
Sub DisplayAllComments()
Dim cmtComment As Comment
Dim strTemp As String
For Each cmtComment In ActiveSheet.Comments
strTemp = strTemp & cmtComment.Parent.Address & ": " & vbTab & cmtComment.Text & vbCr
Next cmtComment
MsgBox strTemp, , "메모내용 모두 보기//By Exceller"
End Sub
코드는… 달랑 여섯 줄 밖에 안됩니다. 그래서 해설은 생략합니다. ActiveSheet.Comments 컬렉션을 For Each로 돌면서 셀 주소(Parent.Address)와 메모 내용(Text)을 누적하는 부분만 이해하시면 됩니다.
마무리
오늘은 여기까지…
정리 — 메모 다루기 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 메모 추가 | .AddComment | 셀에 메모 추가 |
| 내용 지정 | .Comment.Text Text:=Msg | 메모 텍스트 입력 |
| 표시 여부 | .Comment.Visible = True/False | 메모 표시·숨김 |
| 서식 변경 | .Comment.Shape.TextFrame / .Fill | 글꼴·배경색 지정 |
| 전체 순환 | For Each … In ActiveSheet.Comments | 모든 메모 조회 |
자주 묻는 질문 (FAQ)
Q1. 메모의 글꼴을 VBA로 바꿀 수 있나요?
Comment.Shape의 TextFrame.Characters.Font 속성으로 글꼴 이름과 크기를 지정할 수 있습니다.
Q2. 시트의 모든 메모를 한꺼번에 조회하려면 어떻게 하나요?
ActiveSheet.Comments 컬렉션을 For Each로 순환하며 Parent.Address와 Text를 읽습니다.
Q3. Comment 오브젝트는 어디에 속하나요?
Range 오브젝트의 하위 오브젝트이므로 셀 범위를 통해 접근합니다.
마치며
Comment 오브젝트와 Comments 컬렉션을 알면 메모의 추가, 서식 변경, 전체 조회를 코드로 쉽게 처리할 수 있습니다.