Warning: array_merge(): Argument #1 is not an array in /home/rhaqjffp/html/wp-includes/blocks/shortcode.php on line 31

Warning: array_merge(): Argument #1 is not an array in /home/rhaqjffp/html/wp-includes/blocks/social-link.php on line 45
곰벌레닷컴 – 페이지 3 – 곰벌레는 느릿느릿~, 곰벌레가 관심있는 자료저장 창고

creative writing questions discovery

프로그래밍 영역에서 말하는 정규표현식 (줄여서 정규식, 영어로는 Regular Expression) 이란 문자열을 특정한 규칙으로 표현한 형식이다. (정규표현식이 무엇인지 잘 모르는 분들은 따로 graduate essay writing services 내용을 참고해보기 바란다.) 

정규표현식을 사용하면 장황한 문자열 속에서 원하는 부분만 뽑아내거나, 주어진 문자열이 형식(예를 들어 이메일 형식)에 맞게 제대로 쓰여져 있는지 검사하는데 있어 상당히 편리하다. 이 포스팅에서는 엑셀에서 정규표현식을 사용하여 원하는 문자열을 추출하는 사용자함수를 소개해 보고자 한다.

정규표현식 문자열 추출 VBA 코드

VBA 사용자함수를 사용하려면 사전에 아래와 같은 코드를 입력해둬야 한다. 먼저 ALT + F11 키를 눌러 VBA Editor 를 연다. 이후에 “모듈” > “삽입” 메뉴를 선택하면 새 창이 열리는데 아래 코드를 복사하여 붙여넣자. (구글링에서 얻어온 코드들을 여기저기 짜깁기 했다.)

Function RegexExecute(r As Range, p As String, Optional g As Boolean = False) As Variant
    On Error GoTo ErrHandler
    
    Dim str As String, ptn As String
    str = CStr(r.Cells(1, 1).Value)
    ptn = CStr(p)
    
    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .IgnoreCase = False
        .MultiLine = False
        .Global = g
        .Pattern = ptn
    End With
    
    If regex.Test(str) Then
        Set matches = regex.Execute(str)
        Dim temp As String
        temp = ""
        For Each Match In matches
            temp = temp & Match
        Next
        RegexExecute = temp
        Exit Function
    End If
    
ErrHandler:
    RegexExecute = CVErr(xlErrNA)
End Function

위 코드를 모듈에 넣었다면 바로 사용할 준비가 된 것이다. 엑셀로 돌아와서 바로 사용자함수를 사용할 수 있다.

정규표현식 사용자함수 예시

= RegexExecute( , "정규표현식", 전체검사여부 )

위 함수식에서 부분은 정규표현식을 적용하고 싶은 문자열이 포함된 셀을 지정하면 되고, 따옴표 안의 정규표현식은 말 그대로 추출하거나 검사하고 싶은 대상의 정규식을 적용하면 된다. 세번째인 전체검사여부는 TRUE 혹은 FALSE 값을 지정하며 (FALSE 의 경우 생략 가능), TRUE 의 경우 에서 정규표현식에 해당하는 부분을 모두 찾아내어 그 결과를 보여주며, FALSE 나 생략의 경우 첫번째로 해당하는 부분만 결과를 보여준다.

만일 정규표현식에 해당되는 형식이 검출되지 않는다면 #N/A 에러를 발생시킨다.

다시 예시를 보면 B2 셀에 뭔가 모델명과 같은 문자열이 담겨있는데, [0-9]+ 라는 정규표현식을 사용하였는데 숫자만 추출하란 의미이다. 세번째 인수를 생략한 수식에는 제일 앞 숫자인 “103” 만 표시가 되었으며, 세번째 인수에 TRUE 값을 준 수식에는 모든 숫자를 붙인 결과가 표시되고 있다.

B9 셀에는 이런저런 글과 이메일 주소가 함께 있다. 구글에서 “email regex” 라고 검색만 해도  이메일 형식을 표현한 정규표현식을 구할 수 있다. 그 중 하나를 적용해보았다. (매우 복잡해 보인다.)

또한 주어진 정규표현식에 부합하는 부분이 전혀없는 문자열은 에러를 반환하므로 IFERROR 함수를 통해 주어진 이메일주소 (혹은 핸드폰번호, 주민등록번호 등) 가 정확하게 규정에 맞게 쓰여져 있는지도 검사 할 수 있다.