더보기
Option Explicit
Sub 기초19()
Dim Reg As Object: Set Reg = CreateObject("Vbscript.regexp")
Dim rngX As Range: Set rngX = [c5]
Application.ScreenUpdating = False
Do Until IsEmpty(rngX)
rngX.Copy rngX.Next '= 출연자의 이름을 D열에 복사
With Reg
.Pattern = "\(\d+\)" '= (숫자) 를 패턴으로
.Global = True
If .test(rngX.Next) Then rngX.Next = .Replace(rngX.Next, "") '= 일치패턴을 없애라
Application.DisplayAlerts = False '= 경고 표시 해제
rngX.Next.TextToColumns comma:=True '= D열에 복사된 출연자를 콤마로 텍스트 나누기
Application.DisplayAlerts = False '= 경고 표시 설정
End With
Set rngX = rngX.Offset(1)
Loop
Call 기초19_1(Reg, rngX)
Application.ScreenUpdating = True
MsgBox "완료"
End Sub
'= 패턴설명 : \,? 콤마가 없거나 하나 / .? 아무 문자나 없거나 하나
'= 패턴설명 : ( 엑사남\(.+?\) ) 1그룹 / 엑사남(숫자)
'= 패턴설명 : ( ) 은 그룹을 뜻하고 \( \d+ \) 은 (숫자) 를 뜻한다. 특수문자는 \ 과 함께 사용
.Pattern = "\,?.?(" & Cells(14, 3 + i) & "\(.+?\))"
더보기
Sub 기초19_1(Reg As Object, rngX As Range)
Dim Mat As Object
Dim i&, str$
Set rngX = [c15]
Do Until IsEmpty(rngX)
For i = 1 To 5
With Reg
'= 패턴설명 : ,? 콤마가 없거나 하나 / .? 아무 문자나 없거나 하나
'= 패턴설명 : ( 엑사남\(.+?\) ) 1그룹 / 엑사남(숫자)
'= 패턴설명 : ( ) 은 그룹을 뜻하고 \( \d+ \) 은 (숫자) 를 뜻한다. 특수문자는 \ 과 함께 사용
.Pattern = "\,?.?(" & Cells(14, 3 + i) & "\(.+?\))"
.Global = True
If .test(rngX) Then
Set Mat = .Execute(rngX)
If Replace(Mat(0), ",", "") = Mat(0).submatches(0) Then
'= 매치값에 콤마가 있음 제거한 값과 서브매치한값이 같으면
'= 예를 들면 ,엑사남(34) = 엑사남(34) / 엑사남(34) < > 큰엑사남(34)
str = Split(Mat(0).submatches(0), "(")(1)
Cells(rngX.Row, 3 + i) = Split(str, ")")(0)
'= 괄호를 제거한 후 숫자만 출력
End If
End If
End With
Next i
Set rngX = rngX.Offset(1)
Loop
End Sub
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #21 [ 반별 총점/평균 구하기 ] (0) | 2023.01.26 |
---|---|
[기초방] VBA 100제 #20 [ 패턴별 색상칠하기 ] (0) | 2023.01.26 |
[기초방] VBA 100제 #18 [ 이름별 카테고리 나열하기 ] (0) | 2023.01.17 |
[기초방] VBA 100제 #17 [ CHR + ASC ] (0) | 2023.01.17 |
[기초방] VBA 100제 #16 [ 이벤트 + 빈셀삭제하기 ] (0) | 2023.01.16 |
댓글