Excel VBA 기초

Excel VBA - Like 연산자

kwangpal 2023. 12. 16. 23:11
반응형

Like 연산자

Like 연산자는 If문에서 대상이 특정 패턴에 맞는지 판단하는데 사용할 수 있다.

 

와일드카드 문자 활용 (?, *)

와일드카드 문자로 사용할 수 있는 것은 ?* 다. ?는 패턴 내에서 하나의 문자를 대체할 수 있고, *는 패턴 내에서 자리에 상관없이 모든 문자를 대체할 수 있다.

 

A1 셀에 입력된 문자가 A로 시작하고 C로 끝나는 3자리 문자인 경우에만 A2 셀에 True를 출력하고, 아닌 경우 False를 출력한다면 코드를 다음과 같이 사용하면 된다.

Sub Use_Like()

    If [A1] Like "A?C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

위 코드에서 A1 셀에 ABC나 ATC를 입력하면 True를 출력하게 된다.

 

만약 Like 연산자를 사용하지 않고 패턴을 비교하려면 다음과 같이 복잡한 코드를 사용해야 한다.

 

Sub Use_Like()

    If Left([A1], 1) = "A" And Right([A1], 1) = "C" And Len([A1]) = 3 Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

왼쪽에서 첫번째 문자는 A 이고 오른쪽에서 첫번째 문자는 C이고 문자의 길이는 3글자면 True를 출력하라는 건데, 이렇게 해도 같은 기능을 수행할 수는 있지만 Like 를 사용하는 것이 훨씬 간편하다.

 

가운데 들어가는 문자가 2개 이상일 경우에도 사용할 수 있다. 다음 코드는 가운데 들어가는 문자가 2개일 경우이다.

 

Sub Use_Like()

    If [A1] Like "A??C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

와일드카드 문자가 가운데에만 있어야 하는 것은 아니다. 맨 앞이나 뒤에 와도 된다.

 

Sub Use_Like()

    If [A1] Like "?A?C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

 

A1 셀에 입력된 문자가 길이에 상관없이 A로 시작하고 C로 끝나는 경우에만 A2 셀에 True를 출력하고, 아닌 경우 False를 출력한다면 코드를 다음과 같이 사용하면 된다. ? 대신 * 사용한다.

 

Sub Use_Like()

    If [A1] Like "A*C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

연속 문자 패턴 ([ ])

?를 사용할 경우 아무 문자나 그 자리에 있기만 하면 True를 출력하는데, 좀 더 제한을 두고싶다면 대괄호를 사용하면 된다. A1 셀에 입력된 문자가 A로 시작하고 C로 끝나는 3자리 문자인데 가운데 문자가 C, D, E, F 인 경우에만 A2 셀에 True를 출력하고, 아닌 경우 False를 출력한다면 코드를 다음과 같이 사용하면 된다.

 

Sub Use_Like()

    If [A1] Like "A[CDEF]C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

위 코드에서 CDEF는 연속된 알파벳이므로 다음과 같이 나타낼 수도 있다.

 

Sub Use_Like()

    If [A1] Like "A[C-F]C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

연속된 알파벳이 아닌 경우에는 다음과 같이 쓰면 된다.

 

Sub Use_Like()

    If [A1] Like "A[XTYB]C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

주의할 점은 영문자의 대소문자를 가려서 사용해야 한다는 것이다. 위 코드에서 A1 셀에 AXC를 넣으면 A2 셀에 True가 출력되지만 axc, AXc, axC 등을 넣으면 False가 출력된다.

 

가운데 들어가는 문자가 2개 이상일 경우에도 사용할 수 있다.

 

Sub Use_Like()

    If [A1] Like "A[B-D][G-J]C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

 

1개의 문자가 입력되어 있는데 영어 대문자인지 판단하려면 다음과 같이 사용할 수도 있다. 

 

Sub Use_Like()

    If [A1] Like "[A-Z]" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

한글에도 사용할 수 있다. 1개의 문자가 입력되어 있는데 초성이 ㄱ인지 판단하려면 다음과 같이 사용하면 된다.

 

Sub Use_Like()

    If [A1] Like "[가-깋]" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

숫자에도 사용할 수 있다. A1 셀에 입력된 숫자가 3에서 7 사이인지 판단하려면 다음과 같이 사용하면 된다.

 

Sub Use_Like()

    If [A1] Like "[3-7]" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

 

숫자 패턴 (#)

위에서 대괄호를 사용하는 경우에도 숫자 패턴을 판단할 수 있긴 한데, 특정 범위 안에 있는 숫자를 판단하는 경우에 사용하면 되는 것이고 그 외에는 # 를 사용하면 된다. # 하나당 1개의 숫자를 매칭할 수 있다.

 

A1 셀에 입력된 숫자가 010으로 시작하는 핸드폰 번호인지 판단하려면 다음과 같이 사용할 수 있다.

 

Sub Use_Like()

    If [A1] Like "010-####-####" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

서울 지역번호 02로 시작하는 전화번호인지 판단하려면 위 코드에서 "010-####-####" 대신  "02-####-####" 를 사용하면 된다. (이 경우에는 02-###-#### 도 추가해야 하려나?)

 

Like 연산자 부정

위에서는 특정 패턴에 맞는 경우를 판단하는 것을 예로 들었는데, 이를 부정하여 특정 패턴에 맞지 않는 경우를 판단할 수도 있다. Not을 사용하면 된다.

 

Sub Use_Like()

    If Not [A1] Like "A[XTYB]C" Then
        [A2] = "False"
    Else
        [A2] = "True"
    End If
                
End Sub

 

대괄호 안에 ! 를 사용할 수도 있다. 가운데 오는 문자가 X,T, Y, B만 아니면 되는 경우 다음과 같이 사용하면 된다.

 

Sub Use_Like()

    If [A1] Like "A[!XTYB]C" Then
        [A2] = "True"
    Else
        [A2] = "False"
    End If
                
End Sub

 

반응형

'Excel VBA 기초' 카테고리의 다른 글

Excel VBA - For Each, Next  (0) 2024.01.02
Excel VBA - Switch  (0) 2023.12.16
Excel VBA - And, Or, Not 연산자  (0) 2023.12.14
Excel VBA - 상수  (0) 2023.12.13
Excel VBA - 파일 저장 형식  (0) 2023.12.13