본문 바로가기
WeekdayLife/excel

[엑셀VBA] 날짜 계산

by JO_i 2017. 9. 18.

엑셀 날짜 계산

특정 날짜가 있다.

30일,60일 뒤의 날짜가 몇일인지, 메시지 창을 띄워보자,

 

네이버 광고중에 30일단위 계약되는 상품이 있다.

그걸 계산해 보자.

 

 

[1단계]

인풋박스로 날짜를 입력받아서, A1, A2 / B1, B2 / C1, C2 셀에 나오게 했다.

날짜 데이터를 LEFT, RIGHT, MID 함수로 쪼갯다.

꽤나 노가다다.

설계 단계라고 해두자.

Sub brand_search_date()
    start_date = InputBox("브랜드검색 시작 일자를 입력하세요(yyyy-mm-dd)", , "2017-")
    Cells(1, 1) = "브랜드검색 시작일자 : "
    Cells(1, 2) = start_date
    Cells(2, 1) = "브랜드검색 30일 계약종료 일자 : "
    Cells(2, 2) = DateSerial(Left(start_date, 4), Mid(start_date, 6, 2), Right(start_date, 2)) + 29
    Cells(3, 1) = "브랜드검색 60일 계약종료 일자 : "
    Cells(3, 2) = DateSerial(Left(start_date, 4), Mid(start_date, 6, 2), Right(start_date, 2)) + 59  
    ActiveSheet.Columns("a:b").AutoFit    
End Sub

 

* 스크린샷에는 실수로 60일 계약일자를 하루 덜 넣게 계산한 결과가 들어있습니다. 하하하

 

 

 

 

[2단계]

코드를 좀 줄여보자.

CDATE 함수로 LEFT, RIGHT, MID 노가다를 줄였다.

결과는 동일하다.

 

** 인풋함수에 에러 처리는 하지 않았다. 귀찮다.

Sub brand_search_date()
    start_date = InputBox("브랜드검색 시작 일자를 입력하세요(yyyy-mm-dd)", , "2017-")
    Cells(1, 1) = "브랜드검색 시작일자 : "
    Cells(1, 2) = start_date
    Cells(2, 1) = "브랜드검색 30일 계약종료 일자 : "
    Cells(2, 2) = CDate(start_date) + 29
    Cells(3, 1) = "브랜드검색 60일 계약종료 일자 : "
    Cells(3, 2) = CDate(start_date) + 59  
    ActiveSheet.Columns("a:b").AutoFit
End Sub

 

[3단계]

셀 입력 대신, 메시지 박스로 바꾸고, 버튼으로 등록했다.

아무래도, 이게 낫겠다.

Sub brand_search_date()
    start_date = InputBox("브랜드검색 시작 일자를 입력하세요(yyyy-mm-dd)", , "2017-")
    MsgBox ("브랜드검색 시작일자 : " & start_date & vbCr & _
            "브랜드검색 30일 계약종료 일자 : " & Format(CDate(start_date) + 29, "yyyy-mm-dd(aaa)") & vbCr & _
            "브랜드검색 60일 계약종료 일자 : " & Format(CDate(start_date) + 59, "yyyy-mm-dd(aaa)"))    
End Sub

 

 

필요하다면, 더해지는 날짜수를 변수로 넣어서,

또 다른 인풋으로 바꿀수 있도록 하면 좋겠지만,

나는 일단 그럴 필요를 못느겼기 때문에 이걸로 멈춘다.

 

즐거운 하루되세요~