안녕하세요.
VBA의 세부적인 내용을 하나씩 소개하겠습니다.
첫번째는 변수(變數, Variable)입니다.
프로그램이 실행되는 중 값이 바뀔 수 있는 수를 의미합니다.
다들 엑셀을 사용해 보셨을테니, 엑셀에서 수식을 작성할 때 계산할 값을 직접 적지 않고, 그 값이 들어있는 셀 주소를 적도록 하는 걸 아시죠?
이렇게 셀 주소를 이용해 수식을 작성하면 수식을 복사해 다른 값에도 그 수식을 적용해 빠르게 값을 구할 수 있기 때문입니다.
VBA에서 변수의 역할도 딱 그것과 같습니다.
두번째는 상수(常數, Constant)입니다.
프로그램이 실행되는 중에 값이 변하지 않는 수를 의미합니다.
변수와 반대되는 것이죠.
변수처럼 많이 쓰이는 것은 아니지만 잘 사용하면 프로그램을 편리하게 작성할 수 있습니다.
가령 원주율을 프로그램 안에서 사용할 경우 직접 3.14라고 값을 입력하면 나중에 값을 바꾸려고 할 때 일일이 찾아 바꿔야 하므로 불편합니다.
이때 상수로 선언해 사용할 수 있죠.
변수로 원주율을 지정해 쓸 수도 있지만, 변수는 프로그램이 동작하는 과정 중 변경될 가능성이 있습니다.
실수로 원주율을 저장한 변수에 다른 값을 넣으면 변수이기 때문에 값이 바뀔 수 있는 거죠.
상수는 프로그램이 동작하는 중 값이 바뀌지 않도록 보장을 합니다.
완전히 같은 의미는 아니지만 굳이 엑셀의 기능과 비교하자면 이름 정의와 비슷합니다.
하나의 셀이나 셀 범위를 사용자가 알아보기 편한 이름으로 지정해서 프로그램 안에서 사용해서 코드를 좀 더 보기 쉽게 만드는 역할을 합니다.
상수는 사용자가 직접 만들어 사용하기도 하지만, VBA가 미리 만들어 둔 상수를 사용하는 경우가 많아 의미를 꼭 알아 둘 필요가 있습니다.
VBA가 미리 만든 상수는 첫 두 글자가 vb로 시작합니다.
대표적인 상수는 색상값을 나타내는 것으로 vbBlack는 검은색을 나타내고, vbWhite는 흰색을 나타냅니다.
만약 상수를 쓰지 않고 색상값을 나타내려면 16진수 값으로 검은색은 0x0, 흰색은 0xFFFFFF으로 나타내야 합니다.
또 많이 사용되는 상수는 줄바꿈을 나타내는 상수인 vbCrLf입니다.
<Enter>키를 눌러 줄바꿈을 하려면 VBA 코드로는 캐리지리턴과 라인피드, 이렇게 두 개의 키 값을 넣어야 하고, 함수로 표현하면 Chr(13) & Chr(10)으로 나타내야 합니다.
이걸 간단히 상수로 구현해 놓은 것이 vbCrLf입니다.
자주 사용하는 시스템 상수는 금방 외우게 되고, 어쩌다 한번씩 사용하는 상수라면 도움말에서 찾아 나타내면 됩니다.
일일이 VBA 언어 문법을 외워서 코딩을 할 수 없기 때문에 계속 찾아보기 하게 되는데, 보통 검색 사이트에서 검색을 하거나 VBE 도움말에서 필요한 부분을 찾아야 합니다.
오피스 VBA 참조 https://docs.microsoft.com/en-us/office/vba/api/overview/
VBA 언어 참조 https://docs.microsoft.com/en-us/office/vba/api/overview/language-reference
처음 도움말을 보면 당황스럽지만 시간이 지나면 지날수록 익숙해 지게 되고 나중엔 편안해 집니다.
한편 변수와 상수에 담기는 값의 형식에 따라 문자형, 숫자형, 논리형등으로 나누고 이걸 자료형(Data Type)이라고 합니다.
자료형의 종류도 도움말에서 찾아볼 수 있습니다.
변수와 상수의 자료형은 꼭 설정해야 하는 건 아닙니다.
자료형을 지정하지 않으면 모든 자료형을 담을 수 있는 베리언트(Variant)형이 됩니다.
변수나 상수를 만들어 사용할 때 적합한 자료형을 지정하면 자료형을 따로 지정하지 않았을 때 지정되는 베리언트형에 비해 주기억장치(RAM)에서 차지하는 공간을 절약할 수 있습니다.
베리언트형은 아무리 적은 양을 변수나 상수에 저장해도 최소 22나 24바이트를 차지하게 됩니다.
만약 정수 12,345를 저장할 변수나 상수로 Integer 자료형을 지정하면 2바이트면 충분합니다.
요즘 같이 많은 용량의 주기억장치를 사용하는 경우엔 굳이 용량 때문에 정확한 자료형을 찾는 수고를 할 필요는 없어 보입니다.
변수나 상수를 선언할 때 자료형을 지정하는 두번째 이유는 저장할 내용에 맞게 자료형을 지정해 두면 변수나 상수에 값을 입력하거나 다른 값과 비교할 때 오류를 막을 수 있기 때문입니다.
상수는 선언과 함께 바로 값을 입력하기 때문에 크게 효용성이 없습니다.
숫자값을 저장할 변수에 문자를 입력했을 때 베리언트형은 아무런 오류메시지 없이 그냥 입력되지만 자료형을 숫자로 지정해 뒀다면 바로 경고메시지를 표시해서 오류를 막을 수 있게 되는 겁니다.
또 변수를 선언할 때 변수가 적용되는 범위를 지정해서 전역 변수(Public), 지역 변수(Dim, Private)로 선언할 수 있고, 변수의 생명 주기를 설정하는 정적 변수(Static)으로 선언하는 방법도 있습니다.
전역 변수는 프로젝트 어디에서나 접근할 수 있는 변수이고, Dim이나 Private은 변수 선언 위치에 따라 달라지지만 모듈이나 프로시저 안에서 접근할 수 있는 변수입니다.
정적 변수는 프로시저 안에서 선언해 사용하고, 프로시저 실행이 완료된 상태에도 변수의 값이 유지되어 다음번에 프로시저를 실행하면 전에 저장된 값이 기본값이 되어 실행하게 됩니다.
변수와 상수의 이름을 정하는 규칙은 엑셀에서 이름 정의를 할 때 이름을 정하는 것이나 매크로 이름을 정하는 규칙과 같습니다.
첫글자는 문자여야 하고, 중간에 빈칸이 없어야 합니다.
특수문자 중 밑줄( _ )을 문자처럼 사용할 수 있습니다.
영어의 경우 대소문자를 구분하지 않고 대부분 소문자를 씁니다.
변수 이름을 정하는 방법으로 헝가리안 표기법(Hungarian Notation)이 있는데, 예전에 많이 사용되었으나 지금은 사용하는 사람이 적지만 검색해 보면 종종 만나는 표기법이라 의미를 알아 두는게 좋습니다.
방법은 간단한데, 변수 이름 앞부분에 자료형을 약자로 표시하는 겁니다.
가령 문자형 이름을 저장할 변수 이름은 strName이라고 정하는 겁니다.
str은 문자 자료형을 의미하는 String을 줄여 나타내고, 저장되는 내용이 나타나도록 Name을 쓰는데, 앞 자료형과 구분하기 위해 첫글자를 대문자로 쓴 겁니다.
상수는 변수와 구분하기 위해 모두 대문자로 씁니다.
앞에서 예를 든 원주율을 저장하는 상수라면 PI로 지정하는게 내용과 형태를 한 눈에 볼 수 있는 이름 선언 방법인 겁니다.
필요한 분께 도움되길 바라며 강좌는 마칩니다.
수고하셨습니다.
'매크로&VBA' 카테고리의 다른 글
거래내역을 DB 형식으로 저장하기 (0) | 2020.06.20 |
---|---|
연산자 (0) | 2020.06.06 |
VBE(Visual Basic Editor) 사용하기 (0) | 2020.05.25 |
엑셀 매크로와 VBA 이야기 (0) | 2020.05.23 |
여러 시트에 데이터를 하나의 시트로 합치는 간단한 VBA (0) | 2020.05.21 |