[엑셀/VBA] 날짜 차이를 원하는 형식으로 구하는 방법 | DateDiff

folder 프로그래밍 calendar_month web_traffic 0

문제

예를 들어 아래와 같은 파생결합증권(ELS)들이 있다고 해봅시다.

  1. 3년 만기 / 매 6개월 마다 자동 조기 상환
  2. 1년 만기 / 매 3개월 마다 자동 조기 상환
  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 - dateAdateFormat 형식으로 보여준다고 생각해야 합니다.

“yyyy” 사용 주의

아래의 몇몇 테스트 결과물을 보시죠.

엑셀 VBA 에서 DateDiff 를 사용해 연도 차이를 구한 샘플 자료

엑셀 VBA 에서 DateDiff 를 사용해 연도 차이를 구한 샘플 자료 (1)

첫 번째와 두 번째의 결과는 뭐 그럴 수 있지 라고 생각 할 수 있는데, 마지막 2025-11-202026-01-10의 차이 역시 결과로 1이 반환 되었습니다.

엑셀 VBA 에서 DateDiff 를 사용해 연도 차이를 구한 샘플 자료 (2)

엑셀 VBA 에서 DateDiff 를 사용해 연도 차이를 구한 샘플 자료 (2)

위 예시를 보면 제가 아까 yyyy를 설명 하면서 연의 차이 가 아니라 연도의 차이라고 적었는지 이해 하실 겁니다.

진짜 몇 년 간격인지 측정하기 위해서는 m 이나 d 로 결과를 구한 후 30이나 365로 나누는 것이 현명한 선택입니다.


이상으로 간단하지만 주의해서 사용해야 하는 엑셀 VBA의 내장 함수 DateDiff에 대해 정리해 보았습니다.

끝.

댓글 남기기