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

엑셀 VBA 변수란?(Variable)

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

엑셀 VBA의 시작! 자주쓰는 변수 7가지 총정리 강의! - VBA 변수 알아보기

이 강의에서는 VBA 코드의 가장 기본 단위인 변수의 개념을 방정식 비유로 풀어 설명하고, 변수를 직접 지정하는 경우와 자동 할당되는 경우의 동작 차이를 예제 코드로 비교합니다. 또한 Option Explicit 선언의 역할과 실무에서 자주 사용하는 7가지 데이터 타입까지 정리하여 VBA 코딩의 토대를 다지도록 돕습니다.

엑셀 VBA 변수란?(Variable)
DOWNLOADS

실습자료를 준비했어요

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

VBA 변수란 무엇인가요?

변수는 VBA뿐만 아니라 자바(Java), 파이썬(Python), 루비(Ruby), C언어 등 다양한 프로그래밍 언어에서 공통적으로 사용되는 코딩의 기초 단위입니다.

변수의 개념을 좀 더 쉽게 이해하기 위해, 초등학교 시절에 배웠던 '방정식'의 원리를 잠시 떠올려 보겠습니다. y = x + 1 이라는 방정식을 예로 들면, 이 식은 아래와 같이 입력값과 결과값의 관계를 보여주는 도표로 표현할 수 있습니다.

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 1

변수는 명령문을 좀 더 쉽게 작성하기 위한 기본 단위입니다. 위 방정식에서 x값이 변함에 따라 y값이 결정되듯, VBA 역시 변수의 값이 바뀌면 결과값이 함께 변하는 원리로 동작하며, 위의 방정식과 동일한 구조로 표현할 수 있습니다.

이번에는 실제 사례를 살펴보겠습니다. 만약 '주민등록번호'를 바탕으로 성별을 구분하는 코드를 작성한다고 가정하면, 아래 도표를 통해 VBA의 변수와 코드의 관계를 이해할 수 있습니다.

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 3

위 도표에서 변수는 주민등록번호('911224-1293810')가 됩니다. 이 변수를 완성된 프로그래밍 코드인 '박스'에 입력하면, 박스를 거쳐 결과값으로 '1'이 반환되고 최종적으로 성별이 '남자'라는 결과를 얻게 됩니다.

성별을 판단하는 숫자는 7번째 자리 아닌가요?

주민등록번호는 외형상 '숫자'로 보입니다. 하지만 프로그래밍 세계에서는 '계산에 사용되는 숫자'만이 진정한 숫자로 구분됩니다. 계산에 사용되지 않는 숫자(예: 주민등록번호, 재고번호 등)는 숫자가 아닌 '문자'로 취급하여 코드를 작성하는 것이 원칙입니다.

따라서 우리가 다루는 주민등록번호는 숫자 계산이 아닌 '숫자로 이루어진 문자열'에 해당하며, 하이픈(-)을 포함해 8번째 자리에 위치한 '문자'를 가져와 성별을 판단하게 됩니다.

VBA에서 변수는 꼭 지정해줘야 하나요?

VBA에서 변수를 반드시 지정해야 하는지에 대한 답은 상황에 따라 다릅니다.

VBA는 초보자도 쉽게 코딩할 수 있도록 '자동'으로 변수를 할당해 주는 것을 기본 동작으로 합니다. 다만, 일부 '개체(Object)' 데이터 타입은 사용자가 반드시 변수를 직접 지정해 주어야 하며, VBA가 자동으로 할당한 변수의 데이터 타입이 부정확하거나 불필요한 메모리를 점유하는 경우도 있으므로 변수는 가급적 직접 할당하는 것을 권장합니다.

변수를 지정하지 않았을 때 데이터 타입이 어떻게 자동 할당되는지 확인하기 위해 예제 코드를 살펴보겠습니다. 아래 코드를 복사한 뒤 VBA 편집창에 붙여넣고 실행합니다.

Sub Dim_Variable()
 
Dim ThisYear As Integer
Dim MyBirthYear As Integer
Dim TodayIs As String
 
ThisYear = Format(Date, "yyyy")
MyBirthYear = 1990
TodayIs = Format(Date, "yyyy년 mm월 dd일")
 
MsgBox "올해는 " & ThisYear & "년 입니다." & vbNewLine & _
"당신은 " & MyBirthYear & "년에 태어났습니다." & vbNewLine & _
"당신은 올해 만 " & ThisYear - MyBirthYear & "세 입니다." & vbNewLine & _
"오늘은 " & TodayIs & " 입니다." & vbNewLine & vbNewLine & _
"ThisYear 데이터타입: " & VarType(ThisYear) & vbNewLine & _
"MyBirthYear 데이터타입: " & VarType(MyBirthYear) & vbNewLine & _
"TodayIs 데이터타입: " & VarType(TodayIs)
 
End Sub

첫 번째 명령문 'Dim_Variable'에서는 각 변수를 Integer와 String으로 직접 지정하였습니다. 따라서 첫 번째 명령문을 실행하면 ThisYear(년도)는 정수(2)로, TodayIs(오늘 날짜)는 텍스트(8)로 설정되었다는 메시지박스가 출력됩니다. (2 = integer, 8 = string)

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 6

이번에는 아래 두 번째 명령문을 복사하여 실행해 보겠습니다.

Sub No_Dim_Variable()
 
ThisYear = Format(Date, "yyyy")
MyBirthYear = 1990
TodayIs = Date
 
MsgBox "올해는 " & ThisYear & "년 입니다." & vbNewLine & _
"당신은 " & MyBirthYear & "년에 태어났습니다." & vbNewLine & _
"당신은 올해 만 " & ThisYear - MyBirthYear & "세 입니다." & vbNewLine & _
"오늘은 " & TodayIs & " 입니다." & vbNewLine & vbNewLine & _
"ThisYear 데이터타입: " & VarType(ThisYear) & vbNewLine & _
"MyBirthYear 데이터타입: " & VarType(MyBirthYear) & vbNewLine & _
"TodayIs 데이터타입: " & VarType(TodayIs)
 
End Sub

두 번째 명령문에서는 각 변수를 별도로 지정하지 않은 채 코드를 실행하였습니다. 그 결과 ThisYear(년도)는 텍스트(8)로, TodayIs(오늘 날짜)는 날짜형식(7)으로 데이터 타입이 자동 할당된 것을 확인할 수 있습니다. (2 = integer, 8 = string, 7 = date)

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 7

두 코드의 비교에서 확인할 수 있듯이, 변수를 별도로 선언하지 않아도 VBA는 각 변수의 데이터 타입을 자동으로 할당해 줍니다. 다만 더욱 정확한 코딩을 위해서는 변수를 직접 할당하여 사용하는 것이 좋습니다.

VBA에서 자체적으로 처리해주는데도 왜 변수를 할당해서 사용해야 하나요?

변수를 올바르게 할당하지 않은 채 코딩을 진행하면, 이후 하나의 프로젝트 안에서 여러 명령문을 동시에 관리할 때 큰 어려움을 겪을 수 있습니다. 또한 변수를 명시적으로 정의해 두면 코드 작성 시간이 크게 단축되고, 오류와 에러 발생 확률 또한 현저히 줄어듭니다.

VBA 변수 지정을 생활화하고자 한다면 = 'Option Explicit' 선언

사용되는 모든 변수를 'Dim' 선언으로 직접 지정하도록 강제하고 싶다면, 'Option Explicit' 문을 사용할 수 있습니다. (단, VBA 입문자라면 Option Explicit 문 없이 먼저 충분히 연습한 뒤, 어느 정도 익숙해진 시점에 Option Explicit 문 사용을 습관화하는 것이 좋습니다.)

Option Explicit 문을 사용하는 방법은 간단합니다. 모듈의 첫 부분에 Option Explicit을 적어 두면, 해당 모듈에서 사용된 변수 중 할당되지 않은 변수가 있을 경우 아래 그림과 같이 오류 메시지가 출력됩니다.

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 10

VBA 변수, 왜 사용하나요?

변수를 사용하는 이유는 크게 세 가지로 정리할 수 있습니다.

  1. 작성한 매크로를 더욱 효율적으로 구동할 수 있습니다.
    변수를 지정하면 코드가 실행됨과 동시에 컴퓨터의 메모리가 미리 할당되며, 이는 처리 속도가 더욱 빨라지도록 도와줍니다.
  2. 코드 작성 시 오타와 에러 발생 확률을 크게 줄여줍니다.
    변수를 지정하면 코드를 작성하는 동안 각 변수에 대한 '자동 채우기' 기능이 제공되므로 오타가 발생할 가능성이 크게 줄어듭니다.
    또한 개체 변수의 경우 데이터 타입마다 사용되는 속성(property)이 다양하므로, 변수 지정을 통해 각 속성을 더욱 쉽고 빠르게 확인할 수 있습니다.
  3. 코드를 더욱 쉽고, 빠르고, 정확하게 작성할 수 있으며 이후 편집도 수월해집니다.
    변수를 체계적으로 할당해 두면, 오랜 시간이 지난 뒤에 코드를 다시 열어 보더라도 코드의 흐름을 손쉽게 파악할 수 있어 편집 작업이 훨씬 빠르고 정확하게 이루어집니다.

VBA에서 자주 사용하는 변수 7가지

엑셀 VBA 코딩에서 사용하는 변수는 크게 네 가지 종류로 나눌 수 있으며, 세부 내용은 아래 표와 같습니다.

종류 데이터형식
논리값 Boolean
숫자(정수) Integer, Long, Longptr, LongLong
숫자(실수) Double, Currency (화폐단위)
문자 String
개체 Object

이 가운데 실무에서 가장 많이 사용하는 대표적인 데이터 타입 7가지를 아래 표로 정리해 드립니다. 그중 여섯 가지 데이터 형식(Boolean, Long, Integer, String, Variant, Double)은 반드시 암기해 두시기 바랍니다. VBA에서 사용하는 모든 데이터 타입을 확인하려면 아래 관련 링크를 참고하세요.

관련링크 : MS 홈페이지 VBA 변수 데이터 타입 설명 (영문)

종류 데이터타입 메모리용량 범위
숫자/문자/배열/가변데이터 Variant 16 or 22 Byte + @ 최대 Double 범위까지의 숫자값
문자 String 16 Byte + @ 0부터 20억 개 문자
숫자(실수, 소수점 포함) Double 8 Byte 1.79769313486231E308 부터 4.94065645841247E-324 사이 값
개체(워크시트, 범위, 그림 등) Object 4 Byte
숫자 (정수) Long 4 Byte -2,147,483,648 부터 2,147,486,647 사이 값
숫자 (정수) Integer 2 Byte -32,768 부터 32,767 사이 값
예/아니오 (1,0) Boolean 2 Byte True 또는 False
댓글 18
5 (18개 평가)
0ugi
0ugi 2020.05.22 15:07
잘배웠습니다.
잭이
잭이 2020.06.02 17:15
Sub() = Function() 인데 Dim 은 뭘까요? 코드인데 ';'로 끝나지 않는다....
sws****
sws**** 2020.06.12 10:26
많이 배울 수 있어 감사합니다.
굴레악
굴레악 2020.07.11 12:30
조금 감이 잡혀가는 듯합니다.
외우고 반복 학습해야겠네요.
z****
z**** 2020.07.24 09:38
명료한 강의 감사합니다
family****
family**** 2020.10.24 13:25
유익한정보감사합니다
dozi****
dozi**** 2020.11.16 20:49
잘배우고 갑니다
옛꼬망
옛꼬망 2020.12.01 00:45
강의 수강완료!! 20.12.01
learn_xlsx
learn_xlsx 2021.04.20 08:39
강의 감사합니다.
일선일창
일선일창 2021.05.28 08:24
오빠두 덕분에 VBA의 세계에 첫발을 들여놓았습니다. 너무 재미있고 쉽게 가르쳐 주시네요. 감사합니다.