소개
이 문서에서는 Microsoft Visual Basic for Applications Microsoft Excel 하위 프로시저에서 변수를 사용하는 방법을 설명합니다.
추가 정보
하위 프로시저의 변수
프로그래밍 언어의 강력한 기능은 변수의 내용을 사용하거나 절차의 뒷부분에서 변경할 수 있도록 변수에 항목을 저장하는 기능입니다. 이 문서에서는 Visual Basic에서 다음과 같은 변수 사용에 대해 설명합니다.
- 변수가 선언되는 방식입니다.
- 변수를 사용할 수 있는 프로시저 및 프로젝트입니다.
- 변수의 수명입니다.
매크로에서 변수 선언
매크로에서 변수를 선언하는 가장 간단한 방법은 Dim 문을 사용하는 것입니다. 다음 줄에서는 두 변수를 정수로 선언합니다.
Dim x As Integer, y As Integer
x 및 y를 정수로 지정하면 Visual Basic에 정수 변수(x 및 y의 경우 각각 2바이트)에 대한 충분한 메모리를 따로 설정하도록 하고 x 또는 y에 저장된 정보는 -32768에서 32767 사이의 정수임을 알려 줍니다.
참고: 단일 Dim 문을 사용하여 둘 이상의 변수를 선언하는 경우 각 변수에 대한 데이터 형식을 지정해야 합니다.
다음 Visual Basic 코드와 같이 각 변수에 대한 데이터 형식을 지정하지 않으면 변수 y만 정수 변수로 설정됩니다. 변수 x는 변형 형식입니다.
Dim x, y As Integer
자세한 내용은 아래 의 Variant 데이터 형식을 참조하세요.
변수 테스트를 수행하려면 다음 단계를 수행합니다.
열려 있는 통합 문서를 저장하고 닫은 다음 새 통합 문서를 엽니다.
Visual Basic 편집기를 시작합니다(Alt+F11 누르기).
삽입 메뉴에서 모듈을 클릭합니다.
다음 코드를 입력합니다.
Sub Variable_Test()
Dim x As Integer, y As Integer
x = 10
y = 100
MsgBox "x 값은 " & x & _
Chr(13) & "y 값은 " & y
End SubVariable_Test 매크로를 실행합니다. 다음과 같은 메시지가 표시됩니다.
the value of x is 10
the value of y is 100확인을 클릭합니다.
Variable_Test 매크로에서 다음 줄을 변경합니다.
x = 10따릅니다.
x = "error"Variable_Test 매크로를 실행합니다.
"error"가 정수가 아니고 이 문자열 값을 정수 변수 x에 할당하려고 하므로 런타임 오류가 발생합니다.
데이터 형식 요약
일반적인 변수 데이터 형식은 다음과 같습니다.
Variant 데이터 형식
변수를 선언할 때 데이터 형식을 지정하지 않거나 변수를 전혀 선언하지 않는 경우 Visual Basic은 이 변수의 변형 데이터 형식을 자동으로 지정합니다. 다음은 이 데이터 형식으로 선언된 변수의 장점입니다.
- 변수에는 문자열, 날짜, 시간, 부울 또는 숫자 값이 포함될 수 있습니다.
- 변수는 포함된 값을 자동으로 변환할 수 있습니다.
단점은 변형 변수에 16바이트 이상의 메모리가 필요하다는 것입니다. 16바이트의 메모리는 대규모 프로시저 또는 복잡한 모듈에서 중요할 수 있습니다.
Variable_Test 매크로에서 어떻게 작동하는지 확인하려면 다음 단계를 수행합니다.
Variable_Test 매크로의 코드를 다음으로 변경합니다.
Sub Variable_Test()
Dim x, y
x = "string"
y = 1.23
MsgBox "the value of x is " & x & _
Chr(13) & "the value of y is " & y
End Sub
Variable_Test 매크로를 실행합니다.
변형 변수 x 및 y에 아무것도 할당할 수 있으므로 오류가 표시되지 않습니다.
참고: 다음 줄을 제외할 수도 있으며 x 및 y 변수가 Variant 데이터 형식으로 처리될 때 매크로가 계속 작동합니다.
Dim x, y
변수 범위
변수를 선언할 때 동일한 모듈, 다른 모듈 또는 다른 프로젝트의 다른 매크로에서 볼 수도 있고 보이지 않을 수도 있습니다. 모듈에서 변수의 이 가용성을 scope라고 합니다. 세 가지 유형의 scope 프로시저 수준, 프라이빗 모듈 수준 및 공용 모듈 수준입니다. scope 변수 또는 변수를 선언하는 방법과 위치에 따라 달라집니다.
프로시저 수준 scope
프로시저 수준 scope 있는 변수는 선언된 프로시저 외부에 표시되지 않습니다. 프로시저 수준 scope 있는 변수의 값을 설정하면 다른 매크로에서 해당 변수의 내용을 볼 수 없습니다.
프로시저 수준 scope 있는 변수가 선언된 프로시저 외부에 표시되지 않는지 확인하려면 다음 단계를 수행합니다.
프로젝트에 새 모듈을 삽입합니다.
이 모듈에 다음 매크로를 모두 입력합니다.
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, macro1에서 볼 수 있듯이 " & x '다음 줄은 Macro2 Macro2 End Sub Sub Macro2() MsgBox "x를 실행합니다. Macro2에서 볼 수 있듯이 x는 " & x End Sub입니다.Macro1을 실행하면 다음 메시지가 표시됩니다.
x, as seen by Macro1 is 10확인을 클릭하면 다음 메시지가 표시됩니다.
x, as seen by Macro2 is확인을 클릭합니다.
변수 x가 Macro1에 로컬이기 때문에 Macro2는 변수 x에 대한 값을 표시하지 않습니다.
프라이빗 및 퍼블릭 모듈 수준 scope
모듈의 선언 섹션에서 변수를 정의하고(모듈의 맨 위에 있는 모든 하위 프로시저에서) Public 문, Dim 문 또는 Private 문을 사용하여 변수의 scope 설정할 수 있습니다. Public 문을 변수 앞에 배치하면 프로젝트의 모든 모듈에 있는 모든 매크로에서 변수를 사용할 수 있습니다. Dim 문 또는 Private 문을 변수 앞에 배치하면 변수가 선언되는 모듈의 매크로에서만 변수를 사용할 수 있습니다.
Public 문과 Dim 문의 차이점을 확인하려면 다음 단계를 수행합니다.
열려 있는 통합 문서를 저장하고 닫은 다음 새 통합 문서를 엽니다.
Visual Basic 편집기를 시작합니다.
프로젝트에 모듈을 삽입합니다.
-
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub 프로젝트에 다른 모듈을 삽입합니다.
이 모듈에 다음 코드를 입력합니다.
Sub Macro2()
x = x * 3
MsgBox x
End Sub첫 번째 모듈에서 Macro_1a 매크로를 실행합니다.
변수 x를 "Public x As Integer"로 선언하면 프로젝트의 세 매크로 모두 x 값에 액세스할 수 있습니다. 첫 번째 메시지 상자에 값이 10으로 표시됩니다. 두 번째 메시지 상자에는 20 값이 표시됩니다(x는 Macro_1b 2를 곱하기 때문). 세 번째 메시지 상자에는 값이 60으로 표시됩니다(x 값이 Macro_1b 20으로 변경된 후 Macro2에서 3을 곱했기 때문).
첫 번째 모듈의 선언줄을 다음에서 변경합니다.
Public x As Integer따릅니다.
Dim x As IntegerMacro_1a 매크로를 실행합니다.
변수 x를 "Dim x As Integer"로 선언하면 첫 번째 모듈의 매크로만 x 값에 액세스할 수 있습니다. 따라서 첫 번째 메시지 상자에 값 10이 표시되고 두 번째 메시지 상자에 값이 20으로 표시되고(x가 Macro_1b 2를 곱하기 때문에) 세 번째 메시지 상자에 값이 0이 표시됩니다(Macro2에 x 값이 표시되지 않고 초기화되지 않은 값이 매크로 2에서 사용됨).
첫 번째 모듈의 선언줄을 다음에서 변경합니다.
Dim x As Integer따릅니다.
Private x As IntegerMacro_1a 매크로를 실행합니다.
Dim 문을 사용하던 scope Private 문을 사용하여 동일한 메시지 상자가 표시됩니다. 변수 x는 선언된 모듈에 대해 프라이빗으로 동일한 scope.
참고: 변수의 scope 선언된 모듈로 제한하려면 Dim 문 대신 Privatestatement를 사용합니다. 둘 다 동일한 효과를 얻을 수 있지만 Private 문을 사용하는 경우 코드를 읽을 때 scope 더 명확합니다.
변수의 수명
변수가 해당 값을 유지하는 시간을 수명이라고 합니다. 변수의 값은 수명 동안 변경될 수 있지만 값은 유지됩니다. 또한 변수가 scope 손실되면 더 이상 값이 없습니다.
변수 값 초기화
매크로를 실행하면 모든 변수가 값으로 초기화됩니다. 숫자 변수는 0으로 초기화되고, 가변 길이 문자열은 길이가 0인 문자열("")로 초기화되고 고정 길이 문자열은 ASCII 코드 0으로 채워집니다. Variant 변수는 Empty로 초기화됩니다. 빈 변수는 숫자 컨텍스트에서 0으로, 문자열 컨텍스트에서 길이가 0인 문자열("")으로 표시됩니다.
프로시저 수준 변수
Dim 문을 사용하여 매크로에 선언된 변수가 있는 경우 매크로가 실행되는 한 변수는 해당 값을 유지합니다. 이 매크로가 다른 매크로를 호출하는 경우 다른 매크로도 실행 중인 한 변수 값은 유지됩니다(다른 매크로에서는 사용할 수 없음).
프로시저 수준 변수의 작동 방식을 보여 주려면 다음 단계를 수행합니다.
프로젝트에 새 모듈을 삽입합니다.
이 모듈에 다음 매크로를 모두 입력합니다.
Sub Macro1()
'x를 프로시저 수준 변수로 설정
Dim x As Integer
MsgBox "x의 초기화된 값은 " & x
x = 10
MsgBox "x is " & x
'다음 줄은 Macro2를 실행합니다.
Macro2
MsgBox "x is still " & x
End Sub
Sub Macro2()
MsgBox "x, Macro2에서 볼 수 있듯이 " & x
End SubMacro1을 실행합니다.
다음과 같은 메시지가 표시됩니다.
the initialized value of x is 0확인을 클릭하면 메시지가 표시됩니다.
x is 10확인을 클릭하면 다음 메시지가 표시됩니다.
x, as seen by Macro2 is확인을 클릭합니다.
변수 x가 Macro1에 로컬이기 때문에 Macro2는 변수 x에 대한 값을 표시하지 않습니다. 다음 메시지가 표시됩니다.
x is still 10확인을 클릭합니다.
Macro1을 실행합니다.
매크로1이 6단계에서 실행을 중지하는 즉시 x 변수 값이 손실되었으므로 3~6단계에서 설명한 것과 동일한 메시지를 받습니다. 따라서 7단계에서 Macro1을 다시 실행하면 첫 번째 메시지에 x 값이 0(초기화된 값)으로 표시됩니다.
정적 키워드(keyword)
static 키워드(keyword) 사용하여 프로시저 수준 변수를 선언하는 경우 프로젝트가 다시 설정될 때까지 변수는 해당 값을 유지합니다. 따라서 정적 변수가 있는 경우 다음에 프로시저를 호출할 때 정적 변수가 마지막 값으로 초기화됩니다.
정적 키워드(keyword) 작동하는 방식을 확인하려면 다음 단계를 수행합니다.
1.
Change the code in Macro1 to:
Sub Macro1()
'set x as a procedure level variable
Static x As Integer
MsgBox "the initialized value of x is " & x
x = x + 10
MsgBox "x is " & x
End Sub
Macro1을 실행합니다.
메시지가 표시됩니다.
the initialized value of x is 0확인을 클릭하면 메시지가 표시됩니다.
x is 10확인을 클릭합니다.
Macro1을 실행하면 다음 메시지가 표시됩니다.
the initialized value of x is 10확인을 클릭하면 다음 메시지가 표시됩니다.
x is 20확인을 클릭합니다.
x 변수가 정적 변수로 선언되고 변수가 Macro1을 처음 실행한 후 해당 값을 유지하기 때문에 메시지에 표시되는 값은 두 번째로 다릅니다.
참고: 모듈 수준 변수가 있는 경우 해당 수명은 정적 프로시저 수준 변수인 경우와 동일합니다.
모듈 수준 변수의 수명을 확인하려면 다음 단계를 수행합니다.
1.
Change the code in the module that contains Macro1 to the following:
Dim x As Integer 'create a module-level variable
Sub Macro1()
MsgBox "the initialized value of x is " & x
x = x + 10
MsgBox "x is " & x
End Sub
Macro1을 실행하면 다음 메시지가 표시됩니다.
the initialized value of x is 0확인을 클릭하면 다음 메시지가 표시됩니다.
x is 10확인을 클릭합니다.
Macro1을 실행하면 다음 메시지가 표시됩니다.
the initialized value of x is 10확인을 클릭합니다.
다음과 같은 메시지가 표시됩니다.
x is 20확인을 클릭합니다.
x 변수가 정적 변수로 선언되고 Macro1 을 처음 실행한 후 해당 값이 유지되기 때문에 메시지에 표시되는 값은 두 번째로 다릅니다.
프로젝트를 다시 설정하여 변수 다시 설정
정적 변수 또는 모듈 수준 변수의 값을 다시 설정하려면 에서 다시 설정 단추를 클릭합니다.
도구 모음을 Standard 실행 메뉴에서 다시 설정을 클릭합니다.
Macro1 프로젝트에 대해 이 작업을 수행하고 Macro1을 다시 실행하면 변수 x의 값이 다시 0으로 초기화되고 첫 번째 메시지가 표시됩니다.
the initialized value of x is 0