1. 시작일과 종료일 사이의 날짜를 계산하는 함수
: 일반적으로 엑셀에서 날짜를 계산하기 위해서는 날짜 형식만 계산이 가능하다.
텍스트형식(예. 20181231)으로 입력했을 경우는 일일이 년,월,일을 잘라서 날짜형식으로 만들어줘야한다.
일반적인 업무에서는 날짜형식보다 텍스트형식이 많다.
이럴때 나만의 날짜계산함수를 만들어 사용하면 편하게 해결할 수 있다.
2. 결과물
: 먼저 결과물을 봐야 감이온다. 결과물은 다음과 같다.
3. 나만의 함수 만드는 순서
1) 탐색기에서 마우스 오른쪽 클릭한 후 엑셀파일을 새로만든다.
2) 생성된 엑셀파일을 열고 개발도구>Visual Basic > Microsoft Excel개체 오른쪽클릭 > 삽입 > 모듈 로
새로운 모듈을 생성한다.
3) 함수작성
: 생성된 모듈에 아래를 작성한다.
'datedif1 : FROM 당일포함, TO포함한 날짜계산하는 함수 ' 함수명은 본인이 원하는대로 하면 된다. ' 두개의 입력값 : 시작일과 종료일 ' <--홑땅옴표는 VB에서 주석으로 프로그램돌아갈때 실제프로그램에 영향을 주지 않는 주석을 표현할 때 사용한다. ' 함수는 Function으로 시작하는 구문을 사용하고, 끝에 End Function으로 닫는다. 그 사이에 원하는 프로그램을 구현하면 된다. Function datedif1(date2 As Variant, date1 As Variant) '시작일자 date1의 길이가 8자이면 텍스트형태(예.20181231)로 입력한것으로 간주하고 ' "-"(대시)가 들어간 날짜형태로 바꿔준다. If Len(date1) = 8 Then date1 = Mid(date1, 1, 4) & "-" & Mid(date1, 5, 2) & "-" & Right(date1, 2) End If
'종료일자 date2의 길이가 8자이면 텍스트형태(예.20181231)로 입력한것으로 간주하고 ' "-"(대시)가 들어간 날짜형태로 바꿔준다. If Len(date2) = 8 Then date2 = Mid(date2, 1, 4) & "-" & Mid(date2, 5, 2) & "-" & Right(date2, 2) End If '엑셀VBA에 있는 함수인 datediff 를 사용하여 두 날짜를 계산한다. '기본적으로 VBA의 datediff 함수만 사용하면 당일은 미포함하여 계산된다. getDate = datediff("d", date1, date2) + 1
' 중요 : 함수명인 datedif1 에 위에서 계산된 getDate를 리턴해주면 됨. ' "일"자를 붙여도 되고 안붙이고싶으면 빼면 됨. datedif1 = getDate & "일"
End Function 'datedif2 : FROM 당일 미포함(다음날부터), TO포함 날짜계산 '내용은 위와 같은데 아래 getDate식에서 datediff 기본 VBA함수만으로 계산함. Function datedif2(date2 As Variant, date1 As Variant) If Len(date1) = 8 Then date1 = Mid(date1, 1, 4) & "-" & Mid(date1, 5, 2) & "-" & Right(date1, 2) End If
If Len(date2) = 8 Then date2 = Mid(date2, 1, 4) & "-" & Mid(date2, 5, 2) & "-" & Right(date2, 2) End If
getDate = datediff("d", date1, date2)
datedif2 = Int(getDate)
End Function |
실제 사용할때는 동일파일 內 어디든지 일반 내장함수(예. sum, if 등)와 동일한 방식으로 사용이 가능하다.
FROM |
TO |
계산결과 |
수식 |
비고 |
2018-10-25 |
2018-10-30 |
6일 |
=DATEDIF1(C4,B4) |
날짜형식입력 예시 |
20181022 |
20181031 |
10일 |
=DATEDIF1(C5,B5) |
텍스트형식 입력, 당일포함 예시1 |
20181023 |
20181031 |
9일 |
=DATEDIF1(C6,B6) |
텍스트형식 입력, 당일포함 예시2 |
20181024 |
20181031 |
8일 |
=DATEDIF1(C7,B7) |
텍스트형식 입력, 당일포함 예시3 |
20181025 |
20181031 |
6 |
=DATEDIF2(C8,B8) |
텍스트형식 입력, 당일이후 예시1 |
20171228 |
20180108 |
11 |
=DATEDIF2(C9,B9) |
텍스트형식 입력, 당일이후 예시2 |
만족하셨나요? ~~~~~~~
'Excel and VBA' 카테고리의 다른 글
[엑셀함수] VLOOKUP 배워보기 (1) | 2018.09.12 |
---|---|
[엑셀VBA] 이미지URL입력된 컬럼 클릭 시 이미지 팝업조회 (1) | 2018.09.10 |
[엑셀VBA] 엑셀에 VBA(Visual Basic for Applications) 도구 설치 (1) | 2018.09.06 |
[엑셀함수] 배열함수-여러조건의 합계결과 보기 (0) | 2018.09.06 |