본문 바로가기

Excel VBA/VBA 배우기

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

728x90

11 엄마도 따라 할 수 있는 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
    	nowDate = Format(Date, "yyyy-mm-dd")
        If nowDate < 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문과 글자 연결하기 &을 이용해서 여러 셀의 내용을 바꿀 수 있습니다.

 

결과 화면

완료.

 

 

 

728x90
  • 나그네 2013.02.04 22:49

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

    • KyeongRok Kim 2013.02.05 08:56 신고

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

    • 나그네 2013.02.05 21:44

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

  • KyeongRok Kim 2013.02.05 22:27 신고

    ㅎㅎ네 알겠습니다.

  • 영권 2014.01.29 10:53

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

  • 코번 2016.12.22 17:51

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

  • 코번 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

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

  • 하요 2017.10.18 12:05

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

  • john park 2018.06.21 08:43

    전 왜 소스코드 붙여 넣기로 해도 아무 변화도 없는걸까요? ㅜ_ㅜ.

    • KyeongRok Kim 2018.06.21 09:45 신고

      시트에 저 데이터가 있어야 합니다

    • 아리잠직1 2020.02.03 12:00

      If nowDate < Range("B" & i).Value Then

      윗구문에서 "<"를 --> ">"로 바꾸면 됩니다. 즉 nowDate(현재값)이 Bi값보다 클때만 실행되니 당연히 부호가 반대어야 되는거 같아요.

  • 궁그믜 2019.05.26 20:16

    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

    를 복사해서 붙여넣어도 반응이 없습니다. 혹시 버전업 되면서 뭔가 바뀌었나요?

    • KyeongRok Kim 2019.05.27 15:04 신고

      Sub 날짜다루기()
      For i = 2 To 19
      nowDate = Format(Date, "yyyy-mm-dd")

      If nowDate < Range("B" & i).Value Then
      Range("C" & i).Select
      Selection.Value = Range("B" & i).Value + 1
      End If
      Next
      End Sub

      제보 감사드려요 vba가 바꼈네요

  • Lpla 2019.11.17 01:24 신고

    msgbox로 nowDate를 하면 오늘 날짜 (2019-11-17)가 나오는데
    IF문에서 "B" & i값이 1900-01-01이든, 2050-01-01이든 항상 Range("B" & i).Value 가 크다고 나옵니다.
    nowDate 자리에 대신 "2019-11-17" 로 적으면 정상적으로 작동하는데
    nowDate를 쓰면 제대로 비교를 못합니다.
    뭐가 문제일까요?

  • 수정 2020.03.16 11:17

    출고일(c2:c19)에 아무것도 안뜨거나 셀이 비어있어야 하는데 전부 뜨시는분 !

    nowDate = Format(Date, "yyyy-mm-dd")부분에서 ★Format(Date, "yyyy-mm-dd")★ 이 부분을
    ★now()★ 로 바꿔보세요. 정상작동 합니다

    • 이명수 2021.10.23 16:46

      dim nowdate as date
      를 맨앞에 넣으면 되는것 같아요

    • 감사합니다. 2021.12.09 17:54

      수정님 말씀처럼 now()로 바꾸거나
      or
      now()로 안바꾸더라도 이명수님 말씀처럼 앞에 dim 정의 넣어주거나

      둘 중에 하나 하면 정상작동하네요. 잘 배워갑니다.

  • 이렇게 해야 2021.06.11 12:43

    Sub 날짜다루기()

    For i = 2 To 19
    nowDate = Date
    'MsgBox (i)
    If nowDate > Range("B" & i).Value Then
    'MsgBox (Range("b" & i))
    Range("C" & i).Select
    Selection.Value = Range("B" & i).Value + 1
    End If
    Next
    End Sub
    '위에 if문에 부등호가 반대로 되어 있네요..

    • KyeongRok Kim 2021.06.13 11:00 신고

      입고일이 오늘보다 늦은 경우
      ex)
      오늘 : 2021-06-13
      입고일 : 2021-06-14

      nowDate < Range("B" & i).Value
      이렇게 된 경우 기존 입고일에 +1을 해주는 로직을 구현해서 부등호 방향을 위와 같이 썼습니다.

      제가 놓친게 무엇일까요?

블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.