본문 바로가기

엑셀/VBA

VBA 날자 계산 내장 함수 - DateAdd, DatePart, DateDiff

반응형

VBA 내장 함수 중에서 원하는 간격의 날자를 구할 때 사용할 수 있는 DateAdd 함수가 있습니다. 이번에는 이 함수의 사용 방법 등에 대해 알아보고 예제를 통하여 확인해 보겠습니다.

 

VBA 내장 함수 - Date, Time, Now, DateSerial, DateValue

 

VBA 내장 함수 - Date, Time, Now, DateSerial, DateValue

이전 글에서 Val 함수와 Str 함수에 대해 알아보았습니다. 이번엔 시간과 날짜를 반환하는 함수에 대해 알아보겠습니다. VBA 내장 함수 - Val 함수, Str 함수 VBA 내장 함수 - Val 함수, Str 함수 이전 글

mr-johndoe.tistory.com

 

 

 

 

1. DateAdd 함수

  DateAdd 함수는 특정 날자 전후로 일정한 기간만큼 이동하였을 때 날자를 구할 때 많이 사용됩니다. 사용하는 방법은 다음과 같습니다.

 

   DateAdd (interval, number, date)

 

interval에 사용할 수 있는 코드는 다음과 같습니다. 코드를 작성하실 때에는 큰따옴표(" ") 안에 입력하셔야 합니다.

코 드 설 명
yyyy 연도
m
d
w 요일
q 분기
h
n
s
y interval에 입력한 단위에 number만큼 떨어진 날자 계산
ww interval에 입력한 단위에 number만큼 떨어진 주 계산

 

number : 알고자 하는 날자 간격으로 양수일 때는 이후 날자를 구하고, 음수이면 이전 날자를 구합니다.

 

date : 기준 일자를 입력하면 날자 입력시 날자 전후로 #을 사용하여야 합니다.(예 : #2022-1-19#)

 

2. DatePart 함수

  DatePart 함수는 지정한 날자로부터 원하는 값을 반환받을 때 사용합니다. 가령 오늘 날자에서 연도나 월을 반환받을 수 있습니다. 사용 방법은 다음과 같습니다.

 

  DatePart (interval, date, first day of week, first week of year)

 

interval에 사용할 수 있는 코드는 DateAdd 함수 interval에 사용하는 코드와 동일합니다.

 

date : 날자

 

first day of week : interval에 w 또는 ww 코드를 적용할 경우 한 주의 시작을 어떤 요일로 할 것인지 정합니다. 여기에 사용할 수 있는 값은 다음 표에 정리해보았습니다. 기본값은 vbSunday입니다.

내장 상수 시작 요일
vbSunday 1 일요일
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일

 

first week of year : interval에 w 또는 ww 코드를 적용할 경우 한 해의 시작을 어떤 주로 할 것인지 정합니다.

 

 

 

 

3. DateDiff 함수

  DateDiff 함수는 주어진 두 날자의 간격을 알려주는 함수입니다. 사용 방법은 다음과 같습니다.

 

  DateDiff (interval, date1, date2, first day of week, first week of year)

 

interval, first day of week는 DatePart 함수와 동일합니다. (단, w과 ww는 제외)

 

date1, date2 : 간격을 알고 싶은 날자

 

 first week of year : interval에 w 또는 ww 코드를 적용할 경우 한 해의 시작을 어떤 요일로 할 것인지 정합니다. 사용하는 내장 상수는 다음 표와 같습니다.

내장 상수 설 명
vbUseSystem 0 시스템 설정에 따라 적용
vbFirstJan1 1 1월 1일의 주를 첫 주로 계산
vbFirstFourDays 2 최소 4일 이상인 주를 첫 주로 계산
vbFirstFullWeek 3 한 주가 7일인 주를 첫 주로 계산

 

4. 예제로 확인

엑셀 시트에 B2 셀에 원하시는 날자를 입력하고 C열에 interval에 입력할 수 있는 코드들을 입력합니다. 그리고, ActiveX 버튼을 하나 만들고 마우스로 더블 클릭하여 코드 창을 엽니다. 그리고, 다음과 같이 코드를 작성합니다.

 

   Private Sub CommandButton1_Click()

      Dim i As Integer, j As Integer

 

      j = Range("C2").End(xlDown).Row

 

      For i = 2 To j

         Range("D" & i) = DateAdd(Range("C" & i), 2, Range("B2"))

      Next

   End Sub

 

j = Range("C2").End(xlDown).Row

: 변수 j에 C열에 데이터가 입력되어 있는 마지막 셀의 행 값을 입력합니다.

 

Range("D" & i) = DateAdd(Range("C" & i), 2, Range("B2"))

: DateAdd 함수의 interval에 C열에 있는 값을 입력하고 2만큼 이후의 날자를 D열 j행 셀에 입력합니다.

 

 

 

 

이번에는 새로운 ActiveX 버튼을 만들고 위의 DateAdd 예제를 DatePart로 바꾸어 코드를 작성하여 확인해 보겠습니다.

 

   Private Sub CommandButton2_Click()

      Dim i As Integer, j As Integer

 

      j = Range("C2").End(xlDown).Row

 

      For i = 2 To j

         Range("E" & i) = DatePart(Range("C" & i), Range("B2"))

      Next

   End Sub

 

코드에서 DatePart에 해당하는 부분만 바꾸었습니다.

버튼을 눌러 실행해 보시면 interval이 y인 경우에는 입력한 날자가 몇 변째 일인지 알려주며, ww인 경우에는 몇 번째 주에 해당하는지 알려줍니다.

 

새로운 버튼을 만들고 B3 셀에 B2셀과 다른 날자를 입력합니다. 그리고, DateDiff 함수에 대한 예제로 다음과 같이 코드를 작성합니다.

 

   Private Sub CommandButton3_Click()

      Dim i As Integer, j As Integer

 

      j = Range("C2").End(xlDown).Row

 

      For i = 2 To j

         Range("F" & i) = DatePart(Range("C" & i), Range("B2"), Range("B3"))

      Next

   End Sub

 

C열에 interval용 내장 상수를 작성하실 때 w와 ww는 제외하고 입력하셔야 합니다. w와 ww가 입력되어 있으면 에러가 발생합니다.

 

반응형