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

[심화방] VBA_심화_100제 #16 [ 소득세계산기]

by 일등미노왕국 2023. 4. 4.

오늘은 소득세 계산기를 만들어보려고 한다.

 

https://incometax.calculate.co.kr/earned-income-tax-calculator

 

근로소득세 계산기 - 소득세 계산기

전체 공제대상 가족 중 7세 이상 20세 이하 자녀 수 : 0인 1인 2인 3인 4인 5인 6인 7인 8인 9인 10인 11인

incometax.calculate.co.kr

사이트에서 필요한 내용을 선택해서 값을 넣으면 계산해주는 방식이다.

더보기
Sub 소득세계산기()

    Dim Sel As New Selenium.ChromeDriver
    Dim rngAll As Range
    Dim rngA As Range
    Dim Reg As Object: Set Reg = CreateObject("vbscript.regexp")            '= 정규식 선언
    Dim Mat As Object                                                       '= 정규식 일치값
    Dim strUrl$
    Dim strText$, i&
    
    If [b4] >= [b3] Then Exit Sub
    Set rngAll = Union([b9], [d9], [b10], [b12], [d12], [b13], [b15], [d15], [b16])
   
    strUrl = "https://incometax.calculate.co.kr/earned-income-tax-calculator"

    Sel.AddArgument "--headless"                                             '= 헤드리스
    Sel.Start "chrome"                                                       '= 크롬으로 진행
    Sel.Get strUrl                                                           '= Url 이동
    
    Sel.FindElementByCss("#earnedIncomePay").SendKeys [b2]                  '= 월급여 입력
    Sel.FindElementByCss("#earnedIncomeFamily").AsSelect.SelectByValue [b3] '= 부양 가족
    Sel.FindElementByCss("#earnedIncomeChild").AsSelect.SelectByValue [b4]  '= 취학아동
    
    Sel.Wait (2000)                                                         '= 2초 대기
    Sel.FindElementByCss("#cal_earnedIncome").Click                         '= 계산 버튼 클릭
    
    Sel.Wait (2000)                                                         '= 2초 대기
    strText = Sel.FindElementByCss(".result-earned-income-tax").Text        '= 텍스트값 가져오기
    
    With Reg
                   
        .Pattern = "(\d.{4,10})\s원"
        .Global = True
        
        Set Mat = .Execute(strText)                                         '= 가져온 텍스트값 분리하기
        
    End With
       
    For Each rngA In [b9:d16]                                               '= [b9:d19] 을 순환하면서
    
        If Not Intersect(rngA, rngAll) Is Nothing Then                      '= rngall 영역과 교집합을 이루면
        
            rngA = Mat(i).submatches(0)                                     '= 정규식으로 분리한 값들을 할당
        
            i = i + 1                                                       '= 다음을 위해서 i값 +1
        End If
    
    Next rngA
    
End Sub
strText = Sel.FindElementByCss(".result-earned-income-tax").Text
    
Debug.Print strText

직접 실행창에 본 코드를 실행하면 아래와 같이 텍스트 값이 나오게 된다.

우린 여기서 금액만 가져오면 되기 때문에 정규식을 이용하면 금액만 가져올 수 있다.

패턴의 설명은 숫자로 시작하고 다음 임의의 문자(숫자,문자,공백.....)부터 4이상 10이하의 문자로 구성되었으며 + 공백과 [원]이 포함된 패턴이다.

정규식까지 쓰면서 크롤링을 한 이유는 

HTML 구조상 이것을 크롤링하려면 너무나 많은 반복문과 중복 반복문이 사용되어야 하기 때문에 텍스트값을 모두 가져와서 정규식으로 원하는 값만 추출한 것이다.

 

이렇게 추출된 값들을 해당 영역에 집어넣으면 계산기를 완성할 수 있다.

소득세계산기.xlsm
0.03MB

댓글