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



만족하셨나요? ~~~~~~~

+ Recent posts