ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [VBA/Array] Not Not Array 로 배열원소 확인하기
    코딩/vba 2023. 4. 1. 14:43
    728x90

    배열 확인: 배열의 존재와 원소의 존재

    배열의 존재 확인

    배열이 존재하는 지는 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

    댓글

Designed by Tistory.