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

엑셀 VBA 개체란?(Object)

오빠두엑셀 by 오빠두엑셀
  • 학습시간 17분
  • 난이도 고급
  • 작성일 2018.06.12

VBA 시작 전 반드시 알고 넘어가야 할 필수지식! - VBA 개체 알아보기

이 강의에서는 엑셀 VBA의 개체(Object) 변수가 일반 데이터 타입과 어떻게 다른지, 그리고 개체에 값을 할당할 때 왜 반드시 Set 키워드를 사용해야 하는지 단계별로 살펴봅니다. Dim의 메모리 예약 동작부터 클래스 모듈을 활용해 사용자 정의 개체를 만드는 방법, Set 누락 시 발생하는 런타임 91 에러까지 함께 정리합니다.

엑셀 VBA 개체란?(Object)
DOWNLOADS

실습자료를 준비했어요

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

1. 개체변수(Object)를 지정할 때 Dim / Set을 사용하는 이유

개체(Object)를 VBA 변수로 지정할 때에는 반드시 Set 키워드를 함께 사용해야 합니다. 그 이유를 이해하려면 먼저 Dim (Declare In Memory)이 어떤 동작을 수행하는지 정확히 알아야 합니다.

1-A. Dim (Declare In Memory) : 메모리를 예약

VBA에서 Dim은 변수를 선언하기 위해 사용하는 키워드입니다. 변수를 선언한다는 것은 프로그래머 입장에서 코드 작성을 편리하게 만들어 주는 동시에, 컴퓨터 입장에서는 코드 실행에 필요한 메모리 영역을 미리 할당하여 실행 속도를 최적화하는 작업이기도 합니다.

즉, Dim으로 변수를 선언하면 VBA는 컴퓨터에게 "이 코드를 실행하려면 이만큼의 메모리가 필요하니 미리 예약해 두자"라는 명령을 전달합니다.

엑셀 VBA 개체 Object 변수 강의 2

1-B. Set: 개체변수를 할당

Dim으로 변수를 선언한 뒤, 일반 데이터 타입(숫자·문자·논리값)은 Set 없이 바로 값을 대입할 수 있지만, 개체(Object) 데이터 타입은 반드시 Set 키워드를 사용해 데이터를 할당해야 합니다.

엑셀 VBA 개체 Object 변수 강의 3

1-C. 왜 개체(Object) 변수 안에 데이터를 할당할 때는 Set을 사용하나요?

일반 데이터 타입은 Set 없이도 변수에 곧바로 값을 대입할 수 있습니다. 그 이유는 무엇일까요?

사실 일반 데이터 타입도 원칙적으로는 값을 할당할 때 앞에 'Let' 키워드를 입력해야 하지만, VBA는 사용자의 편의를 위해 Let을 기본값으로 처리하여 사용자가 별도의 키워드 없이 바로 값을 대입할 수 있도록 설계되어 있습니다.

엑셀 VBA 개체 Object 변수 강의 4

2. VBA 일반 데이터타입과 개체 데이터타입의 차이점

두 데이터 타입의 차이는 다음 한 줄로 정리할 수 있습니다.

일반 데이터타입의 사용 목적 ⇨ 데이터의 입력 / 출력
개체 데이터타입의 사용 목적 ⇨ 데이터의 입력 / 출력을 위한 프로시저(명령문) 동작

일반 데이터 타입과 개체 데이터 타입의 보다 자세한 차이점은 영상강의에서 단계별로 설명합니다.

2-A. 일반 데이터타입의 입/출력 확인
Sub Test1()
 
Dim myName as String
Dim myAge as Integer
 
myName = "오빠두"
myAge = 20
 
Msgbox myName
Msgbox myAge
 
End Sub
2-B. 개체 데이터타입의 입/출력 확인
Sub test2()
 
Dim myRange As Range
 
Set myRange = Sheet1.Range("A1")
 
myRange.Value = "오빠두"
 
MsgBox myRange.Address
Msgbox myRange.ColumnWidth
 
myRange.ColumnWidth = 30
 
myRange.Interior.Color = vbYellow
 
End Sub

3. VBA에서 개체변수(Object 변수)는 왜 사용하는가?

개체변수가 왜 필요한지 이해하기 위해 자동차에 비유한 예시를 살펴보겠습니다.

VBA 변수의 보다 기본적인 개념이 궁금하다면 엑셀 VBA - 자주 쓰는 변수 7가지 총정리 강의를 먼저 참고해 주세요.

변수 ⇨ 자동차
데이터 ⇨ 자동차에 탑승하는 사람
데이터타입 ⇨ 자동차의 종류 (차의 크기, 차의 종류, 차의 옵션 등)
3-A. 일반 데이터타입 설정의 예시 (자동차의 크기를 정할 때)

자동차의 종류 가운데 '자동차의 크기'를 지정해 보겠습니다. 자동차의 크기는 일반적으로 다음과 같이 사이즈가 정해져 있습니다.

자동차의 크기 = "소형차" 또는 "중형차" 또는 "준중형차" 또는 "대형차"
3-B. 개체 데이터타입 설정의 예시 (바퀴의 종류를 정할 때)

이번에는 자동차의 옵션 중 하나인 바퀴의 종류를 지정해 보겠습니다. 바퀴는 타이어의 종류, 금속 재질, 색상 등 다양한 속성으로 구성되어 있습니다.
따라서 바퀴를 지정할 때에는 여러 가지 속성을 조합해 종류를 정의해야 합니다.

Set 바퀴의종류 As 자동차바퀴
바퀴의종류.타이어종류 = "레이싱용"
바퀴의종류.금속의재질 = "합금"
바퀴의종류.색상 = "은색"

이처럼 바퀴는 여러 속성을 조합해 원하는 형태를 정의해야 합니다.

타이어 하나를 교체하는 작업만 보더라도 공기를 빼고 고무를 분리하는 등 여러 단계를 거치게 됩니다. 그러나 사용자 입장에서 중요한 것은 세부 작업 공정이 아니라, 어떤 종류의 타이어를 선택할지 결정하는 일입니다.

따라서 개체변수를 사용하면 여러 속성값이 필요한 대상을 마치 블록을 조립하듯 다룰 수 있어, 코드를 한층 쉽고 체계적으로 작성할 수 있습니다.

엑셀 VBA 개체 Object 변수 강의 8

3-C. 개체 변수를 이해하기 위한 클래스모듈 설정해보기

클래스 모듈은 사용자가 VBA 안에 직접 Object(개체)를 정의할 수 있도록 지원하는 모듈입니다.

아래의 코드를 클래스 모듈에 입력하고 모듈 이름을 '자동차'로 변경하면, 해당 워크북 안에서 '자동차'라는 개체변수를 자유롭게 사용할 수 있습니다.

'## 클래스모듈 안에 입력하세요.
'## 클래스모듈 이름은 '자동차'로 변경해주세요.
 
Enum 엔진
	Cc1000 = 1
	Cc2000 = 2
	Cc3000 = 3
End Enum
 
Public 엔진종류 As 엔진
Public 선팅 As Boolean

엑셀 VBA 개체 Object 변수 강의 10

'##일반 모듈안에 입력하세요.
'##클래스모듈안에 속성을 설정하였으므로, 새자동차 입력후 .(점)을 입력하면편집창에서 해당하는 속성값을 자동으로 보여줍니다.
 
Sub Test3()
 
Dim 새자동차 AS 자동차
 
새자동차.엔진종류 = cc2000
새자동차.선팅 = True
 
End Sub

엑셀 VBA 개체 Object 변수 강의 5

4. VBA에서 Set 없이 개체(Object) 변수에 데이터를 할당할 경우?

VBA에서 Set 키워드 없이 개체(Object) 변수에 데이터를 할당하면 'Runtime 91 (런타임 91) 에러'가 발생합니다.

엑셀 VBA 개체 Object 변수 강의 7

Sub Test4()
 
Dim WB As Workbook
WB = ThisWorkbook  '## Set을 WB 앞에 입력하세요.
MsgBox WB.Name
 
End Sub
댓글 15
4.8 (11개 평가)
ᅵ그은우
ᅵ그은우 2019.12.24 03:36
강의 감사히 너무 잘 듣고 있습니다.
강의중에 모듈과 클래스의 차이점을 설명해 주신다고 하셨는데 그런 내용이 안보여서 혹시 설명을 하신 강의가 있는지 알고 싶습니다.
오빠두엑셀
오빠두엑셀 2019.12.24 03:36
안녕하세요? 오빠두엑셀이에요 ^_^*
어흑 ㅠ-ㅠ... 이것저것 준비할게 많다보니.. 아직 강의를 준비하지 못했습니다. 양해부탁드려요 ㅠ_ㅠ
간략히 설명 드리자면, (모든 상황에 해당되는건 아닙니당!)
모듈 : 명령문, 함수를 포함하고 실행합니다.
클래스모듈 : 개체를 포함하고 실행합니다.
로만 이해하셔도 99% 상황에서 적용하실 수 있습니다 ^_^*
daeha76
daeha76 2020.06.12 13:37
최고네요, 이래저래 헷갈리던 개념이 90%정도까지 잡혔습니다.
두세번 더 읽고 갈께요
감사합니다.
family****
family**** 2020.10.24 13:26
유익한정보감사합니다
김나은
김나은 2020.11.02 14:41
가르쳐주신대로 입력하는데 [컴파일 오류, 구문오류]라고 떠서 실행이 안돼요. 왜그런지 알려주실 수 있을까요?ㅠㅠ 제가 어떤 설정을 잘못 했을까요?
Sub Test1() 부분은 노란색으로 표시되고
myName = “오빠두” 부분은 빨간색으로 표시가 됐어요
오빠두엑셀
오빠두엑셀 작성자 2020.11.02 17:21
안녕하세요?
죄송합니다.ㅠㅠ 홈페이지 명령문에 큰따옴표(")가 VBA에서는 인식하지 못하는 큰따옴표로 사용되어있네요.
큰따옴표를 지운 뒤 다시 작성해보시겠어요?
감사합니다.
윤민호
윤민호 2021.09.26 10:52
최근 엑셀의 신세계를 맛보고 있습니다.
공부가 재미 있어 지네요. 화이팅입니다.
ric****
ric**** 2021.12.28 12:00
최근 vba 공부하고 있습니다.
좋은 영상 감사합니다.
119구조대
119구조대 2022.03.17 09:48
궁금하고 이해가 되지 않았던 부분인데 정말 강의 잘들었습니다.
이번에 엑셀 책은 구매했는데 vba 관련 책은 출간 예정 없으신가요?
오빠두엑셀
오빠두엑셀 작성자 2022.03.21 20:47
안녕하세요.
VBA 커리큘럼도 추후 교재와 함께 제작할 예정입니다. 빠르면 내년 중순이 될 것 같습니다. 자세한 일정은 정해지는대로 홈페이지와 유튜브 커뮤니티로 안내해드리겠습니다.
어진지부
어진지부 2022.07.31 16:00
안녕하세요.
실습파일을 내려 받을 수 없는데요. 어떻게 해야 하나요?
몽해
몽해 2022.08.06 19:31
잘 보았습니다
감사합니다.
nori
nori 2022.12.16 09:34
어렵긴 하지만 도움이 되었습니다!! 강의 이것저것 보면서 연습해야될것같습니다 :_)