[엑셀/VBA] 날짜 차이를 원하는 형식으로 구하는 방법 | DateDiff
문제
예를 들어 아래와 같은 파생결합증권(ELS)들이 있다고 해봅시다.
- 3년 만기 / 매 6개월 마다 자동 조기 상환
- 1년 만기 / 매 3개월 마다 자동 조기 상환
- 6개월 만기 / 첫 번째 자동조기 상환은 발행일 이후 3개월이 되는 시점에 발생하고 그 이후 매 1개월 마다 자동 조기 상환
제가 확인하고 싶은 것은 이 ELS 들이 규칙적인 스케줄을 가지는 것인지, 아니면 불규칙한 스케줄을 가지는 것인지 확인하는 것이었습니다.
해결
사실 위 종목들만 보면, 1번 과 2번은 규칙, 3번은 불규칙이라는게 딱 보이는데.. 이걸 하나씩 손으로 할 수 없으니까 우리는 엑셀과 VBA 를 이용해야겠죠.
결국 발행일과 그 다음 자동 조기 상환 날짜의 차이를 구해야 하는데 그 때 필요한게 바로 DateDiff
함수입니다.
기본적인 사용 예시는 아래와 같습니다.
DateDiff("m", "2025-08-20", "2025-11-20")
첫 번째 파라미터인 m
은 날짜 차이를 어떤 형식으로 반환할지를 결정하는 것입니다. 예를 들면 아래와 같은 것들이 있습니다.
yyyy
: 정수로 표현된 연도의 차이를 반환m
: 정수로 표현된 월의 차이를 반환d
: 정수로 표현된 일의 차이를 반환
간단하고 직관적으로 알아 볼 수 있죠?
두 번째와 세 번째 파라미터의 날짜는 차이를 구 할 두 날짜입니다.
그런데 이 함수를 사용하기 위해 몇 가지 테스트를 해봤는데요. 꽤나 주의해서 사용해야겠더라구요.
주의사항
날짜 파라미터 순서에 유의
이게 무슨 말이야 하면, 두 날짜의 차이를 구할 때 DateDiff("m", "2025-08-20", "2025-11-20")
이 경우와 DateDiff("m", "2025-11-20", "2025-08-20")
이 경우의 결과가 다르다는 것입니다. 첫번째 DateDiff
는 3을 반환하고, 두 번째 DateDiff
는 -3을 반환합니다.
다시 정리하자면, DateDiff(dateFormat, dateA, dateB)
는 dateB - dateA
를 dateFormat
형식으로 보여준다고 생각해야 합니다.
“yyyy” 사용 주의
아래의 몇몇 테스트 결과물을 보시죠.
첫 번째와 두 번째의 결과는 뭐 그럴 수 있지 라고 생각 할 수 있는데, 마지막 2025-11-20
과 2026-01-10
의 차이 역시 결과로 1
이 반환 되었습니다.
위 예시를 보면 제가 아까 yyyy
를 설명 하면서 연의 차이 가 아니라 연도의 차이라고 적었는지 이해 하실 겁니다.
진짜 몇 년 간격인지 측정하기 위해서는 m
이나 d
로 결과를 구한 후 30이나 365로 나누는 것이 현명한 선택입니다.
이상으로 간단하지만 주의해서 사용해야 하는 엑셀 VBA의 내장 함수 DateDiff
에 대해 정리해 보았습니다.
끝.