37번 문제인데 38번으로 표기해서 크루인 [시훈아빠]님한테 혼이났다..
37번으로 알고 가시길...
이문제는 Characters의 매소드중 Insert를 알고 모르고의 차이가 크다..
이걸 Replace로 하게 되면 코드가 많이 지저분해질것이다.
Characters 매소드에 대해선 Characters의 고찰편에서 자세하게 다뤄보도록 하겠다.
With Reg
.Pattern = "[^\s]+"
.Global = True
End With
해당 정규식 패턴은 [ 띄어쓰기가 아닌 모든 문자 ] 라는 의미이다.
With rngA.Characters(idx, Len(Ma))
If .Font.Color = vbRed Then
.Insert ("[" & Ma & "]")
End If
End With
이 구문은 핵심구문으로 정규식 패턴과 일치한 문자의 컬러가 빨강이면 양쪽에 대괄호를 삽입하라는 뜻으로 이걸 모르면 엄청 어려울수 있다. 이또한 이번 경험으로 다음에는 자연스럽게 Insert, Delete, Count가 나오길 바란다.
더보기
Option Explicit
Sub 기초방37()
Dim rngAll As Range: Set rngAll = [c5:g8]
Dim rngX As Range: Set rngX = [c11]
Dim rngA As Range
Dim bln As Boolean
Dim Reg As Object: Set Reg = CreateObject("vbscript.regexp")
Dim Mat As Object, Ma As Object
Dim idx&: idx = 1
Dim str$
[i5:m14].Copy [c5]
Do
For Each rngA In IIf(bln = False, rngAll, rngX)
If bln = False Then
If rngA.Font.Color = vbRed Then rngA = "[" & rngA & "]" '= 37번 문제 해법
Else
With Reg '= 37-1 문제 해법
.Pattern = "[^\s]+"
.Global = True
End With
Set Mat = Reg.Execute(rngA)
For Each Ma In Mat
idx = InStr(idx, rngA, Ma, 1)
With rngA.Characters(idx, Len(Ma))
If .Font.Color = vbRed Then
.Insert ("[" & Ma & "]") '= 필수구문
End If
End With
Next Ma
End If
Next rngA
If bln = True Then Exit Do
bln = Not bln
Loop
End Sub
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #39 [ 문자조합하기 ] (0) | 2023.03.14 |
---|---|
[기초방] VBA 100제 #38 [ 재배치하기 ] (2) | 2023.03.06 |
[기초방] VBA 100제 #36 [ 가로정렬하기 ] (0) | 2023.03.05 |
[기초방] VBA 100제 #35 [ 물품계산하기 ] (0) | 2023.03.05 |
[기초방] VBA 100제 #34 [ 상위5그룹 합계 ] (0) | 2023.03.05 |
댓글