엑셀 VBA 변수란?(Variable)
엑셀 VBA의 시작! 자주쓰는 변수 7가지 총정리 강의! - VBA 변수 알아보기
이 강의에서는 VBA 코드의 가장 기본 단위인 변수의 개념을 방정식 비유로 풀어 설명하고, 변수를 직접 지정하는 경우와 자동 할당되는 경우의 동작 차이를 예제 코드로 비교합니다. 또한 Option Explicit 선언의 역할과 실무에서 자주 사용하는 7가지 데이터 타입까지 정리하여 VBA 코딩의 토대를 다지도록 돕습니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
VBA 변수란 무엇인가요?
변수는 VBA뿐만 아니라 자바(Java), 파이썬(Python), 루비(Ruby), C언어 등 다양한 프로그래밍 언어에서 공통적으로 사용되는 코딩의 기초 단위입니다.
변수의 개념을 좀 더 쉽게 이해하기 위해, 초등학교 시절에 배웠던 '방정식'의 원리를 잠시 떠올려 보겠습니다. y = x + 1 이라는 방정식을 예로 들면, 이 식은 아래와 같이 입력값과 결과값의 관계를 보여주는 도표로 표현할 수 있습니다.

변수는 명령문을 좀 더 쉽게 작성하기 위한 기본 단위입니다. 위 방정식에서 x값이 변함에 따라 y값이 결정되듯, VBA 역시 변수의 값이 바뀌면 결과값이 함께 변하는 원리로 동작하며, 위의 방정식과 동일한 구조로 표현할 수 있습니다.
이번에는 실제 사례를 살펴보겠습니다. 만약 '주민등록번호'를 바탕으로 성별을 구분하는 코드를 작성한다고 가정하면, 아래 도표를 통해 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)

이번에는 아래 두 번째 명령문을 복사하여 실행해 보겠습니다.
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에서 자체적으로 처리해주는데도 왜 변수를 할당해서 사용해야 하나요?
변수를 올바르게 할당하지 않은 채 코딩을 진행하면, 이후 하나의 프로젝트 안에서 여러 명령문을 동시에 관리할 때 큰 어려움을 겪을 수 있습니다. 또한 변수를 명시적으로 정의해 두면 코드 작성 시간이 크게 단축되고, 오류와 에러 발생 확률 또한 현저히 줄어듭니다.
VBA 변수 지정을 생활화하고자 한다면 = 'Option Explicit' 선언
사용되는 모든 변수를 'Dim' 선언으로 직접 지정하도록 강제하고 싶다면, 'Option Explicit' 문을 사용할 수 있습니다. (단, VBA 입문자라면 Option Explicit 문 없이 먼저 충분히 연습한 뒤, 어느 정도 익숙해진 시점에 Option Explicit 문 사용을 습관화하는 것이 좋습니다.)
Option Explicit 문을 사용하는 방법은 간단합니다. 모듈의 첫 부분에 Option Explicit을 적어 두면, 해당 모듈에서 사용된 변수 중 할당되지 않은 변수가 있을 경우 아래 그림과 같이 오류 메시지가 출력됩니다.

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