[엑셀 VBA #3] 변수 종류와 선언, 활용법




이번 포스팅에선 엑셀 VBA에서 사용되는 변수 종류와 선언, 활용법에 대해 알아보겠습니다.

시작에 앞서 아래 파일을 클릭해서 예제1 파일을 받고 차근차근 따라와 주세요.



예제1.xlsm


변수는 프로그래밍에서 빠질 수 없는 요소로써, 엑셀 VBA를 시작하는 단계에서 확실히 잡고 넘어가야 합니다.

변수의 종류와 성격에 대해 간략하게 표로 만들어봤습니다.






   ※파일에 엑셀 형식으로 저장되어 있습니다.




엑셀 VBA에서 변수를 선언하는 이유


위의 표에서 알 수 있듯이, 각 변수에는 할당된 메모리 용량이 있습니다.

Byte의 경우 1바이트의 용량을 할당받지만, Variant의 경우 무려 16바이트의 용량을 할당받습니다.

변수 설정을 하지 않는 경우에는 Variant 변수로 설정이 됩니다.

엑셀 VBA 프로젝트를 교실로 비유한다면, 변수는 학생들의 책상과 같습니다.

마른 학생도 있고 뚱뚱한 학생들도 있겠죠?

교실에 가장 많은 학생을 수용하려면 마른 학생에겐 작은 의자를, 뚱뚱한 학생에겐 넓은 의자를 배정해주어야 합니다.

따라서 1, 33, 45, 100 과 같이 0과 255 사이의 숫자가 변수로 예상될 때에는, 작은 의자에 해당되는 Byte 변수로 지정해 주면 되는것입니다.

즉, 메모리 활용을 효율적으로 하기 위해 변수 선언은 꼭 필요합니다.


또한, 변수간의 혼동 예방, 숫자 연산의 정확성 등등 여러 이유로 변수 선언은 엑셀 VBA 작성에 앞서서 필히 행해져야 하는 과정입니다.




엑셀 VBA 변수 선언 방법



예제1 파일에서 ALT + F11로 VBA 관리자 화면에 접근하시면 코드를 확인하실 수 있습니다.

변수 선언의 기본적인 방법은 아래와 같습니다.


Dim 변수이름 As 변수종류





각 변수가 출력하는 값의 형식


a라는 변수에 똑같이 숫자 1을 값으로 지정해 준다고 하여도, 변수 타입을 어떻게 지정해주었는지에 따라 출력되는 값이 바뀌게 됩니다.

예제1 파일에서 설정 값을 0으로 주고 각 변수 종류별 출력 값을 알아보겠습니다.







위의 예제에서 알 수 있듯이, 똑같이 '0'을 값으로 지정해 주었지만, 출력되는 값은 상이합니다.

범위를 초과하는 값을 지정할 경우 할당된 메모리 용량을 벗어나게 되고, 에러가 발생하게 됩니다.

예제를 활용하여 여러 값을 지정해 보고 출력되는 값을 알아보세요.




숫자와 관련된 변수 종류(Byte, Integer, Long, Single, Double, Currency)


숫자와 관련된 변수를 사용할 때에는, 기본적으로 각 변수 형식이 허용하는 범위만 유념하면 됩니다.

일반적으로 Integer, Double 변수가 많이 사용됩니다.





문자와 관련된 변수 String


문자를 변수로 지정하려면 String으로 변수를 선언해야 합니다.

숫자를 String으로 지정하면 숫자를 문자로 인식합니다.

a라는 변수를 String으로 선언하고 값을 1으로 지정했을 때 , a + a 라는 연산을 수행하게 되면 출력되는 값은 2가 아닌 11입니다.




논리값 변수 형식 Boolean


변수를 Boolean으로 선언하게 되면 True, False 두 가지 값만 출력하게 됩니다.

기본 값은 False이며, 0을 제외한 모든 숫자를 값으로 지정할 경우 True를 출력합니다.





날짜 및 시간 변수 형식 Date


Date 형식은 사무용 엑셀을 만들 때 가장 많이 쓰는 형식 중 하나입니다.

0부터 2958465까지의 숫자와 1900년 1월 1일부터 9999년 12월 31일까지의 날짜가 1:1 대응합니다.

따라서 날짜와 숫자간의 연산이 가능합니다.

예를 들어 1900-01-01 에 1을 더하면 1900-01-02가 됩니다.





개체변수 Object 변수


엑셀 VBA를 사용하다 보면 범위, 워크시트 등을 변수로 지정해야 하는 상황이 옵니다.

예를 들어 개체의 위치 Workbook("예제1).Worksheets("예제1").range("A1") 를 변수 a라고 지정하고 Object로 선언하게 되면,

a.value 는 workbook("예제1").worksheets("예제1").range("A1").value과 같은 값을 갖게 됩니다.

코드가 어느정도 복잡해 지면 로딩시 속도가 현저히 느려지게 되는데, Object 변수를 잘 활용하면 속도 저하를 방지할 수 있습니다.





변수 선언은 엑셀 VBA에 있어 기초가 되는 과정입니다.

단순한 숫자나 문자는 굳이 선언이 필요 없지만(자동으로 Variant로 지정되기 때문에), 적당한 변수 선언을 하는 습관을 길러야 나중에 메모리 부족으로 인한 불상사를 방지할 수 있습니다.


다음 포스팅은 본격적으로 변수를 활용하는 반복문에 대해 알아보도록 하겠습니다.

엑셀 예제1의 VBA 관리자에 반복문에 대한 힌트를 수록하였으니 확인해보세요.









Icon made by Freepik from www.flaticon.com






Posted by Simon K
: