엑셀 VBA 변수 알아보기 :: 자주 사용하는 7가지 변수 총정리

VBA 코딩 작성을 위해 반드시 이해해야 할 과목, '변수'란 무엇인지와 자주 사용하는 7가지 변수를 하나씩 살펴봅니다.

홈페이지 » 엑셀 VBA 변수 알아보기 :: 자주 사용하는 7가지 변수 총정리

엑셀 VBA 기초, 변수란 무엇인가요? - 자주 사용하는 7가지 변수 총정리

VBA 변수 총정리 목차 바로가기
영상강의


예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [VBA기초강의] 3강 VBA 변수 알아보기 – 예제파일
    예제파일
  • [VBA기초강의] 3강 VBA 변수 알아보기
    PPT자료

VBA 변수란 무엇인가요?

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

변수를 좀 더 쉽게 이해하기 위해, 우리가 초등학교 때 배웠던 '방정식'의 원리를 잠시 되짚어 보겠습니다. y = x + 1 이라는 방정식이 있다고 가정하겠습니다. 그럼 해당 방정식은 아래와 같은 도표로 표현이 가능하다고 수업시간에 배웠는데요.

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 1
y=x+1 의 변수입력과 결과값 출력을 표현한 그림

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

하나의 예를 들어보겠습니다. 만약 '주민등록번호'를 바탕으로 성별을 구분하는 코드를 작성한다고 할 경우, 아래와 같은 도표로 VBA의 변수와 코드의 관계를 이해 할 수 있습니다.

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 3
방정식과 마찬가지로 VBA에서 이용되는 변수의 흐름도 이와같은 그림으로 표현될 수 있다.

위의 도표에서, 변수는 주민등록번호('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
각 변수의 데이터타입을 Integer와 Date 타입으로 할당 후 코드를 실행하면 지정한 데이터타입대로 변수를 사용 할 수 있습니다.

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

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에서 자체적으로 처리해주는데도 왜 변수를 할당해서 사용해야 하나요?

변수를 올바르게 할당하지 않고 코딩을 하게 되면, 이후 하나의 프로젝트 안에 여러개의 명령문을 동시에 관리할 경우 큰 어려움을 겪게 됩니다. 또한 변수를 정의해 줌으로써 코드 작성 시간을 대폭 단축할 수 있게되고, 오류 및 에러발생 확률 또한 대폭 낮출 수 있습니다.

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

만약 사용되는 변수를 'Dim' 선언을 통해 직접 지정하도록 강제하고 싶다면, 'Option Explicit' 문을 사용 할 수 있습니다. (단, VBA 입문자의 경우 Option Explicit 문 없이 우선 연습한 뒤, 이후 Option Explicit 문 사용을 습관화 하는 것이 좋습니다.)

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

엑셀 VBA 기초 강의 - VBA 변수란 무엇인가 변수의 종류 10
Option Explicit 을 선언하게 되면 지정되지 않은 변수를 사용할 경우 '정의되지 않은 변수'라며 에러메세지를 출력합니다.

VBA 변수, 왜 사용하나요?

변수를 사용하는 이유는 크게 3가지 이유가 있습니다.

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

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

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

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

그 중 가장 많이 사용하는 대표적인 데이터타입 7가지를 아래에 표로 정리해드립니다. 아래 6가지 데이터형식은 (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
5 9 투표
게시글평점
guest
10 댓글
Inline Feedbacks
모든 댓글 보기
0ugi
0ugi
2020년 5월 22일 3:07 오후
게시글평점 :
     

잘배웠습니다.

잭이
잭이
2020년 6월 2일 5:15 오후
게시글평점 :
     

Sub() = Function() 인데 Dim 은 뭘까요? 코드인데 ';'로 끝나지 않는다....

sws****
sws****
2020년 6월 12일 10:26 오전
게시글평점 :
     

많이 배울 수 있어 감사합니다.

굴레악
2020년 7월 11일 12:30 오후
게시글평점 :
     

조금 감이 잡혀가는 듯합니다.
외우고 반복 학습해야겠네요.

z****
z****
2020년 7월 24일 9:38 오전
게시글평점 :
     

명료한 강의 감사합니다

family****
family****
2020년 10월 24일 1:25 오후
게시글평점 :
     

유익한정보감사합니다

dozi****
dozi****
2020년 11월 16일 8:49 오후
게시글평점 :
     

잘배우고 갑니다

옛꼬망
옛꼬망
2020년 12월 1일 12:45 오전
게시글평점 :
     

강의 수강완료!! 20.12.01

learn_xlsx
learn_xlsx
2021년 4월 20일 8:39 오전
게시글평점 :
     

강의 감사합니다.

일선일창
일선일창
2021년 5월 28일 8:24 오전
게시글평점 :
     

오빠두 덕분에 VBA의 세계에 첫발을 들여놓았습니다. 너무 재미있고 쉽게 가르쳐 주시네요. 감사합니다.

10
0
여러분의 생각을 댓글로 남겨주세요.x