Visual Basic for Applications의 Excel 하위 프로시저에서 변수를 사용하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 843144 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

소개

이 문서에서는 Microsoft Visual Basic for Applications의 Microsoft Excel 하위 프로시저에서 변수를 사용하는 방법에 대해 설명합니다.

추가 정보

하위 프로시저의 변수

프로그래밍 언어의 강력한 기능 중 하나는 변수에 무언가를 저장하여 나중에 프로시저에서 변수에 저장된 내용을 사용하거나 변경할 수 있다는 것입니다. 이 문서에서는 Visual Basic에서 변수를 사용하는 다음과 같은 방법에 대해 설명합니다.
  • 변수를 선언하는 방법
  • 변수를 사용할 수 있는 프로시저 및 프로젝트
  • 변수의 수명

매크로에서 변수 선언

매크로에서 변수를 선언하는 가장 간단한 방법은 Dim 문을 사용하는 것입니다. 다음 줄은 두 개의 변수 x와 y를 정수로 선언합니다.
Dim x As Integer, y As Integer
x와 y를 정수로 선언하면 정수 변수를 저장할 수 있는 충분한 메모리(x와 y 각각에 대해 2바이트씩)를 확보하라는 지시와 x 또는 y에 저장되는 정보가 -32768과 32767 사이의 정수라는 내용이 Visual Basic에 전달됩니다.

참고 단일 Dim 문을 사용하여 둘 이상의 변수를 선언하는 경우에는 각 변수의 데이터 형식을 지정해야 합니다.

다음 Visual Basic 코드에서처럼 각 변수의 데이터 형식을 지정하지 않으면 변수 y만 정수 변수로 설정되고 변수 x는 Variant 형식이 됩니다.
Dim x, y As Integer
자세한 내용은 "Variant 데이터 형식" 절을 참조하십시오.

변수 테스트를 수행하려면 다음과 같이 하십시오.
  1. 열려 있는 모든 통합 문서를 저장하고 닫은 다음 새 통합 문서를 엽니다.
  2. Alt+F11을 눌러 Visual Basic Editor를 시작합니다.
  3. 삽입 메뉴에서 모듈을 누릅니다.
  4. 다음 코드를 입력합니다.
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
  5. Variable_Test 매크로를 실행합니다. 다음과 같은 메시지가 나타납니다.
    the value of x is 10
    the value of y is 100
  6. 확인을 누릅니다.
  7. Variable_Test 매크로에서 다음 줄을 아래와 같이 변경합니다.
    변경 전:
    x = 10
    

    변경 후:
    x = "error"
    
  8. Variable_Test 매크로를 실행합니다.
정수 변수 x에 정수가 아닌 "error" 문자열 값을 할당하려고 했기 때문에 런타임 오류가 발생합니다.

데이터 형식 요약

다음 표에서는 일반적인 변수 데이터 형식을 보여 줍니다.

표 축소표 확대
데이터 형식저장소 크기허용 범위
부울 2바이트 True 또는 False
정수 2바이트 -32,768 ~ 32,767
Long 4바이트 -2,147,483,648 ~ 2,147,483,647
Double 8바이트 -1.79769313486232E308 ~ -4.94065645841247E-324(음수 값의 경우) 또는 4.94065645841247E-324 ~ 1.79769313486232E308(양수 값의 경우)
통화 8바이트 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
날짜 8바이트 100년 1월 1일 ~ 9999년 12월 31일
문자열 10바이트 + 문자열 길이

Variant 데이터 형식

변수를 선언할 때 데이터 형식을 지정하지 않거나 변수를 전혀 선언하지 않을 경우 Visual Basic은 자동으로 이 변수에 Variant 데이터 형식을 지정합니다. 변수를 Variant 데이터 형식으로 선언하면 다음과 같은 이점이 있습니다.
  • 변수에 문자열, 날짜, 시간, 부울 또는 숫자 값을 포함할 수 있다
  • 변수가 자신에게 자동으로 포함되는 값을 변환할 수 있다
단점은 Variant 변수에 최소한 16바이트의 메모리가 필요하다는 것입니다. 16바이트의 메모리는 큰 프로시저나 복잡한 모듈에서 문제가 될 수 있습니다.

Variable_Test 매크로에서 이것이 어떻게 작동하는지 보려면 다음과 같이 하십시오.
  1. 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
    
  2. Variable_Test 매크로를 실행합니다.
Variant 변수 x와 y에는 아무 값이나 할당할 수 있기 때문에 오류 메시지가 나타나지 않습니다.

참고 변수 x와 y가 Variant 데이터 형식으로 처리되기 때문에 다음 줄을 생략해도 매크로는 계속 작동합니다.
Dim x, y

변수의 범위

변수를 선언하면 동일한 모듈, 다른 모듈 또는 다른 프로젝트에 있는 다른 매크로에 해당 변수가 표시되거나 표시되지 않을 수 있습니다. 모듈 내에서의 이러한 변수 가용성을 범위라고 하는데, 프로시저 수준, 개인 모듈 수준 및 공유 모듈 수준의 세 가지가 있습니다. 범위는 변수가 선언되는 방법과 위치에 따라 달라집니다.

프로시저 수준 범위

프로시저 수준 범위의 변수는 자신이 선언되는 프로시저에만 표시됩니다. 프로시저 수준 범위의 변수 값을 설정하면 다른 매크로에 해당 변수의 내용이 표시되지 않습니다.

프로시저 수준 범위의 변수가 자신이 선언되는 프로시저에만 표시되는지 확인하려면 다음과 같이 하십시오.
  1. 프로젝트에 새 모듈을 삽입합니다.
  2. 이 모듈에 다음 매크로를 둘 다 입력합니다.
    Sub Macro1()
    Dim x As Integer
    x = 10
    MsgBox "x, as seen by Macro1 is " & x
    'the next line runs Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    x, as seen by Macro1 is 10
  4. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x, as seen by Macro2 is
  5. 확인을 누릅니다.
Macro2에는 변수 x가 Macro1에 로컬이기 때문에 변수 x의 값이 표시되지 않습니다.

개인 및 공용 모듈 수준 범위

모듈의 맨 위, 즉 모든 하위 프로시저 위에 있는 모듈의 선언 섹션에서 변수를 정의하고 Public, Dim 또는 Private 문을 사용하여 변수의 범위를 설정할 수 있습니다. 변수 앞에 Public 문을 붙여 넣을 경우 이 변수는 프로젝트에 있는 모든 모듈의 모든 매크로에서 사용할 수 있습니다. 변수 앞에 Dim 또는 Private 문을 붙여 넣을 경우 이 변수는 자신이 선언되는 모듈의 매크로에서만 사용할 수 있습니다.

Public 문과 Dim 문의 차이점을 확인하려면 다음과 같이 하십시오.
  1. 열려 있는 모든 통합 문서를 저장하고 닫은 다음 새 통합 문서를 엽니다.
  2. Visual Basic Editor를 시작합니다.
  3. 프로젝트에 모듈을 삽입합니다.
  4. 이 모듈에 다음 코드를 입력합니다.
    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
    
  5. 프로젝트에 다른 모듈을 삽입합니다.
  6. 이 모듈에 다음 코드를 입력합니다.
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. 첫 번째 모듈에서 Macro_1a 매크로를 실행합니다.

    변수 x를 "Public x As Integer"로 선언하면 프로젝트에 있는 세 개의 매크로가 모두 변수 x에 액세스할 수 있습니다. 따라서 첫 번째 메시지 상자에는 값 10이 표시되고, 두 번째 메시지 상자에는 x가 Macro_1b에서 2로 곱해졌기 때문에 값 20이 표시되며, 세 번째 메시지 상자에는 값 x가 Macro_1b에서 20으로 변경된 후 Macro2에서 3으로 곱해졌기 때문에 값 60이 표시됩니다.
  8. 첫 번째 모듈의 선언 줄을 다음과 같이 변경합니다.
    변경 전:
    Public x As Integer

    변경 후:
    Dim x As Integer
  9. Macro_1a 매크로를 실행합니다.

    변수 x를 "Dim x As Integer"로 선언하면 첫 번째 모듈의 매크로만 값 x에 액세스할 수 있습니다. 따라서 첫 번째 메시지 상자에는 값 10이 표시되고, 두 번째 메시지 상자에는 x가 Macro_1b에서 2로 곱해졌기 때문에 값 20이 표시되며, 세 번째 메시지 상자에는 Macro2에 값 x가 표시되지 않고 Macro 2에서 초기화되지 않은 값 0이 사용되었기 때문에 값 0이 표시됩니다.
  10. 첫 번째 모듈의 선언 줄을 다음과 같이 변경합니다.
    변경 전:
    Dim x As Integer

    변경 후:
    Private x As Integer
  11. Macro_1a 매크로를 실행합니다.
Private 문을 사용하면 Dim 문을 사용할 때와 동일한 메시지 상자가 표시됩니다. 변수 x에는 해당 변수가 선언되는 모듈에 대해 동일한 범위인 Private가 지정됩니다.

참고 변수의 범위를 해당 변수가 선언되는 모듈로 제한하려면 Dim 문 대신 Private 문을 사용하십시오. 이 두 문은 같은 효과를 내지만 Private 문을 사용하면 코드에서 범위가 더 잘 보입니다.

변수의 수명

변수가 자신의 값을 유지하는 시간을 수명이라고 합니다. 변수 값은 해당 수명 동안 변경될 수는 있지만 손실되지는 않습니다. 또한 변수에서 범위 지정이 해제되면 변수는 더 이상 값을 유지하지 않습니다.

변수 값 초기화

매크로를 실행하면 모든 변수가 특정 값으로 초기화됩니다. 예를 들어, 숫자 변수는 0으로 초기화되고, 가변 길이 문자열은 빈 문자열("")로 초기화되며, 고정 길이 문자열은 ASCII 코드 0으로 채워집니다. Variant 변수는 Empty 변수로 초기화됩니다. Empty 변수는 숫자 컨텍스트에서는 0으로 대체되고 문자열 컨텍스트에서는 빈 문자열("")로 대체됩니다.

프로시저 수준 변수

매크로에서 Dim 문을 사용하여 선언된 변수는 해당 매크로가 실행되는 동안 자신의 값을 유지합니다. 이 매크로가 다른 매크로를 호출할 경우 다른 매크로가 실행되는 동안에도 변수 값은 유지됩니다. 이때 다른 매크로가 이 변수 값을 사용할 수는 없습니다.

프로시저 수준 변수의 작동 방법을 보려면 다음과 같이 하십시오.
  1. 프로젝트에 새 모듈을 삽입합니다.
  2. 이 모듈에 다음 매크로를 둘 다 입력합니다.
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    the initialized value of x is 0
  4. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x is 10
  5. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x, as seen by Macro2 is
  6. 확인을 누릅니다.

    Macro2에는 변수 x가 Macro1에 로컬이기 때문에 변수 x의 값이 표시되지 않습니다. 다음과 같은 메시지가 나타납니다.
    x is still 10
  7. 확인을 누릅니다.
  8. Macro1을 실행합니다.
6단계에서 Macro1의 실행이 중지되자마자 변수 x의 값도 손실되었기 때문에 3-6단계에서 설명한 것과 동일한 메시지가 나타납니다. 따라서 7단계에서 Macro1을 다시 실행하면 첫 번째 매시지에 변수 x의 값이 초기화되어 0으로 표시됩니다.

정적 키워드

정적 키워드를 사용하여 프로시저 수준 변수를 선언하면 변수는 프로젝트가 재설정될 때까지 자신의 값을 유지합니다. 따라서 정적 변수가 있을 경우 다음에 프로시저를 호출하면 해당 정적 변수는 마지막 값으로 초기화됩니다.

정적 변수의 작동 방법을 보려면 다음과 같이 하십시오.
  1. Macro1의 코드를 다음과 같이 변경합니다.
    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
    
  2. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    the initialized value of x is 0
  3. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x is 10
  4. 확인을 누릅니다.
  5. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    the initialized value of x is 10
  6. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x is 20
  7. 확인을 누릅니다.
변수 x가 정적 변수로 선언되었고 Macro1이 처음 실행된 후에도 변수 x는 자신의 값을 유지하기 때문에 이 메시지에 표시되는 값은 두 번째 메시지에 표시되는 값과 다릅니다.

참고 모듈 수준 변수의 수명은 정적 프로시저 수준 변수와 같습니다.

모듈 수준 변수의 수명을 확인하려면 다음과 같이 하십시오.
  1. Macro1이 포함된 모듈의 코드를 다음과 같이 변경합니다.
    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
    
  2. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    the initialized value of x is 0
  3. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x is 10
  4. 확인을 누릅니다.
  5. Macro1을 실행합니다.

    다음과 같은 메시지가 나타납니다.
    the initialized value of x is 10
  6. 확인을 누릅니다.

    다음과 같은 메시지가 나타납니다.
    x is 20
  7. 확인을 누릅니다.
변수 x가 정적 변수로 선언되었고 Macro1이 처음 실행된 후에도 변수 x가 자신의 값을 유지하기 때문에 이 메시지에 표시되는 값은 두 번째 메시지에 표시되는 값과 다릅니다.

변수를 재설정하기 위해 프로젝트 재설정

정적 변수 또는 모듈 수준 변수의 값을 재설정하려면 표준 도구 모음에서 재설정 단추를 누르거나 실행 메뉴에서 재설정을 누르십시오.

Macro1 프로젝트에 대해 이 작업을 수행한 다음 Macro1을 다시 실행하면 변수 x의 값이 다시 0으로 초기화되고 다음과 같은 첫 번째 메시지가 나타납니다.
the initialized value of x is 0
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
843145 Visual Basic for Applications 하위 프로시저의 배열에 대한 설명
맨 위로



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 843144 - 마지막 검토: 2008년 1월 22일 화요일 - 수정: 3.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
키워드:?
kbinfo kbprogramming kbvba KB843144

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com