vba variables option explicit vba
이 튜토리얼은 VBA 변수를 선언하고 사용하는 방법을 설명합니다. 옵션 명시 적, 변수 범위, 정적 및 상수 변수에 대해서도 알아보십시오.
컴퓨터에서 모든 데이터 값은 메모리 또는 컴퓨터 저장소에 저장됩니다. 이러한 값에 액세스하려면 해당 값과 관련된 이름을 지정해야합니다.이 이름은 프로그래밍 언어에서 변수라고합니다.
이 튜토리얼에서는 다양한 유형의 변수 범위와 함께 변수를 선언하고 정의하는 방법을 배우고 정적 및 상수 변수를 자세히 살펴 봅니다.
=> VBA 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.
학습 내용 :
VBA 변수
변수 컴퓨터 저장소의 값에 대한 자리 표시 자와 같습니다. 변수는 다양한 값을 보유 할 수 있으며 해당 값은 코드 실행 중에 변경 될 수 있습니다.
모든 변수에는 값에 액세스하는 데 사용되는 이름이 있습니다. VBA에는 이름 선택과 관련하여 특정 제약이 있습니다.
다음은 제약 조건 목록입니다.
- 변수 이름은 255자를 초과 할 수 없습니다.
- 변수 이름은 숫자로 시작할 수 없습니다.
- !, @, &,., #과 같은 특수 문자로 시작할 수 없거나 공백을 사용할 수 없습니다.
- 키워드는 변수 이름으로 간주되지 않습니다.
이러한 제약 조건을 위반하면 컴파일러에서 오류가 발생합니다.
예:
유효한 변수 이름 : varName, Result12, First_Number
잘못된 변수 이름 : 123abc, #number, Sub, abc.123
첫 번째 숫자 (단어 사이에 공백이 허용되지 않음)
VBA 변수 선언
우리는 없음 변수를 선언하는 키워드입니다. 변수를 선언하는 동안 2 개의 섹션이 있습니다. 1성변수 이름이고 2입니다.nd데이터 유형이라고하는 변수에 저장 될 값 유형입니다.
구문 : Dim VariableName As DataType
예:
- Dim MyAge As Integer
- Dim My_Percentage As Double
- Dim Full_Name As String
여기서는 내 변수가 이러한 유형의 데이터 만 저장해야하며 VBA는 변수에 대해 정의 된 값이 데이터 유형과 일치하지 않을 때 컴파일러 유형 불일치 오류를 발생 시키도록 컴파일러에 명시 적으로 알리고 있습니다.
예:
Sub example1() Dim Total_Marks As Integer Total_Marks = “” MsgBox Total_Marks End Sub
그러나 변수의 데이터 유형이 확실하지 않은 경우 VBA를 사용하면 데이터 유형을 건너 뛸 수 있습니다. 아래에 언급 된 구문도 유효합니다.
Dim VariableName
변수의 데이터 유형을 선언하지 않으면 VBA는이를 Variant 데이터 유형으로 취급하고 정수, 문자열, 통합 문서 등과 같은 모든 유형의 데이터 정수를 허용하도록 바인딩됩니다. 동일한 프로그램에서 변형 변수는 문자열 값, 정수 값 및 기타 유형도 허용 할 수 있습니다.
Sub VarientVariable() Dim Total_Marks Total_Marks = '' MsgBox Total_Marks Total_Marks = 544.33 MsgBox Total_Marks Total_Marks = 522 MsgBox Total_Marks End Sub
Total_Marks는 이전 코드와 달리 변형 변수이므로 컴파일러에서 아래와 같이 오류가 발생하지 않습니다.
노트 : VBA를 사용하면 실제로 선언하지 않고도 변수를 사용할 수 있습니다.
아래 예제 코드도 적절한 결과를 제공합니다. 이 경우 VBA는 자동으로 변수를 Variant 데이터 유형으로 처리합니다. 이를 암시 적 선언이라고합니다.
Sub VariantVariable() Total_Marks = 444 MsgBox Total_Marks End Sub
변수 선언의 장점
- 간편한 디버깅 : 변수를 사용하기 전에 선언하는 것이 좋습니다. 유형 불일치 및 오타 오류와 같은 오류에 대한 조기 이해를 제공하여 프로그램의 논리에서 벗어날 위험을 줄입니다.
- 가독성 향상 : 팀으로서 많은 사람들이 코드를보고있을 것이며, 변수를 선언하면 변수가 취할 것으로 예상되는 값 유형을 가진 모든 사람이 도움이되고 프로그램을 실행하는 동안 사용자가 적절한 입력 값을 입력하는 데 도움이됩니다.
- 저장 공간: 변수를 선언하지 않으면 VBA는 다른 데이터 유형과 비교할 때 메모리에서 가장 큰 공간 (16 바이트에서 22 바이트)을 차지하는 Variant 데이터 유형으로 처리합니다. 예를 들면 1 바이트 만 사용하는 Byte 유형의 변수를 사용하고 선언하지 않으면 VBA는 결국 16 바이트의 공간을 예약하여 메모리를 낭비하게됩니다.
명시 적 옵션
모든 변수가 명시 적으로 선언되었는지 확인하려면 사용하기 전에 Option Explicit 문을 사용해야합니다. 해당 모듈의 모든 절차 시작시 사용해야합니다.
Option Explicit Statement를 사용하지 않는 예를 보겠습니다.
Sub example3() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
코드를 실행하면 (도구 모음에서 F5 또는 실행 버튼을 누름) 빈 메시지 상자가 나타납니다.
변수를 선언했지만 Msgbox Firt_Name의 오타로 인해 빈 결과 상자에 표시되었습니다. Option Explicit는 이러한 오류를 제거하는 데 도움이됩니다.
Option Explicit를 사용하여 동일한 코드를 다시 실행 해 보겠습니다. 절차를 시작하기 전에 Option Explicit를 입력합니다.
Option Explicit Sub VarientVariable() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
이제 코드를 실행하면 (도구 모음에서 F5 또는 실행 버튼을 누름) 컴파일러 오류가 발생합니다.
VBA를 추가 할 수 있습니다. 명시 적 옵션 자동으로.
VB 편집기에서 도구-> 옵션-> '변수 선언 필요'를 선택합니다.
지금 명시 적 옵션 새 모듈을 삽입하거나 새 매크로를 기록 할 때마다 자동으로 추가됩니다.
노트 : Option Explicit는 기존 VBA 코드에 추가되지 않습니다. 필요한 경우 수동으로 추가해야합니다.
변수에 값 할당
같음 기호 (=)를 사용하여 변수에 값을 할당 할 수 있습니다. Excel에서 셀을 참조하는 경우 Range 함수를 사용해야합니다.
아래 코드를 참조하십시오.
Sub varValue() Dim var1 As Integer var1 = 10 Range('C1:C14').Value = var1 MsgBox var1 End Sub
위의 예에서 var1은 (=)를 사용하여 직접 값 10을 저장하는 변수이며 Range 함수는 Excel 셀 C1 ~ C14에 10 인 var1 값을 입력하는 데 도움이됩니다.
변수의 범위
프로그램의 모든 변수에는 정의 된 범위가 있습니다. 이 범위는 변수가 보이는 영역, 즉 변수를 사용할 수 있거나 사용할 수없는 모듈 또는 함수를 프로그램에 알려줍니다.
VBA에는 변수에 대해 정의 된 세 가지 유형의 범위가 있습니다.
- 절차 수준 범위
- 개인 모듈 수준 범위
- 공개 모듈 수준 범위
절차 수준 범위
프로 시저, 즉 Sub 또는 Function에서 정의 된 변수는 변수 만 사용할 수 있습니다. 다른 절차에서는 볼 수 없습니다.
예:
Option Explicit Sub ProcScope() Dim msg As String vartext = 'Varible is visible only inside this Sub' MsgBox vartext End Sub Sub VarNotVisible() MsgBox vartext End Sub
위의 코드를 실행하면 첫 번째 Sub의 경우 msgbox가 적절한 결과를 반환하지만 두 번째 Sub의 경우 컴파일러 오류가 발생합니다. 정점 변수는 1에 대해서만 표시되기 때문에성서브가 아닌 2nd. Option Explicit를 사용 했으므로 2에서 변수를 정의하지 않으면 컴파일러 오류가 발생합니다.nd보결.
개인 모듈 수준 범위
이러한 변수는 정의 된 모듈의 모든 프로 시저에서 사용할 수 있습니다. 기본적으로 없음 비공개로 범위가 지정됩니다. 그러나 더 나은 가독성을 위해 비공개를 추가하는 것이 좋습니다.
동일한 예를 고려해 보지만 프로 시저 외부에서 변수를 선언합니다.
Option Explicit Private vartext As String ‘ Dim vartext As String can also be used Sub PrivateScope() vartext = 'Varible is visible to all procedures' MsgBox vartext, ,”Result from Sub1” End Sub Sub VarIsVisible() MsgBox vartext, ,”Result from Sub2” End Sub
실행 후에는 두 프로 시저가 오류없이 적절한 결과를 반환하는 것을 볼 수 있습니다. 명확한 이해를 위해 msgbox에 올바른 제목을 추가했습니다.
공개 모듈 수준 범위
이러한 유형의 변수는 프로젝트의 모든 절차와 모든 모듈에서 볼 수 있습니다. 2 개의 모듈을 삽입합니다. (시트를 마우스 오른쪽 버튼으로 클릭하고 삽입-> 모듈).
하나의 모듈에 아래 코드를 입력하십시오.
Option Explicit Public vartext As String Sub PrivateScope() vartext = 'Varible is visible to all modules' MsgBoxvartext, , 'Result from Sub1' End Sub
두 번째 모듈에 아래 코드를 입력하십시오.
Option Explicit Sub VarIsVisible() MsgBoxvartext, , 'Result from Sub2' End Sub
결과는 아래와 같습니다.
실용적인 예를 고려하고 모든 범위를 더 잘 이해합시다.
첨부 된 것은 위 코드에 대한 참조 파일입니다.
정적 변수
일반적으로 변수의 값은 프로 시저 호출에서 프로 시저 끝까지 만 유지됩니다. 프로 시저 실행이 종료되면 값이 유지되지 않습니다.
예를 들면 , 위 코드에서 firstNo와 secondNo의 값은 프로 시저가 끝나 자마자 제거되고, 다음에 코드를 실행하면 firstNo와 secondNo는 코드에 정의 된 것과 같은 값을 얻습니다.
그러나 정적 변수는 실행 후에도 변수의 값을 유지하는 변수입니다. 정적 변수는 하위 또는 함수 내에서만 허용됩니다.
비 정적 변수가있는 아래 코드를 고려하십시오.
Option Explicit Sub staticVariable() Dim count As Integer count = count + 1 Debug.Print count End Sub
F5를 누를 때마다 결과적으로 1 개만 얻습니다.
이제 변수를 정적으로 선언하겠습니다.
Option Explicit Sub staticVariable() Static count As Integer count = count + 1 Debug.Print count End Sub
코드를 실행할 때마다 (F5) Static 변수가 그 값을 유지했기 때문에 결과는 1,2,3 등과 같은 카운트 값이 증가합니다.
노트 : 정적 변수는 도구 모음에서 재설정 단추를 누르거나 통합 문서를 닫을 때까지 값을 유지합니다.
상수 변수
이름에서 알 수 있듯이 이러한 변수의 값은 프로그램 실행 중에 변경할 수 없습니다. 상수가 선언되면 수정하거나 새 값을 할당 할 수 없습니다.
상수 선언은 프로 시저 내에서 또는 모듈 수준 (모든 프로 시저 이상)에서 수행 할 수 있습니다.
Option Explicit Sub constantVariable() Const SpeedLimitOfcar As String = '90kmph' Dim myCarSpeed As String myCarSpeed = '70kmph' If myCarSpeed > SpeedLimitOfcar Then MsgBox 'overspeed: Reduce the speed' Else MsgBox 'Within the limit: Always drive below : ' & SpeedLimitOfcar End If End Sub
상수 값을 변경하려고하면 컴파일 오류가 발생합니다.
Option Explicit Sub ChangeConstantVariable() Const SpeedLimitOfcar As Integer = 90 SpeedLimitOfcar = SpeedLimitOfcar + 10 MsgBox SpeedLimitOfcar End Sub
자주 묻는 질문
Q # 1) VBA에서 공용 변수를 설정하는 방법은 무엇입니까?
대답: 프로 시저 시작 전에 공용 변수가 선언됩니다. 변수를 선언하는 동안에는 public 키워드를 사용해야합니다.
Public Total_Marks As Integer
Q # 2) 프로 시저 외부에서 선언 할 수없는 변수 유형은 무엇입니까?
대답: 정적 변수는 VBA의 프로 시저 외부에서 선언 할 수 없으며 컴파일 오류가 발생합니다.
Q # 3) VBA에서 변수를 선언하는 방법은 무엇입니까?
대답: Dim 키워드는 변수를 선언하는 데 사용됩니다. Dim은 Dimension을 나타냅니다.
Dim variablename As Datatype
Q # 4) VBA에서 셀에 변수 값을 할당하는 방법은 무엇입니까?
대답: Range 기능을 사용할 수 있습니다.
var1 = 10
Range (“C1 : C14”). Value = var1
Q # 5) VBA의 변수는 무엇입니까?
대답: 변수는 컴퓨터 저장소의 값에 대한 자리 표시 자와 같습니다. 변수는 다양한 값을 보유 할 수 있으며 해당 값은 코드 실행 중에 변경 될 수 있습니다. 모든 변수에는 변수 이름을 사용하여 이름이 있어야하며 컴퓨터는 해당 변수에 할당 된 값을 가져옵니다.
Q # 6) VBA에서 변수를 선언해야합니까?
대답: 선언은 VBA에서 선택 사항입니다. 변수를 선언하지 않고 프로 시저에서 직접 사용하는 경우이를 암시 적 선언이라고합니다. 코드 오류를 방지하고 가독성을 높이려면 변수를 명시 적으로 선언하는 것이 좋습니다.
Q # 7) VBA에서 여러 변수를 선언하려면 어떻게해야합니까?
대답: 하나의 선언문에서 여러 변수를 선언 할 수 있습니다. 하나의 As 절에서 쉼표로 구분 된 변수 이름을 지정하기 만하면됩니다.
소프트웨어 테스트의 샘플 테스트 케이스
Dim FirstNo, SecondNo As Integer
하나의 선언문에 다른 변수를 지정할 수도 있습니다. 각 변수는 변수 이름 부분 뒤에 As 절에 지정된 데이터 유형을 사용합니다.
Dim a, b As Single, c, d As Double, e As Integer, f As String
Q # 8) VBA에서 dim과 private 사이에는 언제 차이가 없나요?
대답: 개인 모듈 수준 범위를 선언하는 경우 변수를 dim 또는 private으로 선언하는 것 사이에는 차이가 없습니다. 기본적으로 없음 비공개로 범위가 지정됩니다. 그러나 더 나은 가독성을 위해 비공개를 추가하는 것이 좋습니다.
Q # 9) 모듈 수준 변수 란 무엇입니까?
대답: 모듈 수준 변수는 비공개 또는 공개 일 수 있습니다. 전용 변수는 해당 모듈의 모든 프로 시저에 사용할 수 있으며 다른 모듈에는 표시되지 않습니다. 공용 변수는 프로젝트의 모든 모듈에있는 모든 프로 시저에 표시됩니다.
결론
변수는 모든 프로그래밍 언어에서 중요합니다. 이 튜토리얼에서는 변수가 무엇인지, 프로그램에서 변수를 선언하고 사용하는 방법을 살펴 보았습니다. 또한 명시 적 선언의 구현을 강제하는 Option Explicit 메서드를 탐색했습니다.
사용자가 변수를 사용할 수있는 코드 부분을 결정하는 데 도움이되는 다양한 유형의 변수 범위에 대해 논의했습니다. 변수의 값을 유지하는 데 도움이되는 정적 변수와 변수의 값을 변경되지 않은 상태로 유지하는 데 도움이되는 상수 변수의 사용법을 배웠습니다.
=> 처음부터 VBA를 배우려면 여기를 방문하십시오