본문으로 바로가기

12 엄마도 따라 할 수 있는 Excel VBA - VBA에서 날짜 사용하기


업무를 하다 보면 날짜를 가지고 뭘 할 일이 꽤나 많다. 오늘은 VBA에서 '날짜'를 다루는 법을 알아보자.


날짜를 다루려면 일단 오늘 날짜를 받아오는 법을 알아야 하고,

셀에서 날자를 추출하는 법을 알아야 하고,

추출한 날짜를 더하거나 빼거나 하는 법을 알아야 한다.

아래 예제를 통해 감을 잡아보자.


예제)

아래와 같이 입고일 출고일이 있다. 출고일은 입고일보다 1주일(7일) 후이다. 오늘 날짜와 비교하여 오늘보다 입고일이 늦은 경우 입고일에 +7일 해서 출고일에 입력할 수 있도록 하고 싶다.

ex)B2셀이 1월 31일데 2월 7일로 바꾸고 싶음


위에 조건에 맞는 예제를 한번 따라해 보자.

아래와 같이 날짜가 입력 되어 있다.


데이터는 아래 것을 복사해서 따라해 보자.

데이터

담당자 입고일 출고일
김경록 2013-01-31  
김선민 2013-01-22  
김지후 2013-02-12  
김연수 2013-02-12  
이지원 2013-02-12  
류승희 2013-01-22  
이지원 2013-01-01  
김윤희 2012-12-11  
강경희 2012-11-20  
신혜정 2012-10-30  
김재경 2013-01-22  
이재우 2013-02-12  
한지영 2013-03-05  
정신혜 2013-03-26  
강경리 2013-04-16  
박수정 2013-05-07  
안수진 2013-05-28  
류현주 2013-06-18  


소스코드

Sub 날짜다루기()

For i = 2 To 19
    If DateTime.DateValue(DateTime.Now) < Range("B" & i).Value Then
        Range("C" & i).Select
        Selection.Value = Range("B" & i).Value + 1
    End If
Next


End Sub

위와 같이 입력하고 돌려보자.


소스코드 설명

이 소스에는 앞에 배웠던 3가지 기능이 종합적으로 들어가 있다.

반복문 for, 조건문 if, 글자 연결하기 & 이렇게 3가지 기능이 들어 있는데,

잘 이해가 가지 않으면 앞의 글을 읽어보시기 바란다.

2013/01/09 - [Excel VBA/VBA 배우기] - 08 엄마도 따라 할 수 있는 Excel VBA - 반복문 배우기(For Next문)

2013/01/11 - [Excel VBA/VBA 배우기] - 09 엄마도 따라 할 수 있는 Excel VBA - IF문(조건문) 배우기

2013/01/09 - [Excel VBA/VBA 배우기] - 05 엄마도 따라 할 수 있는 Excel VBA - 글자 연결하기 &

일단 오늘 날짜를 알아야 한다. 오늘 날짜를 나오게 하는 메소드는 DateTime.Now 이다. 그런데 Now 속성을 사용하면 시간이 같이 나온다. 날짜만 나오게 하려면 DateTime.DateValue() 메소드를 사용해서 DateTime.Now에서 날짜만 뽑아낸다.

그리고 특정 셀에서 날짜 값을 가지고 와서 비교해 주어야 하는데 이때는 If문을 쓴다. 그리고 for문과 글자 연결하기 &을 이용해서 여러 셀의 내용을 바꿀 수 있다.


결과 화면



완료.

질문은 oceanfog1@gmail.com 으로 하시면 된다.




신고

댓글을 달아 주세요

  1. 나그네 2013.02.04 22:49 신고

    김경록님 정말 감사합니다. 여기서 공부를 한 덕분에 회사에서 아주 파워풀한 엑셀 매크로를 만드는데 많은 도움이 되었습니다.

    • BlogIcon KyeongRok Kim 2013.02.05 08:56 신고

      도움이 되셨다니 저도 기쁩니다. 저도 파워풀한 엑셀 코드를 한번 보고 싶네요. 가능하시다면 이메일로 한번 보내주시겠어요? ㅎㅎ

    • 나그네 2013.02.05 21:44 신고

      아.. 그게 대외비 정보를 많이 담고 있어서...
      보여 드리기가 힘드네요 ㅠ
      또 다른 코드 만들어 볼 생각인데 잘 만들어 지면 그건 공유하도록 하겠습니다 ^^

  2. BlogIcon KyeongRok Kim 2013.02.05 22:27 신고

    ㅎㅎ네 알겠습니다.

  3. 영권 2014.01.29 10:53 신고

    VBA 초보예요.
    정말 엄마도 따라할수 있을정도로 쉽고 재미있게 잘 준비해주셔서
    항상 감사한 마음으로 공부하고 있습니다. 고마워요 경록님.

  4. 코번 2016.12.22 17:51 신고

    저도 너무 감사하게 공부하고있습니다
    포문까지 배우니 슬슬 실무에도 쓸만한 케이스가 나오네요

  5. 코번 2016.12.22 18:01 신고

    select/ selection을 쓰시는 이유가 있나요?
    포문 안에 바로 아래와 같이 range 대 range로 연결하면 속도는 더 빠를것 같은데요 (아주 근소한 차이지만..)

    If DateTime.DateValue(DateTime.Now) < Range("B" & i).Value Then
    Range("C" & i) = Range("B" & i).Value + 1

    • 춘춘 2017.09.19 13:52 신고

      가독성을 위해 일부러 그런거 아닐까요?
      포스팅 성격자체가 프로그래밍 언어에 익숙치 않은 사람들을 위한 것 같아요

  6. 하요 2017.10.18 12:05 신고

    궁금한데요 +1은 왜해주나요? 일주일 후인데...
    그리고 date()만 쓸수는 없나요? 엑세스에선?
    강의 너무 좋아요 1급 실기준비하고 있는데 개념정리 확실히 되네요 감사합니다