수색…
비고
운영자는 다음 순서로 평가됩니다.
- 수학 연산자
- 비트 연산자
- 연결 연산자
- 비교 연산자
- 논리 연산자
우선 순위가 일치하는 연산자는 왼쪽에서 오른쪽으로 평가됩니다. 괄호 (
및 )
를 사용하여 식을 그룹화하면 기본 순서를 재정의 할 수 있습니다.
수학 연산자
우선 순위 순서대로 나열 :
토큰 | 이름 | 기술 |
---|---|---|
^ | 지수 계산 | 왼쪽 피연산자를 오른쪽 피연산자의 값으로 올린 결과를 반환합니다. 멱지수가 반환하는 값은 나눌 값 유형에 관계없이 항상 Double 입니다. 계산을 수행 한 후에 결과를 가변 유형으로 강제 변환합니다. |
/ | 구분 1 | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 결과를 반환합니다. 나누기로 반환되는 값은 나누어지는 값 형식에 관계없이 항상 Double 입니다. 계산을 수행 한 후에 결과를 가변 유형으로 강제 변환합니다. |
* | 곱셈 1 | 2 개의 피연산자의 곱을 구합니다. |
\ | 정수 부 | 반올림하여 양측을 반올림 한 후 왼쪽 피연산자를 오른쪽 피연산자로 나눈 정수 결과를 반환합니다. 부서의 나머지는 무시됩니다. 오른쪽 피연산자 (제수)가 0 이면 런타임 오류 11 : 0으로 나누기가 발생합니다. 이것은 모든 반올림이 수행 된 후에 발생합니다. 3 \ 0.4 와 같은 표현식도 0으로 나누기 오류가됩니다. |
Mod | 모듈러스 | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지 정수를 반환합니다. 각 측면의 피연산자는 나누기 전에 정수로 반올림되며 .5는 반올림됩니다. 예를 들어, 8.6 Mod 3 과 12 Mod 2.6 모두 0 됩니다. 오른쪽 피연산자 (제수)가 0 이면 런타임 오류 11 : 0으로 나누기가 발생합니다. 이것은 모든 반올림이 수행 된 후에 발생합니다. 3 Mod 0.4 와 같은 표현식도 0으로 나누기 오류가됩니다. |
- | 뺄셈 2 | 왼쪽 피연산자에서 오른쪽 피연산자를 뺀 결과를 반환합니다. |
+ | 추가 2 | 2 개의 피연산자의 합을 구합니다. 이 토큰은 String 적용될 때 연결 연산자로 취급됩니다. 병합 연산자를 참조하십시오. |
1 곱셈과 나눗셈은 같은 우선 순위를 갖는 것으로 취급됩니다.
2 더하기와 빼기는 같은 우선 순위로 취급됩니다.
연결 연산자
VBA는 2 개의 다른 연결 연산자 인 +
및 &
지원하며 String
유형과 함께 사용하면 똑같은 기능을 수행합니다. 오른쪽 String
은 왼쪽 String
끝에 추가됩니다.
&
연산자가 String
아닌 변수 유형과 함께 사용되면 연결되기 전에 String
암시 적으로 형변환됩니다.
+
연결 연산자는 +
더하기 연산자의 오버로드입니다. +
의 동작은 피연산자의 변수 유형 과 연산자 유형의 우선 순위에 따라 결정됩니다. 두 피연산자 모두 String
의 하위 유형 인 String
또는 Variant
로 입력하면 연결됩니다.
Public Sub Example()
Dim left As String
Dim right As String
left = "5"
right = "5"
Debug.Print left + right 'Prints "55"
End Sub
양쪽는 숫자 형이고 다른 쪽이 경우 String
의 숫자를 강요 할 수 있고, 수학 연산자의 형태 우선 운영자가 부가 연산자로 처리하고, 수치가 추가 발생 :
Public Sub Example()
Dim left As Variant
Dim right As String
left = 5
right = "5"
Debug.Print left + right 'Prints 10
End Sub
이 동작은 특히 Variant
형식이 사용되는 경우 오류를 디버그하기가 어렵 기 때문에 일반적으로 &
연산자 만 병합에 사용해야합니다.
비교 연산자
토큰 | 이름 | 기술 |
---|---|---|
= | 동일 | 왼손 및 오른손 피연산자가 동일하면 True 반환합니다. 이것은 대입 연산자의 오버로드임을 참고하십시오. |
<> | 같지 않음 | 왼손 및 오른손 피연산자가 같지 않으면 True 반환합니다. |
> | 보다 큰 | 왼쪽 피연산자가 오른쪽 피연산자보다 큰 경우 True 반환합니다. |
< | 미만 | 왼쪽 피연산자가 오른쪽 피연산자보다 작은 경우 True 반환합니다. |
>= | 크거나 같음 | 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 True 반환합니다. |
<= | 작거나 같음 | 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 True 반환합니다. |
Is | 기준 자본 | 왼쪽 객체 참조가 오른쪽 객체 참조와 동일한 인스턴스 인 경우 True 반환합니다. Nothing (null 개체 참조)과 함께 사용할 수도 있습니다. 참고 : Is 연산자는 비교를 수행하기 전에 두 피연산자를 Object 로 강제 변환합니다. 한 쪽이 원시 형식 이거나 개체 (비 개체 하위 형식 또는 vtEmpty )를 포함하지 않는 Variant 인 경우 비교는 런타임 오류 424 - "필요한 개체"가됩니다. 두 피연산자가 동일한 객체의 다른 인터페이스 에 속하면 비교 결과가 True 를 반환합니다. 인스턴스 와 인터페이스의 형평성을 테스트해야한다면 ObjPtr(left) = ObjPtr(right) 대신 사용하십시오. |
노트
VBA 구문은 비교 연산자의 "체인"을 허용하지만 이러한 구조는 일반적으로 피해야합니다. 비교는 항상 한 번에 2 개의 피연산자에서만 왼쪽에서 오른쪽으로 수행되며 각 비교 결과는 Boolean
됩니다. 예를 들어, 표현식은 ...
a = 2: b = 1: c = 0
expr = a > b > c
... 어떤 문맥에서 b
가 a
와 c
사이에 있는지 여부를 테스트하는 것으로 읽을 수 있습니다. VBA에서는 다음과 같이 평가됩니다.
a = 2: b = 1: c = 0
expr = a > b > c
expr = (2 > 1) > 0
expr = True > 0
expr = -1 > 0 'CInt(True) = -1
expr = False
Is
와는 다른 비교 연산자는 피연산자로 Object
와 함께 사용되며 Object
의 기본 멤버 의 반환 값에 대해 수행됩니다. 개체에 기본 멤버가 없으면 비교에서 런타임 오류 438 - "개체가 해당 속성 또는 메서드를 지원하지 않습니다"가 발생합니다.
Object
가 초기화되지 않은 경우, 런타임 오류 91 - "Object variable 또는 With 블록 변수가 설정되지 않음"이 비교됩니다.
리터럴 Nothing
이 Is
아닌 다른 비교 연산자와 함께 사용되면 컴파일 오류가 발생합니다. "잘못된 객체 사용".
Object
의 기본 멤버가 다른 Object
경우 VBA는 기본 유형이 반환되거나 오류가 발생할 때까지 각 연속 반환 값의 기본 멤버를 계속 호출합니다. 예를 들어, SomeClass
에 ChildValue
의 기본 멤버가있는 ChildClass
의 인스턴스 인 Value
의 기본 멤버가 있다고 가정 ChildClass
. 비교 ...
Set x = New SomeClass
Debug.Print x > 42
...로 평가됩니다 :
Set x = New SomeClass
Debug.Print x.Value.ChildValue > 42
피연산자 중 하나가 숫자 형이고 다른 피연산자가 하위 유형 String
의 String
또는 Variant
이면 숫자 비교가 수행됩니다. 이 경우 String
을 숫자로 변환 할 수없는 경우 런타임 오류 13 - "형식이 일치하지 않습니다"가 비교 결과로 나타납니다.
두 피연산자가 모두 하위 유형 String
의 String
또는 Variant
인 경우 코드 모듈의 Option Compare 설정에 따라 문자열 비교가 수행됩니다. 이러한 비교는 문자 단위로 수행됩니다. 수치를 포함한 String
의 문자 표현 은 수치의 비교와 같지 않습니다 .
Public Sub Example()
Dim left As Variant
Dim right As Variant
left = "42"
right = "5"
Debug.Print left > right 'Prints False
Debug.Print Val(left) > Val(right) 'Prints True
End Sub
이러한 이유로 String
또는 Variant
변수가 숫자 불일치 비교를 수행하기 전에 숫자로 변환되었는지 확인하십시오.
한 피연산자가 Date
인 경우 다른 피연산자가 숫자이거나 숫자 유형으로 변환 될 수있는 경우 기본 Double 값의 숫자 비교가 수행됩니다.
다른 피연산자가 현재 로캘을 사용하여 Date
로 캐스팅 될 수있는 String
또는 하위 유형 String
Variant
인 경우 String
은 Date
로 캐스팅됩니다. 현재 로캘의 Date
로 캐스팅 할 수없는 경우 런타임 오류 13 - "형식 불일치"비교에서 발생합니다.
Double
값 또는 Single
값과 부울 값을 비교할 때는주의해야합니다. 다른 숫자 형식과 달리 부동 소수점 숫자가 포함 된 비교의 데이터 형식을 Double
로 승격시키는 VBA의 동작으로 인해 0이 아닌 값은 True
로 가정 할 수 없습니다.
Public Sub Example()
Dim Test As Double
Test = 42 Debug.Print CBool(Test) 'Prints True.
'True is promoted to Double - Test is not cast to Boolean
Debug.Print Test = True 'Prints False
'With explicit casts:
Debug.Print CBool(Test) = True 'Prints True
Debug.Print CDbl(-1) = CDbl(True) 'Prints True
End Sub
비트 단위 \ 논리 연산자
VBA의 모든 논리 연산자는 같은 이름의 비트 연산자의 "재정의"라고 생각할 수 있습니다. 기술적으로 항상 비트 연산자로 취급됩니다. VBA의 모든 비교 연산자는 부울을 반환합니다. 부울 은 항상 비트 세트 ( False
) 또는 모든 비트 세트 ( True
)를 갖지 않습니다. 그러나 모든 비트가 True
설정된 값을 처리합니다. 즉, 표현식의 비트 결과를 Boolean
캐스팅 한 결과 (비교 연산자 참조)는 항상이를 논리 표현식으로 처리하는 것과 같습니다.
이 연산자 중 하나를 사용하여 표현식의 결과를 할당하면 비트 결과가 나타납니다. 아래 진리표에서 0
은 False
와 같고 1
은 True
와 같습니다.
And
반환 True
양쪽에있는 표현식로 평가되는 경우 True
.
왼쪽 피연산자 | 오른손 피연산자 | 결과 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Or
반환 True
표현의 양쪽이로 평가되면 True
.
왼쪽 피연산자 | 오른손 피연산자 | 결과 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Not
반환 True
식이로 평가되면 False
과 False
식 평가의 경우에 True
.
오른손 피연산자 | 결과 |
---|---|
0 | 1 |
1 | 0 |
Not
좌측 피연산자가없는 유일한 연산이다. Visual Basic 편집기는 왼쪽 된 인수를 사용하여 식을 자동으로 단순화합니다. 입력하는 경우 ...
Debug.Print x Not y
... VBE는 줄을 다음과 같이 변경합니다.
Debug.Print Not x
유사한 단순화는 Not
대한 왼쪽 피연산자 (표현식 포함)를 포함하는 모든 표현식에 적용됩니다.
Xor
"독점 또는"이라고도합니다. True
이 모두 서로 다른 결과를 얻으면 True
반환합니다.
왼쪽 피연산자 | 오른손 피연산자 | 결과 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Xor
연산자는 논리 연산자처럼 사용할 수 있지만 비교 연산자 <>
와 동일한 결과를 제공하므로 절대 수행 할 이유가 없습니다.
Eqv
"동등성"이라고도합니다. True
이 모두 같은 결과로 평가되면 True
반환합니다.
왼쪽 피연산자 | 오른손 피연산자 | 결과 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
점을 유의 Eqv
함수로서 매우 드물게 사용하지 않는 x Eqv y
훨씬 더 판독 동등 Not (x Xor y)
.
Imp
"암시"라고도합니다. 반환 True
두 피연산자가 동일 또는 두 번째 피연산자 인 경우 True
.
왼쪽 피연산자 | 오른손 피연산자 | 결과 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
Imp
함수는 거의 사용되지 않습니다. 엄지 손가락의 좋은 규칙은 그것이 의미하는 바를 설명 할 수 없다면 다른 구조를 사용해야한다는 것입니다.