정규식을 이용한 파씽문제이다.
문제에서 한자리 통화기호 + 금액 / 할인율을 파씽하여 그 결과를 도출하는 문제이다.
처음 본인이 했던것은 1그룹(통화기호 + 금액) / 2그룹(할인률) 이렇게 하여 통화기호를 분리하여 계산후 다시 통화기호를 붙히는 작업을 하였는데, 1그룹(통화기호) + 2그룹(금액) + 3급액(할인률) 이렇게 분리하는게 코드가 좀 더 깔끔할 것 같아 수정하였다.
|
패턴설명은 이렇다.
(1그룹 : 숫자앞에 임의의 한자리)+(2그룹:숫자열) [.+? : 의미없는 문자] +(3그룹: 1자리부터3자리의 숫자와 퍼센트기호)
With Mat(0)
rngA(1, -2) = .submatches(0) & .submatches(1) '= 통화 기호 + 통화
rngA(1, -1) = .submatches(2) '= 할인율
rngA(1, 0) = .submatches(0) & Format(CLng(.submatches(1)) * (1 - rngA(1, -1)), "0.00")
End With
분리된 숫자들은 문자화되기 때문에 Clng로 String에서 Long 타입으로 변경해줘야 계산이 된다.
이렇게 계산된 금액을 소수점 2자리까지 표현하는 Format(숫자,"0.00") 까지 해주면 결과물처럼 나오게 된다.
더보기
Sub test()
Dim rngAll As Range: Set rngAll = Range([f6], [f6].End(4))
Dim rngA As Range
Dim Reg As New RegExp
Dim Mat As Object
Dim Num
With Reg
.Pattern = "(.\d+).+?(\d{1,3}%)"
.Global = True
End With
For Each rngA In rngAll
Set Mat = Reg.Execute(rngA)
rngA(1, -2) = Mat(0).submatches(0)
rngA(1, -1) = Mat(0).submatches(1)
rngA(1, 0) = Left(rngA(1, -2), 1) & Format(CLng(Right(rngA(1, -2).Value, Len(rngA(1, -2)) - 1)) * (1 - rngA(1, -1)), "0.00")
Next rngA
End Sub
오늘도 맛있는 코드 냠냠!!
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #46 [ 모래시계 알고리즘 ] (0) | 2023.03.19 |
---|---|
[기초방] VBA 100제 #45 [ 반구성하기 ] (0) | 2023.03.19 |
[기초방] VBA 100제 #43 [ 조합 정렬하기 ] (0) | 2023.03.16 |
[기초방] VBA 100제 #42 [ 고급필터 ] (0) | 2023.03.16 |
[기초방] VBA 100제 #41 [ 테이블 정렬하기 ] (0) | 2023.03.15 |
댓글