본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #13 [ 정규식으로 계산하기 ]

by 일등미노왕국 2023. 1. 15.

이번 문제는 숫자와 사칙계산 부호만을 이용하여 계산하는 문제이다. 

숫자만 가져오는 구문은 like문처럼 [0-9] 이렇게 하거나 정규식 패턴은 \d 이렇게 하면 되는데,

 \d 는 1234 라는 숫자가 있으면 1만 선택이 된다.  여러자리의 숫자를 선택하려면 \d+ 이렇게 하면된다. 

 

이 문제를 해결하기 위해서 본인이 사용한 패턴은 이렇다.

.Pattern = "[^\d++-×÷]"

숫자가 아니고 사칙연산 기호가 아닌 모든것을 패턴으로 잡고 삭제하기 위함이다.

부정기호인 ^ 의 사용으로 선택된 패턴들이 반전되는것을 볼 수 있다.

우리가 사용하는 사칙연산 기호중 곱하기와 나누기는 컴퓨터가 이해하는 기호와는 다르기 때문에 변경을 해줘야 한다.

If .test(rngX) Then
            
    str = Replace(.Replace(rngX, ""), "×", "*")
    str = Replace(str, "÷", "/")
    rngX.Next = Application.Evaluate(str)      

End If

이 구문을 넣어서 사용하면 이 문제를 해결할 수 있다.

정규식을 반드시 익혀서 본인의 무기로 꼭 만드길 바란다.

더보기
Sub 기초방13()

     Dim Reg As Object: Set Reg = CreateObject("Vbscript.regexp")
     Dim rngX As Range: Set rngX = [b3]
     Dim str$
     
     Do Until rngX = ""
    
        With Reg
        
            .Pattern = "[^\d++-×÷]"                         '= 정규식패턴
            .Global = True
                                                               
            
            If .test(rngX) Then
            
                str = Replace(.Replace(rngX, ""), "×", "*")  '= 사칙연산을 위한 기호변경
                str = Replace(str, "÷", "/")
                rngX.Next = Application.Evaluate(str)        '= 수식 그대로 계산
                
            End If
               
                
        End With
          
        Set rngX = rngX.Offset(1)
        
   Loop
     
     
End Sub

 

 

기초방13.xlsm
0.02MB

댓글