VB(A)

[정규식] 엑셀 여러줄 속에서 원하는 텍스트 구하기

당근쨈 2016. 10. 7. 08:22

split으로 해도 되는데

정규식으로 해도 쉽게 끝낼 수 있는데

꾸역꾸역 Replace를 사용해보고 싶어서.


정규식 설명이 잘 되어있는 블로그

- http://blog.naver.com/asaph16/220465400967


------------------------------------------------------------------------------------------------------------------------------



블루(^^)

그레이(^^)

 

이렇게 한 셀에 있는 걸

 

색상II블루(^

색상II그레이(^

 

이렇게 결과로 받고 싶습니다 두번째"^" 앞 까지요


------------------------------------------------------------------------------------------------------------------------------



Option Explicit
Function plusColor$(str$)
 
    Dim M As Object
    Dim v, i%
    Dim v2$()
    
    v = Split(str, vbLf)    '줄 바꿈 기준으로 텍스트 나움
    ReDim v2(UBound(v)) 'v2 재선언
    
    With CreateObject("vbscript.regexp")    '정규식 선언
        .Global = False '일치하는 패턴이 나오면 바로 멈춤
        .Pattern = "(.*?\^.*?)\^"   '패턴. 두번째 ^까지의 패턴
        
        If .test(str) Then  '일치하는 패턴이 있으면
        
            For i = 0 To UBound(v)
            
                Set M = .Execute(v(i))  '정규식 실행
                v2(i) = .Replace(M.Item(0), "색상||$1"'색상||을 앞에 삽입. 핵심
            
            Next i
            
            v = Join(v2, vbLf)  '텍스트가 변경된 배열을 줄바꿔서 합체
            plusColor = v
        
        Else
            plusColor = "-" '일치하는 패턴이 없으면 - 출력
            
        End If
        
    End With
        
End Function
 
cs