보통 이러한 패턴문제는 Like 와 정규식으로 풀수 있다.
https://www.youtube.com/watch?v=sHg8o_RUcag
엑사남님이 이미 잘 정리해서 유튜브에 올려놓으셨으니 기초방분들은 학습하기길 바란다.
이런 패턴의 문제는 준빠님이 올려주신 대로 패턴에 일치하는 값들을 하나씩 붙혀가며 최종적인 문자를 출력하면 된다.
본인은 이번에는 like 구문의 부정형인 ' ! ' 와 정규식의 부정형인 ' ^ ' 과 Replace 조합으로 풀어보려한다.
더보기
Option Explicit
Sub 기초방_12_like()
Dim rngAll As Range: Set rngAll = [a3:a7]
Dim rngA As Range
Dim rngX As Range: Set rngX = [c3]
Dim strLike
Dim i&, S&
Dim str$
strLike = Array("[!가-힣]", "[!a-zA-Z]", "[!0-9]") '= 구분자
For Each rngA In rngAll '= 변환 원본 데이터
For S = 0 To UBound(strLike) '= 구분자 순환
str = rngA '= 초기값
For i = 1 To Len(str) '= 문자 길이 만큼 순환
If Mid(rngA, i, 1) Like strLike(S) Then str = Replace(str, Mid(str, i, 1), " ")
'= 패턴 불일치분자 [ 공백 ] 으로 변환
Next i
rngX = Replace(str, " ", "") '= 모든 공백들을 없애라
Set rngX = rngX.Offset(0, 1) '= 옆으로 이동 / 다음 패턴 적용 위해
Next S
Set rngX = rngX.Offset(1, -3) '= 다음 행 첫 열로 이동
Next rngA
End Sub
더보기
Sub 기초방_12_정규식()
Dim Reg As Object: Set Reg = CreateObject("Vbscript.regexp") '= 정규식 선언
Dim rngX As Range: Set rngX = [a3]
Dim strPattern
Dim i&
strPattern = Array("[^가-힣]", "[^a-zA-Z]", "[^0-9]") '= 정규식패턴
Do Until rngX = "" '= rngX 가 빈셀일때까지 순환
For i = 0 To UBound(strPattern) '= 패턴을 순환해라
With Reg '= 정규식 선언
.Pattern = strPattern(i) '= 패턴을 하나씩 불러옴
.Global = True
If .test(rngX) Then '= 패턴이 일치하면
rngX(1, 3 + i) = .Replace(rngX, "") '= 출력해라
End If
End With
Next i
Set rngX = rngX.Offset(1)
Loop
End Sub
일단 특수한 패턴으로 값을 도출하기 보다는 정형화된 패턴으로 하나씩 공부해가며 실력을 쌓아가길 추천한다.
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #14 [ 이벤트 필터링하기 ] (0) | 2023.01.15 |
---|---|
[기초방] VBA 100제 #13 [ 정규식으로 계산하기 ] (0) | 2023.01.15 |
[기초방] VBA 100제 #11 [ 영역과 조건에 따른 숫자채우기 ] (0) | 2023.01.07 |
[기초방] VBA 100제 #10 [ 데이터 영역 재설정하기 ] (0) | 2023.01.06 |
[기초방] VBA 100제 #9 [ 데이터 영역 선택하기 ] (0) | 2023.01.05 |
댓글