Excel VBA에서 정규식 사용

Bilal Shahid 2023년6월21일
  1. Microsoft Excel의 정규 표현식
  2. Excel VBA의 정규식 예
  3. 결론
Excel VBA에서 정규식 사용

Visual Basic for Applications는 Microsoft 응용 프로그램에 사용되는 이벤트 기반 프로그래밍 언어입니다. 이를 통해 사용자는 작업을 자동화하고 요구 사항에 따라 여러 기능을 다시 작성할 수 있습니다.

VBA를 사용하면 매크로 형식으로 저장된 몇 가지 코드 문을 사용하여 사용자가 여러 작업을 수행할 수 있습니다. 매크로를 사용하면 사용자가 코드를 반복해서 재사용할 수 있습니다.

Microsoft Excel의 정규 표현식

Microsoft Excel은 대규모 데이터 조작을 허용하는 강력한 응용 프로그램입니다. Microsoft Excel을 사용하면 데이터베이스에서 입력을 받고 데이터를 조작하고 결과를 요약하는 것이 매우 쉽습니다.

정규식(Regex)은 문자열 내의 패턴을 식별하고 일치시키는 데 사용됩니다. Microsoft Excel에서 정규식을 사용하면 데이터를 광범위하게 조작할 수 있습니다.

예를 들어 성별에 따라 데이터 입력을 분할할 수 있습니다. 또한 사용자가 올바른 이메일을 입력했는지 여부도 확인할 수 있습니다.

요컨대, 포맷된 데이터를 확인하고 그에 따라 작업을 수행하는 것은 매우 쉽습니다.

Excel에서 정규식 사용 허용

Microsoft Excel에서 정규식을 사용하려면 "Microsoft VBScript 정규식 5.5"에 대한 VBA 참조를 추가해야 합니다. 다음 단계에 따라 수행할 수 있습니다.

  • Excel에서 개발자 탭을 선택합니다.
  • 코드 리본 섹션에서 Visual Basic 아이콘을 선택합니다.
  • 응용 프로그램용 Microsoft Visual Basic 창의 상단 메뉴에서 도구를 선택합니다.
  • 참조를 선택합니다.
  • Microsoft VBScript 정규식 5.5를 확인하십시오.

이러한 단계를 통해 VBA 코드에서 정규식을 사용할 수 있습니다.

정규식 작성

정규 표현식을 공식화하는 데 도움이 되는 몇 가지 기본 정의가 아래에 언급되어 있습니다.

  1. 범위 언급

    - 기호는 범위를 정의하는 데 사용됩니다. 예를 들어 a-z는 소문자로 된 문자열과 일치합니다.

  2. 하나의 개체 일치

    대괄호 []는 대괄호 안에 언급된 개체 중 하나와 정확히 일치하는 데 사용됩니다. 예를 들어 [wxyz]는 단일 문자(w, x, y 또는 z)와 일치합니다.

  3. 패턴의 1개 또는 0개 발생 일치

    물음표 ? 대괄호 안에 정의된 패턴과 0회 또는 1회 일치합니다. [0-9]? 빈 문자열 또는 하나의 숫자와 일치합니다.

  4. 0개 이상의 패턴 발생 일치

    별표 *는 대괄호 안에 정의된 패턴과 0번 이상 일치합니다. [0-9]*는 빈 문자열 또는 모든 숫자 문자열과 일치합니다.

  5. 하나 이상의 패턴 발생 일치

    더하기 + 기호는 대괄호 안에 정의된 패턴과 한 번 이상 일치합니다. [0-9]+는 적어도 하나 이상의 숫자와 일치합니다.

  6. 패턴의 다양성

    패턴이 여러 번 반복되도록 하려면 중괄호 {}를 사용합니다. 예를 들어:

    6.1. [x]{2}는 두 개의 연속된 소문자 x와 일치합니다. xx와 일치합니다.

    6.2. [x]{1, 3}은 최소 1에서 최대 3번 동안 대괄호에 정의된 패턴과 일치합니다. x, xxxxx와 일치합니다.

  7. OR 연산자

    OR 연산자 | 여러 옵션 간에 일치시킬 수 있습니다. 예를 들어 x|y|z는 옵션 중 정확히 하나와 일치합니다.

  8. NOT 연산자

    NOT 연산자 ^는 대괄호 안에 정의된 패턴과 일치하지 않습니다. 예를 들어 [^a-z]는 소문자와 일치하지 않습니다.

  9. 서로 다른 경기 그룹화

    괄호 ()는 서로 다른 일치 패턴을 그룹화하는 데 사용됩니다. 예를 들어 (^[0-9]{3})([a-z])는 시작 부분에 3개의 숫자가 있고 그 뒤에 소문자가 오는 패턴과 일치합니다.

  10. 고정 패턴

    ^ 연산자를 사용하여 문자열의 시작을 일치시킬 수 있습니다. 예를 들어 ^a 표현식은 문자열이 소문자 'a'로 시작하도록 합니다.

    $ 연산자는 문자열의 끝을 일치시키는 데 사용됩니다. 예를 들어 a$ 표현식은 문자열이 소문자 'a'로 끝나도록 합니다.

정규 표현식의 우선 순위

연산자마다 우선 순위가 다르며 다음 표에 설명되어 있습니다.

주문하다 이름 대표
1 괄호 ( )
2 승수 ? + * {m,n} {m, n}?
시퀀스 및 앵커 abc ^ $
4 교대 |

문자 약어

몇 가지 미리 정의된 문자 약어가 정규식에 사용됩니다. 사전 정의된 문자 약어 중 일부는 아래 표에 언급되어 있습니다.

약어 정의
\d 한 자리를 나타내려면
\D 숫자가 아닌 문자를 나타내려면
\w 단어 문자를 나타내려면
\W 단어가 아닌 문자를 나타내려면
\s 공백 문자를 나타내려면
\S 공백이 아닌 문자를 나타내려면
\n 새 줄을 나타내려면

Excel VBA의 정규식 예

다음 예제에서는 대문자에 대한 셀 값을 확인하고 빈 문자열로 바꿉니다. 즉, 모든 대문자가 일치되고 입력 문자열에서 삭제됩니다.

코드를 매크로로 실행

다음 코드는 A1을 셀 참조로 사용하고 A1에 배치된 문자열에서 모든 대문자를 삭제합니다. 결과는 Msgbox에 표시됩니다.

예를 들어 입력 문자열 aAbBcC는 메시지 상자에서 abc로 변경됩니다.

Private Sub test()
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String
    Dim rangeref As Range

    Set rangeref = ActiveSheet.Range("A1")

    If pattern <> "" Then
        cellVal = rangeref.Value

        With exp
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If exp.test(cellVal) Then
            MsgBox (exp.replace(cellVal, replace))
        Else
            MsgBox ("Not matched")
        End If

    End If
End Sub

범위를 통한 루프

첫 번째 예제에 사용된 동일한 코드는 For 루프를 추가하여 특정 범위에서 매크로를 실행하도록 변경할 수 있습니다. 루프는 정의된 범위 내의 각 셀에 대해 실행되고 각 셀의 출력을 메시지 상자에 표시합니다.

Private Sub test()
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String
    Dim rangeref As Range

    Set rangeref = ActiveSheet.Range("A1:A5")

    For Each cell In rangeref
        If pattern <> "" Then
            cellVal = cell.Value

            With exp
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .pattern = pattern
            End With

            If exp.test(cellVal) Then
                MsgBox (exp.replace(cellVal, replace))
            Else
                MsgBox ("Not matched")
            End If

        End If
    Next
End Sub

함수 만들기

다음 코드는 문자열에서 대문자 항목을 삭제하는 셀 내 함수를 만드는 데 사용할 수 있습니다. 코드는 첫 번째 예제에서 사용한 코드와 유사합니다.

함수로 변환하기 위해 약간의 변경이 이루어졌습니다.

Function cellTest(rangeref As Range) As String
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String


    If pattern <> "" Then
        cellVal = rangeref.Value

        With exp
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If exp.test(cellVal) Then
            cellTest = exp.replace(cellVal, replace)
        Else
            cellTest = "Not matched"
        End If

    End If
End Function

A1DdEeleTte가 포함된 cellTest(A1)를 사용하는 경우 함수는 delete를 반환합니다.

결론

생성할 수 있는 정규식의 수에는 제한이 없습니다. 필요한 일반 형식을 식별할 수 있으면 이에 대한 정규식을 만들고 이를 기반으로 모든 문자열을 테스트합니다.

이를 통해 다양한 기능을 기반으로 데이터를 나눌 수 있습니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub