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 코드에서 정규식을 사용할 수 있습니다.
정규식 작성
정규 표현식을 공식화하는 데 도움이 되는 몇 가지 기본 정의가 아래에 언급되어 있습니다.
-
범위 언급
-
기호는 범위를 정의하는 데 사용됩니다. 예를 들어a-z
는 소문자로 된 문자열과 일치합니다. -
하나의 개체 일치
대괄호
[]
는 대괄호 안에 언급된 개체 중 하나와 정확히 일치하는 데 사용됩니다. 예를 들어[wxyz]
는 단일 문자(w, x, y 또는 z)와 일치합니다. -
패턴의 1개 또는 0개 발생 일치
물음표
?
대괄호 안에 정의된 패턴과 0회 또는 1회 일치합니다.[0-9]?
빈 문자열 또는 하나의 숫자와 일치합니다. -
0개 이상의 패턴 발생 일치
별표
*
는 대괄호 안에 정의된 패턴과 0번 이상 일치합니다.[0-9]*
는 빈 문자열 또는 모든 숫자 문자열과 일치합니다. -
하나 이상의 패턴 발생 일치
더하기
+
기호는 대괄호 안에 정의된 패턴과 한 번 이상 일치합니다.[0-9]+
는 적어도 하나 이상의 숫자와 일치합니다. -
패턴의 다양성
패턴이 여러 번 반복되도록 하려면 중괄호
{}
를 사용합니다. 예를 들어:6.1.
[x]{2}
는 두 개의 연속된 소문자x
와 일치합니다.xx
와 일치합니다.6.2.
[x]{1, 3}
은 최소1
에서 최대3
번 동안 대괄호에 정의된 패턴과 일치합니다.x
,xx
및xxx
와 일치합니다. -
OR
연산자OR
연산자|
여러 옵션 간에 일치시킬 수 있습니다. 예를 들어x|y|z
는 옵션 중 정확히 하나와 일치합니다. -
NOT
연산자NOT
연산자^
는 대괄호 안에 정의된 패턴과 일치하지 않습니다. 예를 들어[^a-z]
는 소문자와 일치하지 않습니다. -
서로 다른 경기 그룹화
괄호
()
는 서로 다른 일치 패턴을 그룹화하는 데 사용됩니다. 예를 들어(^[0-9]{3})([a-z])
는 시작 부분에 3개의 숫자가 있고 그 뒤에 소문자가 오는 패턴과 일치합니다. -
고정 패턴
^
연산자를 사용하여 문자열의 시작을 일치시킬 수 있습니다. 예를 들어^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
A1
에 DdEeleTte
가 포함된 cellTest(A1)
를 사용하는 경우 함수는 delete
를 반환합니다.
결론
생성할 수 있는 정규식의 수에는 제한이 없습니다. 필요한 일반 형식을 식별할 수 있으면 이에 대한 정규식을 만들고 이를 기반으로 모든 문자열을 테스트합니다.
이를 통해 다양한 기능을 기반으로 데이터를 나눌 수 있습니다.
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