본문 바로가기

정규식24

[기초방] VBA 100제 #23 [ 제품 나열하기 ] 원래는 21번 문제였는데 노화로 인한 초기 치매인지 문제를 낸 지도 몰라서 23번으로 올린다. 같은 크루분들께 죄송하다. 이번 문제는 [ 제품 : 과일,라면,음료 ] 이러한 형태의 제품구성에서 제품의 각각의 아이템을 제품 : 아이템1 / 제품 : 아이템2 이런식을 파싱하여 조합하는 형태이다. 보통 이런 경우는 [제품 : ]을 Replace로 없애주고 남아있는 아이템들을 콤마로 Split하여 각각을 조합하면 된다. 본인은 이번구문에서 패턴에서 [제품 : ] 을 배제한 Match 값들을 순환하면서 조합하는 형태로 문제를 풀어보려고 한다. 패턴을 설명하면 제/품/공백/콜론/콤마가 아닌 다수의 문자를 선택하라는 뜻이다. 여기서 주의할것은 만일 제품 아이템에 [ 제 또는 품 ] 문자가 들어가면 추출이 불가해진다... 2023. 1. 31.
[기초방] VBA 100제 #20 [ 패턴별 색상칠하기 ] 1번부터 1000 * 20 번까지 3,6,9 가 들어간 숫자를 찾고 그숫자의 갯수가 짝수번이면 컬러인텍스를 8 / 그렇지 않으면 컬러인덱스를 6으로 하는 구문이다. 아래는 같은 크루인 딱총님이 작성한 코드인데 정규식을 모르는 상태에서 몇일만에 놀랍도록 빅스텝 성장을 보여주었다. 딱총님의 내일을 응원한다...물론 우리 무지님과 시훈아빠 그리고 닥터 브레드님도 항상 본인의 문제에 관심을 가져주셔서 감사드린다. 정규식을 안쓰면 숫자들을 순환하며 Mid로 하나씩 걸러서 하나씩 비교해나가야 하지만 정규식을 사용하면 정규식의 Test와 Execute로 간단하게 풀 수 있는 문제이다. 더보기 Option Explicit Sub 기초방20() Dim rngall As Range: Set rngall = [d6].Res.. 2023. 1. 26.
[기초방] VBA 100제 #19 [ 이름별 나열하기 ] 더보기 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 '= 경고 .. 2023. 1. 18.
[기초방] VBA 100제 #13 [ 정규식으로 계산하기 ] 이번 문제는 숫자와 사칙계산 부호만을 이용하여 계산하는 문제이다. 숫자만 가져오는 구문은 like문처럼 [0-9] 이렇게 하거나 정규식 패턴은 \d 이렇게 하면 되는데, \d 는 1234 라는 숫자가 있으면 1만 선택이 된다. 여러자리의 숫자를 선택하려면 \d+ 이렇게 하면된다. 이 문제를 해결하기 위해서 본인이 사용한 패턴은 이렇다. .Pattern = "[^\d++-×÷]" 숫자가 아니고 사칙연산 기호가 아닌 모든것을 패턴으로 잡고 삭제하기 위함이다. 부정기호인 ^ 의 사용으로 선택된 패턴들이 반전되는것을 볼 수 있다. 우리가 사용하는 사칙연산 기호중 곱하기와 나누기는 컴퓨터가 이해하는 기호와는 다르기 때문에 변경을 해줘야 한다. If .test(rngX) Then str = Replace(.Repl.. 2023. 1. 15.