Like로 조건에 맞는 데이터 추출하기!
『 회사 실무자들이 업무를 처리하다 보면 상품 혹은 거래처 코드가 123-a-11aa와 같은 형태로 부여되고 있다는 것을 알 수 있습니다. 숫자와 영문, 특수문자가 혼합된 코드를 가지고 원하는 부분만 추출하기 위해 엑셀에서는 LIKE매서드를 지원하고 있습니다. 오늘은 VBA에 내장되어 있는 Like를 통해 특정조건에 맞는 데이터를 추출하는 방법에 대해 알아보도록 하겠습니다. 』
VBA의 LIKE문법에 대해 알아보기
VBA에서 Like의 사용문법은 다음과 같습니다.
형태는 같지만 패턴이 다르다는 것에 주의하여야 합니다.
if 문자셀 Like 패턴 then if 문자셀 Like 패턴 then if 문자셀 Like [A-Z] then if 문자셀 Like [a-z] then if 문자셀 Like [가-힣] then if 문자셀 Like [!가-힣] then if 문자셀 Like [0-9] then if 문자셀 Like "A*" then if 문자셀 Like "A?" then if 문자셀 Like "A#" then if not 문자셀 Like "A*" then |
if 문자셀 Like 패턴 then이 기본문법이 되어 "패턴"의 내용에 따라 데이터를 추출해 낼 수 있습니다.
패턴 안에 들어있는 내용들을 하나씩 살펴보도록 하겠습니다.
[A-Z]는 영문의 대문자를 나타내며, [a-z]는 영문의 소문자를 나타냅니다.
[가-힣]는 한글을 나타내며, [! 가-힣]는 한글이 아닌 것을 의미합니다.
[0-9]는 숫자를 나타냅니다.
A*는 앞글자가 "A"인 모든 문자를 나타냅니다.
A? 는 A로 시작하면서 글자수가 1개인 경우를 의미합니다.
A#는 A로 시작하면서 숫자 하나가 추가된 것을 나타냅니다.
if not 문자셀 Like "A*" then는 IF문과 함께 사용되어 부정문으로 사용되었습니다.
그럼 패턴을 가지고 어떻게 사용이 되는지 살펴보도록 하겠습니다.
아래의 예시를 한번 보시죠.
예제를 살펴보면 A2셀에는 "A1"이라는 값이, A3셀에는 "213-ABC574"이 입력되어 있습니다.
위와 같은 셀을 가지고 Like를 어떻게 활용하는지 알아보도록 하겠습니다. 코드는 아래와 같습니다.
Sub like연산자() If Range("A2") = "A1" And Len(Range("a2")) = 2 Then MsgBox "OK" ' A2셀의 값이 "A1"이고 A2셀의 값이 2자리이면 "OK"를 출력 If Range("a2") Like "A#" Then MsgBox "OK" ' A2셀의 값이 "A"로 시작하면 "OK"를 출력 If Range("a3") Like "###-[A-D][A-D][A-D]###" Then MsgBox "OK" ' A3셀의 앞 세자리가 숫자이고 "-"연결되며, 4~6번째 자리가 영문, 7~9번째 자리가 숫자이면 "OK"를 출력 End Sub |
If Range("A2") = "A1" And Len(Range("a2")) = 2 Then MsgBox "OK"는 셀의 값이 두 자리인 경우 OK를 출력하겠다는 내용입니다.
If Range("a2") Like "A#" Then MsgBox "OK"는 셀의 값이 "A"로 시작하는 경우 "OK"값을 출력하겠다는 내용이며,
If Range("a3") Like "###-[A-D][A-D][A-D]###" Then MsgBox "OK"는 순서대로 앞 세 자리는 숫자, 한자리는 "-", 세 자리 영문, 세 자리 숫자로 이루어져 있다면 "OK"값을 출력한다는 내용입니다.
즉, 213-ABC574의 결과를 만족시키는 경우이므로 "OK"로 출력된다는 것입니다. 감이 잡히시나요?
그렇다면 이러한 원리를 통해서 특정 문자의 내용을 추출하여 옮겨보는 작업을 진행해 보도록 하겠습니다.
VBA에서 LIKE를 사용하여 코드 분리하기.
Like를 사용하여 원하는 내용을 추출 후 "B2"셀에 추출된 내역을 출력하는 프로시저를 생성해 보도록 하겠습니다.
Sub blank() Dim i As Long Dim lt As String For i = 1 To Len(Range("a2")) ' 1부터 "a2"셀의 문자의 갯수인 12까지 반복 If Mid(Range("a2"), i, 1) Like "[가-힣]" Then ' "a2"셀의 값이 1부터 12까지의 글자 위치의 1글자(A, 1, -, 가, 3, 4, 5, 나, 다, Q, A, E 순서대로)가 한글이면 lt = lt & Mid(Range("a2"), i, 1) ' It변수에 순서대로 담는다. End If Next If Len(lt) Then Range("b2") = lt ' It변수에 담긴 한글(가나다)를 b2셀에 입력 End Sub |
For문을 사용할 예정이기 때문에 i변수를 Long타입으로, 글자 하나하나를 변수에 담아내기 위해 lt를 String변수로 선언하였습니다.
For i = 1 To Len(Range("a2"))은 1부터 "a2"셀의 문자의 개수인 12까지 반복하겠다는 의미입니다.
Len함수는 글자수를 카운팅 하는 함수이기 때문에 A1-가345나다QAE의 글자수인 12를 리턴합니다.
따라서 For문을 이용하여 1~12까지 반복을 하게 됩니다.
If Mid(Range("a2"), i, 1) Like "[가-힣]" Then은 a2셀에 담겨있는 12개의 글자를 순서대로 하나씩 한글인지를 비교하게 되며, 만약 한글일 경우에는 lt = lt & Mid(Range("a2"), i, 1)을 이용하여 lt변수에 차곡차곡 쌓아 둡니다.
총 12번의 반복이 완료되었다면 IF문과 For문을 순서대로 종료시킵니다.
마지막으로 변수 lt에 담겨있는 한글을 B2셀에 뿌려준 후 프로시저를 종료하게 되는 것입니다.
결과를 살펴보시면 B2셀에 "가나다" 값이 들어간 것을 확인할 수 있습니다.
마치며,
지금까지 VBA에서 Like를 사용하는 방법에 대해 알아보았습니다.
주로 사용되는 내용은 아니지만 작은 기능들이 쌓이면 루틴업무를 효율적으로 처리할 수 있는 강력한 무기가 됩니다.
루틴업무만 단축시키더라도 훨씬 더 많은 일들을 효율적으로 처리할 수 있으며, 보다 더 발전한 나를 발견할 수 있습니다.
나의 능력을 더 발전시키기 위한 투자라고 생각하면서 내 것이 될 때까지 반복 또 반복하시기 바랍니다.
▼▼▼함께 읽으면 좋은 글▼▼▼
고생 끝에 낙이 온다.
댓글