VBA 정규식

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 4월 29, 2023

이 튜토리얼에서는 VBA에서 정규식을 사용하는 방법을 보여드립니다.

정규식은 무엇인가요?

정규식은 문자를 표현하는 공식을 의미합니다. 정규식은 다른 문자열에서 일치하는 패턴을 찾는 데 사용할 수 있는 일련의 문자로 구성된 패턴입니다. VBA에서 정규식을 사용하려면 RegExp 객체를 사용해야 합니다.

[A-C]와 같은 패턴은 문자열에서 A부터 C까지의 대문자를 검색하고 일치하는 항목이 있는지 확인하는데 사용할 수 있습니다. 정규식 패턴에는 고유한 구문이 있으며 문자 또는 문자열을 사용하여 만들 수 있습니다.

일치하는 문자열 찾기

다음 표는 정규식 패턴을 작성할 수 있는 구문을 보여줍니다.

패턴 구문 설명 패턴 예제 일치하는 항목
. 줄바꿈을 제외한 모든 단일 문자를 일치하는 항목으로 간주합니다 f.n fan, fon, f@n, fwn
[characters] 괄호[] 사이에 있는 단일 문자들중 하나라도 일치하면 일치한다고 간주합니다 [fn] fan(f와 n이 포함되어 있으므로 일치)
[^characters] 괄호[] 사이에 있지 않은 단일 문자가 있으면 일치한다고 간주합니다 [^fn] fjn(f와 n이 있지만 j가 있으므로 일치)
[start-end] 괄호[] 사이에 있는 범위에 해당하면 일치한다고 간주합니다. [1-5] 45(4와 5가 범위 내에 있으므로 일치)
\w 영문자와 숫자, 밑줄은 일치하지만 공백 문자는 일치하지 않다고 간주합니다 \w “,c.”(c가 조건에 포함되므로 일치)
\W 영문자와 숫자, 밑줄이 아닌 모든 문자를 일치하다고 간주합니다 \W “bb@bb”(@가 조건에 포함되므로 일치)
\s 공백과 탭과 같은 모든 공백 문자와 일치하다고 간주합니다 \s “This is”(공백이 조건에 포함되므로 일치)
\S 공백을 제외한 모든 문자와 일치하다고 간주합니다 \S “T h”(T와 h가 조건에 포함되므로 일치)
\d 0~10의 숫자와 일치하다고 간주합니다 \d “a7h”(7이 조건에 포함되므로 일치)
\D 숫자를 제외한 모든 문자와 일치하다고 간주합니다 \D “47j”(j가 조건에 포함되므로 일치)
\ 검색 조건으로 특수문자를 입력할때 사용합니다 \.  “59.pQ”(.이 조건에 포함되므로 일치)
\t 탭 문자와 일치하다고 간주합니다 \t 탭 문자가 있을 경우 일치
\r 캐리지 리턴과 일치하다고 간주합니다 \r 캐리지리턴(vbCr)이 있을 경우 일치
\n 줄바꿈(vbNewLine)과 일치하다고 간주합니다 \n 줄바꿈 문자가 있을 경우 일치

수량자

수량자를 사용하여 패턴을 문자열과 일치시킬 횟수를 지정할 수 있습니다.

수량자 설명 패턴 예제 일치하는 항목
* 0개 이상 항목을 일치하다고 간주합니다 fn*a  fna, fa, fnna, fnnna, fnfnnna
+ 1개 이상 항목을 일치하다고 간주합니다 fn+a fna, fnna, fnfnna
? 1개 이하 항목이 일치하다고 간주합니다 fn?a fa, fna
{n} 해당 패턴이 n번 나온다고 간주합니다 d\W{4} Would match “d….” in “d….&5hi”
{n,} 해당 패턴이 적어도 n번 나온다고 간주합니다 d\W{4,} Would match “d….&” in “d….&5hi”
{n,m} 해당 패턴이 n에서 m번 사이만큼 나온다고 간주합니다 d\W{1,8} Would match “d….&&&&” in “d….&&&&5hi”

그룹화

그룹화 또는 캡처를 사용하면 패턴을 사용하여 문자열의 일부를 추출할 수 있습니다.

패턴 설명 패턴 예제 일치하는 항목 및 추출된 항목
(expression) 괄호 안의 패턴을 그룹화하여 문자열 일부를 추출합니다. (\W{4})  “1@@@@1jlmba”에서 “@@@@” 를 추출합니다.

VBA에서 정규식을 사용하는 방법

VBA에서 정규식을 사용하려면 먼저 VBE 편집기에서 참조를 설정해야 합니다. VBE 편집기에서 도구 > 참조 > Microsoft VBScript Regular Expressions 항목을 선택합니다.

다음은 RegExp 객체의 속성입니다:

  • Pattern – 검색할 문자열의 패턴입니다.
  • IgnoreCase – True인 경우 검색할 문자열에서 대/소문자를 무시합니다.
  • Global – True이면 문자열에서 패턴과 일치하는 모든 항목을 찾습니다. False이면 첫 번째 일치 항목만 찾습니다.
  • MultiLine – True이면 줄 바꿈에 걸쳐 일치하는 패턴 검색을 수행합니다.

다음은 RegExp 객체의 메서드입니다:

  • Test – 문자열에서 패턴을 검색하고 일치하는 항목이 발견되면 True를 반환합니다.
  • Replace – 패턴의 발생 부분을 새로운 문자열로 바꿉니다.
  • Execute – 문자열에 대한 패턴의 일치 항목을 반환합니다.

문자열에 대해 패턴이 일치하는지 테스트하기

Test 메서드를 사용하여 패턴이 입력 문자열과 일치하는지 확인할 수 있습니다. 일치하는 항목이 발견되면 결과는 True입니다. 다음 코드는 문자열에 대해 패턴을 테스트하는 방법을 보여줍니다:

Sub RegexTestingAPattern()

Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp

regexOne.Pattern = "f....a"

stringOne = "000111fjo88a8"

Debug.Print regexOne.Test(stringOne)

End Sub

결과는 다음과 같습니다:

문자열에서 해당되는 패턴을 다른 문자열로 바꾸기

Replace 메서드를 사용하여 문자열에서 일치하는 패턴의 첫 번째 항목만 바꾸거나 문자열에서 일치하는 패턴의 모든 항목들을 바꿀 수 있습니다. Global이 False로 설정되어 있으면 첫 번째 인스턴스만 바뀝니다. 다음 코드는 문자열에서 해당되는 패턴을 바꾸는 방법을 보여줍니다:

Sub RegexReplacingAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp

regexOne.Pattern = "번호는"
regexOne.Global = False
stringOne = "번호는 718901"

Debug.Print regexOne.Replace(stringOne, "새로운 번호는")
End Sub

결과는 다음과 같습니다:

위에서 사용한 문자열의 숫자 부분만 바꾸려면 다음 코드를 사용합니다:

Sub RegexReplacingAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp

regexOne.Pattern = "[^\D]+"
regexOne.Global = False
stringOne = "번호는 718901"

Debug.Print regexOne.Replace(stringOne, "777192")
End Sub

결과는 다음과 같습니다:

문자열에서 특정 패턴과 일치하는 모든 항목을 바꾸려면 Global 값을 True로 설정합니다. 다음 코드는 문자열에서 -A1289C-과 일치하는 모든 항목을 다른 문자로 대체하는 방법을 보여줍니다:

Sub RegexReplacingEveryInstanceOfAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp

regexOne.Pattern = "\W\A\d+C\W"
regexOne.Global = True
stringOne = "ABC-A1289C-ABC-A1289C-ABC"

Debug.Print regexOne.Replace(stringOne, "IJK")
End Sub

문자열에서 일치하는 패턴 표시하기

Execute 메서드를 사용하여 문자열 내에서 일치하는 패턴을 모두 추출할 수 있습니다. 다음 코드는 문자열에서 일치하는 패턴을 모두 표시하는 방법을 보여줍니다:

Sub RegexMatchingAndDisplayingAPattern()
Dim stringOne As String
Dim regexOne As Object
Dim theMatches As Object
Dim Match As Object
Set regexOne = New RegExp

regexOne.Pattern = "A.C"
regexOne.Global = True
regexOne.IgnoreCase = True
stringOne = "ABC-A1289C-ADC-A1289C-AJC"

Set theMatches = regexOne.Execute(stringOne)

For Each Match In theMatches
  Debug.Print Match.Value
Next

End Sub

결과는 다음과 같습니다:

위의 문자열에서 -ADC-만 추출해 보겠습니다. 다음 코드는 문자열에서 -ADC-의 패턴이 포함되어 있는지 확인하고 추출하는 방법을 보여줍니다:

Sub RegexMatchingAndDisplayingAPattern()
Dim stringOne As String
Dim regexOne As Object
Dim theMatches As Object
Dim Match As Object
Set regexOne = New RegExp

regexOne.Pattern = "\-\A.C\-"
regexOne.Global = False
regexOne.IgnoreCase = True
stringOne = "ABC-A1289C-ADC-A1289C-AEC"

Set theMatches = regexOne.Execute(stringOne)

For Each Match In theMatches
  Debug.Print Match.Value
Next

End Sub

정규식은 배우는 데 다소 시간이 걸릴 수 있지만, 텍스트 문자열을 식별하고 조작하기 위해 필요한 강력한 도구입니다. 또한 프로그래밍 언어 전반에 걸쳐 광범위하게 사용됩니다.

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기