-
[VBA/Array] Not Not Array 로 배열원소 확인하기코딩/vba 2023. 4. 1. 14:43728x90
배열 확인: 배열의 존재와 원소의 존재
배열의 존재 확인
배열이 존재하는 지는 IsArray()로 확인할 수 있다.
VBA의 IsArray() 함수는 인자로 전달된 변수가 배열인지 여부를 판별하는 함수이다.
인자가 배열이면 True를 반환하고, 배열이 아니면 False를 반환한다.예를 들어, 다음과 같이 IsArray() 함수를 사용하여 변수가 배열인지 여부를 판별할 수 있다.
Sub sample_IsArray() Dim arr() As Variant Dim sng As Single Debug.Print IsArray(arr) ' True 출력. Debug.Print IsArray(sng) ' False 출력. End Sub
위 코드에서는 arr 변수가 배열이므로 IsArray(arr)이 True가 되어 첫 번째 Debug.Print 문에서 True가 출력된다.
반면에 sng 변수는 배열이 아니므로 IsArray(sng)이 False가 되어 두 번째 Debug.Print 문에서 False가 출력된다.IsArray() 함수는 배열이 아닌 변수나 Nothing 값을 인자로 전달하면 오류가 발생한다.
따라서, IsArray() 함수를 사용하기 전에 인자의 타입을 확인하는 것이 좋다.배열 원소의 확인
의외로 배열원소를 확인하는 함수는 없다.
배열에 아무것도 없는데 Ubound()나 Lbound()를 쓰면 에러가 난다.대신 VBA에서 Not 연산자를 두 번 사용하여 변수의 존재 여부를 확인할 수 있다.
Not 연산자를 변수 앞에 두 번 사용하면 해당 변수가 Nothing 인지 여부를 확인할 수 있다.Dim fs() as Variant If Not Not fs Then ' Not (Not fs=False): Not (True): False Debug.Print "Something" Else Debug.Print "Nothing" ' False End If
fs 변수가 Nothing이 아닌 경우에는 Not Not fs 표현식이 True가 된다.
따라서 Debug.Print "Something" 문이 실행된다.
그렇지 않은 경우 Not Not fs 표현식이 False가 되므로 Debug.Print "Nothing" 문이 실행된다.
위의 경우는 fs()가 False이므로 Not(Not False)=Not(True)=False가 된다.동일한 내용을 다르게 표현하면 아래의 코드가 된다.
Sub sampel_not_true() Dim arr() As Variant Debug.Print (Not arr) ' -1 출력 If (Not arr) = -1 Then ' -1 = -1 (True) Debug.Print "arr is Nothing" ' True Else Debug.Print "arr is Something" End If End Sub
Sub sampel_not_true_false() Dim arr() As Variant ReDim arr(0) arr(0) = 1 Debug.Print (Not arr) ' -1726011369777 출력 If (Not arr) = -1 Then ' xxx = -1 (False) Debug.Print "arr is Nothing" Else Debug.Print "arr is Something" ' False End If End Sub
Not 연산자를 사용하여 변수가 Something인지 여부를 확인할 수 있으며, 이 때 반환되는 값은 -1이다.
따라서 Not arr = -1은 변수 arr이 Something인지 여부를 확인하는 것이다.위 코드에서는 변수가 Nothing인지 여부를 확인하고, 결과에 따라 메시지를 출력한다.
변수가 Nothing이 아니라면 Not arr = -1 표현식이 True가 되어 "arr is Something"이 출력된다.
그렇지 않은 경우에는 Not arr = -1 표현식이 False가 되어 "arr is Nothing"이 출력된다.728x90'코딩 > vba' 카테고리의 다른 글
VBA/.Value와 .Formula의 차이 (1) 2023.12.21 [VBA/Set 키워드] 개체 참조 Set 키워드 (0) 2023.06.06 [VBA] 영역을 csv로 저장하기 (0) 2023.03.31 [VBA/Tip] Array 사용 시 Lbound() 문제 (0) 2023.03.27 [VBA/Tip] Range().Value 와 For...Next loop의 효율성, 속도 비교 - ChatGPT의 거짓말 (0) 2023.03.27