변수(Variable)
VBA에서 변수를 선언하면
이 변수를 범위에서 사용할지를 설정하고
변수가 사용할 수 있는 값의 범위도 설정할 수 있다.
우선 변수 사용 범위에 대해 알아보면
지역변수 (Dim)
변수 사용범위는 프로시저(Procedure) 수준으로
선언된 프로시저에서만 사용 가능하고
실행할 때마다 재생성되므로 초기값이 0이나 공백, Null이 된다.
모듈변수 (Dim or Private)
변수 사용범위는 모듈(Module) 수준으로
선언한 해당 모듈에서만 사용 가능하고
프로그램이 종료될 때까지 값을 유지한다.
전역변수 (Public)
변수 사용범위는 프로젝트(Project) 수준으로
프로젝트의 어디에서나 사용 가능하고
프로그램이 종료될 때까지 값을 유지하며
모듈 개체에서만 선언할 수 있고
폼이나 시트 개체에서는 선언해도 의미가 없다.
정적변수 (Static)
변수 사용범위는 프로시저 수준으로
선언된 프로시저에서만 유효하고
지역 변수지만 프로그램이 종료될 때까지 값을 유지한다.
쉽게 말하자면
지역변수와 정적변수는 비슷한데
값을 유지하는지, 초기값으로 재생성되는지의 차이고
사용 범위는 지역변수 - 모듈변수 - 전역변수 순서로 커진다.
Dim의 의미?
Dim이 원래는 배열의 차원을 정의하는데 사용해서
Dimension을 나타내는 거라고 하는데
배열뿐만 아니라 모든 변수를 정의하는데 사용한다.
Declare In Memory의 약자라는 설도 있다.
변수 선언 규칙
변수의 첫번째 문자는 숫자가 아닌 문자여야 한다.
Variable_1 처럼 숫자가 뒤에 있으면 괜찮지만
1_Variable 같이 숫자가 앞에 있으면 안된다.
변수에는 밑줄 _ 이외의 특수문자(!, @, #, $, ...)를 사용할 수 없다.
Variable_1 은 되지만 Variable@1 은 안된다.
변수의 길이는 255자 이내여야 한다.
그런데 코드를 작성하다보면
이게 무슨 변수인지 의미를 알 수 있는 정도로 짧게 설정하지
수백 글자로 사용할 일은 없을 거다.
사실 Variable_1 도 길다. V_1 로 사용하고 말지.
Visual Basic의 함수, 명령문과 같은 키워드를
변수 이름으로 사용할 수 없다.
변수를 명령문으로 인식하니까.
For, Next, Do, Loop, With 같은 걸 사용하면 안된다.
같은 수준의 범위에서는 이름을 중복하여 지정할 수 없다.
Dim A As Long 이라고 선언해놓고
또 Dim A As Long 이라고 선언하면
A를 두번 선언하는 거니까 안된다.
변수 Data Type
변수를 선언할 때
예를 들어 Dim A As Long 에서
As 다음에 붙는 것이 변수 형식이다.
Byte
정수 0~255 범위 내에서 사용할 수 있고
변수의 메모리 크기는 1 Byte이다.
2진 데이터를 저장할 때 사용한다.
Integer
정수 -32,768 ~ 32,767 범위 내에서 사용할 수 있고
변수의 메모리 크기는 2 Byte이다.
Long
정수 -2,147,483,648 ~ 2,147,483,647 범위 내에서 사용할 수 있고
변수의 메모리 크기는 4 Byte이다.
정수를 사용하는 변수 형식 중에서는 가장 범위가 크다.
얼마만큼의 정수를 다룰지 잘 모르겠으면
Long을 쓰면 된다.
Single
음수 -3.402823*10^38 ~ -1.401298*10^-45 범위와
양수 1.401298*10^-45 ~ 3.402823*10^38 범위의 실수를 사용할 수 있고
변수의 메모리 크기는 4 Byte이다.
Double
음수 -1.79769313486232*10^308 ~ -4.97065645841247*10^-324 범위와
양수 4.97065645841247*10^-324 ~ 1.79769313486232*10^308 범위의 실수를 사용할 수 있고
변수의 메모리 크기는 8 Byte이다.
실수를 사용하는 변수 형식 중에서는 가장 범위가 크다.
Single 형식으로도 충분하지만
얼마만큼의 실수를 다룰지 잘 모르겠으면
Double 쓰면 된다.
Date
날짜와 시간을 사용하는 변수로
날짜는 1년 1월 1일 ~ 9999년 12월 31일 범위
시간은 00:00:00 ~ 23:59:50 범위에서 사용할 수 있고
변수의 메모리 크기는 8 Byte이다.
Currency
정확성이 필요한 고정 소수점 계산과 돈 계산 등에 유용한 변수로
-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 범위의
정수 부분 15자리와 소수점 이하 4자리로 구성된 숫자를 사용한다.
변수의 메모리 크기는 8 Byte이다.
String
문자 그 자체를 사용하는 변수로
문자 길이만큼의 메모리 크기를 사용한다.
Boolean
논리값 참/거짓 을 사용하는 변수로
False는 0, True는 1 이고
기본값은 False다.
변수의 메모리 크기는 2 Byte이다.
Object
Set 명령문으로 지정된 개체를 참조하는 변수로
변수의 메모리 크기는 4 Byte이다.
Variant
변수 선언을 안해주면 기본적으로 지정되는 형식으로
유연하게 사용할 수 있는 만큼 계산도 느리다.
변수의 메모리 크기는
숫자의 경우 16 Byte
문자의 경우 22 Byte + 문자 길이 이다.
Range
좀 특이한데 셀 범위를 사용하는 변수다.
이것을 사용할 때는 Dim과 Set을 같이 사용한다.
Dim rng As Range
Set rng = [A1:A2]
rng 라는 변수를 Range 형식으로 지정하되
A1~A2 범위의 셀을 rng 변수에 넣겠다는 거다.
'Excel VBA 기초' 카테고리의 다른 글
Excel VBA - VBA Editor 살펴보기 (2) (0) | 2023.11.30 |
---|---|
Excel VBA - 변수 (2) (0) | 2023.11.30 |
Excel VBA - Cell 값을 다른 Cell에 복사하기 (0) | 2023.11.26 |
Excel VBA - Columns, Rows (0) | 2023.11.24 |
Excel VBA - 다중 Cell 범위 지정하기 (0) | 2023.11.19 |