xls - 엑셀VBA에서 정규식 사용하기 연습
엑셀VBA에서 정규식 사용하기 연습
입력폼에서 정규식을 사용하면 코드를 간결하게 만들수 있다. 고 하지만, 음 귀찮다. 간단한 것부터 해보자.
먼저 VBE 편집기의 도구 > 참조 > Microsoft VBScript Regular Expressions 를 활성화 시키자.

정규식 object를 생성해야한다. 여기서는 re1이라는 이름으로 정규식 object를 생성했다.
Set re1 = New RegExp
생성된 re1 object 안에 pattern과 옵션을 설정한다.
Pattern : 검색할 문자열의 패턴을 정해주는 필수항목
IgnoreCase : 검색할 문자열에서 대/소문자 구분 - true인 경우, 무시
Global : 패턴과 일치하는 전체항목을 찾을지, 첫번째 항목만 찾을지 결정 - true인 경우, 모든 항목 검색
MultiLine : True인 경우, 줄바꿈을 무시하고 전체 서치
패턴 구문
아래와 같이 설정한 경우, 공백 전체를 검색하게 된다.
With re1
.Pattern = "\s"
.Global = True
end with
test
아래 코드로 공백 여부를 확인해 본다.
re1을 정규식 Object로 만들면, 아래 메쏘드 중 하나를 실행할 수 있다.
Execute : 패턴을 실행하며 결과값을 객체에 담는다. 하나씩 값을 꺼낼 수 있다.
Replace : 패턴에 일치하는 값을 검색해서 인수로 입력한 값으로 대체한다.
Test : 패턴을 찾아서 일치하는 것이 있는지 결과값을 리턴 한다.
이를 대상 텍스트에 적용해보면, 아래와 같이 공백 포함 여부를 확인할 수 있다.
Private Sub regTest1()
' 테스트 대상 텍스트
Dim string1 As String
string1 = "my name is Hello World"
Set re1 = New RegExp
' re1 : 공백이 있는지 확인
With re1
.Pattern = "\s"
.Global = True
end with
're1 - test method 사용 예시
If re1.Test(string1) Then
Debug.Print string1 & " - 공백확인 : yes"
Else
Debug.Print string1 & " - 공백확인 : no"
End If
End Sub
' Log>> my name is Hello World - 공백확인 : yes
replace
replace 메쏘드를 통해 패턴과 일치하는 내용을 일괄 변경할 수 있다.
아래 코드는 특정 텍스트를 replace 하는 예시이다.
Private Sub rg2()
Dim originalText As String
Dim replaceText As String
Dim re2 As Object
Set re2 = New RegExp
With re2
.Pattern = "the number is "
.Global = False
End With
originalText = "the number is 010-0000-0000"
replaceText = "my phone number is "
Debug.Print re2.Replace(originalText, replaceText)
End Sub
' log>> my phone number is 010-0000-0000
execute
execute를 통해 새로운 객체에 결과값을 받아서 호출할 수 있다.
아래 코드는 숫자를 골라낸 예시이며, String 타입으로 받아오게된다.
Private Sub rg3()
Dim originalText As String
originalText = "the number is 010-1234-4567"
Dim re3 As Object
Set re3 = New RegExp
With re3
.Pattern = "[^\D]+"
.Global = True
End With
Set re3Result = re3.Execute(originalText)
For i = 0 To re3Result.Count - 1
Debug.Print re3Result(i)
Next i
End Sub
' log>> 010
' log>> 1234
' log>> 5678
아씨… 귀찮아..
여기까지만 하자. 끝.