본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #12 [ Like구문 ]

by 일등미노왕국 2023. 1. 10.

보통 이러한 패턴문제는   Like 와 정규식으로 풀수 있다.

https://www.youtube.com/watch?v=sHg8o_RUcag 

엑사남님이 이미 잘 정리해서 유튜브에 올려놓으셨으니 기초방분들은 학습하기길 바란다.

 

이런 패턴의 문제는 준빠님이 올려주신 대로 패턴에 일치하는 값들을 하나씩 붙혀가며 최종적인 문자를 출력하면 된다.

 

본인은 이번에는 like 구문의 부정형인 ' ! ' 와  정규식의 부정형인 ' ^ ' 과 Replace  조합으로 풀어보려한다.

 

더보기
Option Explicit
Sub 기초방_12_like()
   
    Dim rngAll As Range: Set rngAll = [a3:a7]
    Dim rngA As Range
    Dim rngX As Range: Set rngX = [c3]
    Dim strLike
    Dim i&, S&
    Dim str$
    
    strLike = Array("[!가-힣]", "[!a-zA-Z]", "[!0-9]")              '= 구분자
                                                               
    For Each rngA In rngAll                                        '= 변환 원본 데이터

        
        For S = 0 To UBound(strLike)                               '= 구분자 순환
          
          str = rngA                                               '= 초기값
          
              For i = 1 To Len(str)                                '= 문자 길이 만큼 순환
                         
                  If Mid(rngA, i, 1) Like strLike(S) Then str = Replace(str, Mid(str, i, 1), " ")
                                                                   '= 패턴 불일치분자 [ 공백 ] 으로 변환
              Next i
             
                rngX = Replace(str, " ", "")                       '= 모든 공백들을 없애라
                
                Set rngX = rngX.Offset(0, 1)                       '= 옆으로 이동 / 다음 패턴 적용 위해
            
        Next S
        
            Set rngX = rngX.Offset(1, -3)                          '= 다음 행 첫 열로 이동
            
    Next rngA
      
End Sub

더보기
Sub 기초방_12_정규식()
   
    Dim Reg As Object: Set Reg = CreateObject("Vbscript.regexp")  '= 정규식 선언
    Dim rngX As Range: Set rngX = [a3]
    Dim strPattern
    Dim i&
    
    strPattern = Array("[^가-힣]", "[^a-zA-Z]", "[^0-9]")   '= 정규식패턴
    
    Do Until rngX = ""                                      '= rngX 가 빈셀일때까지 순환
    
        For i = 0 To UBound(strPattern)                     '= 패턴을 순환해라
    
            With Reg                                        '= 정규식 선언
            
                .Pattern = strPattern(i)                    '= 패턴을 하나씩 불러옴
                .Global = True
                                                                   
              
                If .test(rngX) Then                         '= 패턴이 일치하면
                
                    rngX(1, 3 + i) = .Replace(rngX, "")     '= 출력해라
                
                
                End If
                    
              End With
              
          Next i
        
          Set rngX = rngX.Offset(1)
   Loop
   
End Sub

일단 특수한 패턴으로 값을 도출하기 보다는 정형화된 패턴으로 하나씩 공부해가며 실력을 쌓아가길 추천한다.

기초방#12 (1).xlsm
0.02MB

댓글