회사 생존기/엑셀 VBA로 생존하기

Like로 조건에 맞는 데이터 추출하기!

택이형. 2023. 4. 11.

 

『 회사 실무자들이 업무를 처리하다 보면 상품 혹은 거래처 코드가 123-a-11aa와 같은 형태로 부여되고 있다는 것을 알 수 있습니다. 숫자와 영문, 특수문자가 혼합된 코드를 가지고 원하는 부분만 추출하기 위해 엑셀에서는 LIKE매서드를 지원하고 있습니다. 오늘은 VBA에 내장되어 있는 Like를 통해 특정조건에 맞는 데이터를 추출하는 방법에 대해 알아보도록 하겠습니다. 』

 

 

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문과 함께 사용되어 부정문으로 사용되었습니다.


 

그럼 패턴을 가지고 어떻게 사용이 되는지 살펴보도록 하겠습니다.

아래의 예시를 한번 보시죠.

 

<Like 예시>
<Like 예시>

 

예제를 살펴보면 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"값을 출력한다는 내용입니다.

 

&lt;3가지 결과 모두 OK&gt;
<3가지 결과 모두 OK>

 

즉, 213-ABC574의 결과를 만족시키는 경우이므로 "OK"로 출력된다는 것입니다. 감이 잡히시나요?

그렇다면 이러한 원리를 통해서 특정 문자의 내용을 추출하여 옮겨보는 작업을 진행해 보도록 하겠습니다. 

 


VBA에서 LIKE를 사용하여 코드 분리하기.

 

 

 

&lt;코드분리 예제&gt;
<코드분리 예제>

 

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셀에 "가나다" 값이 들어간 것을 확인할 수 있습니다.

 

&lt;예제 결과&gt;
<예제 결과>

 


마치며,

지금까지 VBA에서 Like를 사용하는 방법에 대해 알아보았습니다.

주로 사용되는 내용은 아니지만 작은 기능들이 쌓이면 루틴업무를 효율적으로 처리할 수 있는 강력한 무기가 됩니다.

루틴업무만 단축시키더라도 훨씬 더 많은 일들을 효율적으로 처리할 수 있으며, 보다 더 발전한 나를 발견할 수 있습니다.

나의 능력을 더 발전시키기 위한 투자라고 생각하면서 내 것이 될 때까지 반복 또 반복하시기 바랍니다.

 

 

▼▼▼함께 읽으면 좋은 글▼▼▼

 

VBA로 엑셀 데이터 필터기능 적용하기!

『 수많은 raw데이터 중에서 내가 원하는 부분만 걸러서 보기 위해서 엑셀의 필터기능을 많이 사용하고 계십니다. 필터기능 역시 VBA를 통해 구현이 가능한데요. 원하는 기준으로 필터 적용 후 필

lst914.tistory.com

 

 

VBA로 로우 데이터 정렬하기(1개의 기준으로 정렬, 2개이상의 기준으로 정렬)

『 엑셀작업을 할 때 가장 많이 시간이 소용되는 것은 데이터를 원하는 형태로 정리하는 것인데요. 주로 엑셀의 정렬기능을 이용하여 데이터를 가공하곤 합니다. 하지만 매번 바뀌는 로우데이

lst914.tistory.com

 

 

VBA 반복문 1탄(for~next 사용하기)

『 오늘은 VBA 반복문에 대해 알아보려고 하는데요. 반복문은 반복적인 작업을 대신해주는 만능키라고 할 수 있어요. 반복문은 지정한 횟수만큼, 혹은 무한으로 사용된 코드를 반복하게 만들어

lst914.tistory.com

 

 

VBA 반복문 2탄(For each ~ Next 사용하기)

『 For ~ next문과 For each ~ next문만 자유롭게 사용가능하다면 업무자동화에 한 발짝 더 다가섰다고 할 수 있습니다. 그만큼 사용빈도가 높고 중요한 내용이라고 할 수 있습니다. 업무자동화를 위해

lst914.tistory.com

 

 

고생 끝에 낙이 온다.

댓글