VBA 에는 사용할 수 있는 날짜 관련 함수 및 개체가 많을 뿐만 아니라 자주 쓰입니다. 날짜 연산을 위해 현재 시간을 알려 주는 여러 개체부터 하나씩 알아보겠습니다. 그리고 날짜 개체를 통해 각 년, 월, 일, 시간, 분, 초 를 뽑아 내는 함수도 알아볼 것입니다. 마지막으로 날짜 계산할 때 사칙연산이 아닌 함수로 더하거나 빼는 방법도 알려드립니다. .
◎ 현재 시점의 시간 알아 오기 |
▼ 엑셀에서 제공하는 시간 개체는 3가지가 있습니다. 모드 현재 시간을 알수가 있는데 개체마다 특징이 있습니다. Now 는 시간까지 포함한 전체 시간을, Date 는 날짜와 요일을, Time 은 시간만 알려 줍니다. 아래 샘플 소스로 확인할 수 있습니다.
l Now : 날짜, 요일, 시간까지 표시된다. 전체 시간을 알수가 있다.
dt = Now
MsgBox dt
l Date : Now 와 달리 날짜와 요일만 표시된다.
dt = Date
MsgBox dt
l Time : 시간만 표시된다.
dt = Time
MsgBox dt
◎ 원하는 시간을 뽑아 내고 싶을 때 |
▼ 프로그램 작업을 하다 보면 현재 시간이나 날짜 개체에서 년도나 월, 요일을 별도로 추출해야 되는 경우가 있습니다. 엑셀에는 날짜에 년도와 월, 일을 추출할 수 있는 함수들이 별도로 존재합니다. 함수에 넘기는 인수 값은 날짜 개체 입니다.
Sub Test()
Year (Now) ''년도를 알고 싶을 때
Month (Now) ''월을 알고 싶을 때
Day (Now) ''날에 대해 알고 싶을 때
Hour (Now) ''시간에 대해 알고 싶을 때
Minute (Now) ''분에 대해 알고 싶을 때
Second (Now) ''초에 대해 알고 싶을 때
Weekday (Now) ''요일에 대해 알고 싶을 때
End Sub
▼ 날짜의 각 요소들을 뽑아 내는 함수 외에 각 파라미터의 값에 따라 위에서 제시한 함수들의 기능이 포함된 DatePart() 는 두 개의 파라미터 값을 조절해서 원하는 값을 추출합니다. 시간, 분, 초, 일 등에 함수명이 다 따로 있었다면 DatePart() 는 하나로 파라미터 옵션값에 따라 추출이 가능합니다. 두 가지 파라미터 중 첫 번째는 추출을 원하는 옵션값, 두 번째는 날짜 개체를 넘깁니다. 첫 번째 파라미터로 들어가는 옵션의 종류는 아래와 같습니다.
l yyyy : 년도
l q : 분기
l m : 달
l y : 년중 몇번째 날
l d : 날짜
l w : 요일
l ww : 년중 몇번째 주
l h : 시
l n : 분
l s : 초
Sub Test()
Debug.Print DatePart("yyyy", Now)
Debug.Print DatePart("q", Now)
Debug.Print DatePart("m", Now)
Debug.Print DatePart("y", Now)
Debug.Print DatePart("d", Now)
Debug.Print DatePart("w", Now)
Debug.Print DatePart("ww", Now)
Debug.Print DatePart("h", Now)
Debug.Print DatePart("n", Now)
Debug.Print DatePart("s", Now)
End Sub
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하는 방법 ▶ 엑셀 VBA 날짜 데이터를 비교하거나 연산하는 방법 ▶ 엑셀 VBA 년도, 월 비교해서 발생 횟수 조회하는 방법 ▶ 엑셀 VBA 입력된 값 형식 확인할 수 있는 Information 관련 함수 모음 ▶ 엑셀 VBA 문서가 열릴 때 필요한 기능 구현하기 |
◎ 함수를 이용해서 날짜 연산하기 |
▼ 날짜를 연산하는 함수는 두 가지가 있습니다. 더하기와 빼기입니다. 더하기 함수는 DateAdd(), 빼기는 DateDiff() 가 입니다. 두 함수에 공통적으로 들어가는 첫 번째 파라미터 Interval 은 DatePart() 에서 사용한 옵션에 해당합니다. 예를 들어 시간을 더하거나 빼고 싶으면 “h” 을 넣는 것이죠.
DateAdd ( Interval, Number, Date )
DateDiff ( Interval, Date1, Date2, FirstDayOfWeek, FirstWeekOfYear)
날짜 더하기 함수에서 첫 번째 파라미터는 옵션, 두 번째는 옵션에 따르는 시간 간격값, 세 번째는 날짜객체가 된다. 세 번째 날짜에 두 번째 값을 더해서 결과값이 리턴 되는 것입니다. 예를 들어 아래 소스는 옵션이 “yyyy” 이므로 세 번째 현재 시간에 1일을 더한 날짜를 리턴하는 것입니다.
OneYearLater = DateAdd("yyyy", 1, Now)
Sub Test()
Dim OneYearLater As Date
OneYearLater = DateAdd("yyyy", 1, Now)
Select Case Weekday(OneYearLater)
Case vbSunday
MsgBox "This day of the next year is Sunday"
Case vbMonday
MsgBox "This day of the next year is Monday"
Case vbTuesday
MsgBox "This day of the next year is Tuesday"
Case vbWednesday
MsgBox "This day of the next year is Wednesday"
Case vbThursday
MsgBox "This day of the next year is Thursday"
Case vbFriday
MsgBox "This day of the next year is Friday"
Case vbSaturday
MsgBox "This day of the next year is Saturday"
End Select
End Sub
▼ 뺄셈은 DateDiff() 함수를 사용합니다. 첫 번째 파라미터에 옵션을 넣고 두 번째, 세 번째 에는 날짜를 넣는데 두 날짜의 차이 값을 리턴하게 됩니다. 그러니까 옵션이 h 이고 10시와 12시를 넣게 되면 2시간이라는 값이 리턴되는 것이죠. 세 번째 파라미터는 한 주를 시작하는 요일이며 네 번째는 일년을 시작하는 주로 계산하게 되는데, 이 두 개의 파라미터는 선택사항이다.
Sub Test()
Dim datTim1 As Date
Dim datTim2 As Date
Dim wD As Long
Dim wY As Long
datTim1 = #1/4/2001#
datTim2 = #1/9/2001#
wD = DateDiff("w", datTim1, datTim2)
wY = DateDiff("ww", datTim1, datTim2)
Debug.Print "wD : " & wD
Debug.Print "wY : " & wY
End Sub
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하는 방법 ▶ 엑셀 VBA 날짜 데이터를 비교하거나 연산하는 방법 ▶ 엑셀 VBA 년도, 월 비교해서 발생 횟수 조회하는 방법 ▶ 엑셀 VBA 입력된 값 형식 확인할 수 있는 Information 관련 함수 모음 ▶ 엑셀 VBA 문서가 열릴 때 필요한 기능 구현하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 (5) | 2024.06.15 |
---|---|
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣기 (3) | 2024.06.13 |
엑셀 VBA 웹브라우저(인터넷 익스플로러) 띄우는 방법 (0) | 2024.06.12 |
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기 (0) | 2024.06.05 |
엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하기 (0) | 2024.06.02 |
엑셀 VBA 문자열, 텍스트 숫자를 문자열 숫자로 변경하기 (0) | 2024.06.01 |
엑셀 VBA 문자열 글자 하나씩 추출하기 (0) | 2024.05.31 |
엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기 (4) | 2024.05.29 |