Kim은 시작 날짜 (C 열)와 종료 날짜 (D 열)를 입력하는 워크 시트를 가지고 있습니다. 그녀는 두 날짜 사이의 월말 수를 계산하는 방법이 필요합니다. 예를 들어 시작일이 1/1/17이고 종료일이 7/31/17이면 월 종료 수는 7입니다. 그러나 종료 날짜가 7/30/17이면 월 수 끝은 6입니다.

적절한 개수를 계산하기 위해 고안 할 수있는 공식은 얼마든지 있습니다. 가장 간단한 공식은 C 열의 날짜를 항상 한 달의 시작이라고 생각하는 것입니다. 이 경우 다음 공식이 잘 작동합니다.

=DATEDIF(C1,D1+1,"m")

한 달의 시작 날짜를 포함하는 C 열을 셀 수 없지만 시작 날짜와 끝 날짜가 항상 같은 연도에 있다고 믿을 수있는 경우 다음 공식 중 하나가 트릭을 수행합니다.

=IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-MONTH(C1),MONTH(D1)-MONTH(C1)+1)

=IF(MONTH(D1+1)=MONTH(D1),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(EOMONTH(D1,0))-MONTH(EOMONTH(C1,0))+(EOMONTH(D1,0)=D1)

=IF(EOMONTH(D1,0)=D1,MONTH(D1)-MONTH(C1)+1,MONTH(D1)-MONTH(C1))

=IF(D1<EOMONTH(D1,0),MONTH(D1)-1,MONTH(D1))-MONTH(C1)+1 =MONTH(D1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0)

시작일과 종료일의 연도가 다를 수 있다면 공식이 좀 더 복잡합니다. 다음 변형은 날짜 범위에서 올바른 월 종료 수를 계산합니다.

=12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+INT(D1=EOMONTH(D1,0))

=12*(YEAR(D1)-YEAR(C1))+MONTH(D1)-MONTH(C1)+IF(EOMONTH(D1,0)=D1,1,0)

=12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+IF(D1=EOMONTH(D1,0),1,0)

=12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(D1=EOMONTH(D1,0))

=12YEAR(D1)+MONTH(D1)-12YEAR(C1)-MONTH(C1)+(DAY(D1+1)=1)

=MONTH(D1)+12YEAR(D1)-MONTH(C1)-12YEAR(C1)+IF(EOMONTH(D1,0)=D1,1,0)

=(MONTH(D1+1)+12YEAR(D1+1))-(MONTH(C1)+12YEAR(C1))

=IF(D1=EOMONTH(D1,0),1,0)+MONTH(D1)-MONTH(C1)+((YEAR(D1)-YEAR(C1))*12)

=IF(EOMONTH(D1,0)=D1,(MONTH(D1)-MONTH(C1)+1)+(YEAR(D1)-YEAR(C1))12,MONTH(D1)-MONTH(C1)+(YEAR(D1)-YEAR(C1))12)

=IF(D1=EOMONTH(D1,0),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m"),DATEDIF(EOMONTH(C1,-1),EOMONTH(D1,0),"m")-1)

=IF(D1<C1,"Error",MONTH(D1)-MONTH(C1)+IF(D1MONTH(D1+1))*1)

=IF(D1<C1,"Error",(YEAR(D1)-YEAR(C1))*12+(MONTH(D1)-MONTH(C1))+(EOMONTH(D1,0)=D1))

=SUM(N(FREQUENCY(EOMONTH(ROW(INDIRECT(C1&":"&D1)),0),EOMONTH(ROW(INDIRECT(C1&":"&D1)),0))>0))-(D1<EOMONTH(D1,0))

이 공식 중 일부는 약간 길기 때문에 하나를 사용하기로 선택하면 모든 공식을 얻을 수 있는지주의 깊게 관찰하고 싶을 것입니다.

매크로 접근 방식을 선호하는 경우 다음 사용자 정의 함수가 유용 할 수 있습니다.

Function CountMonthEnds(sd As Date, ed As Date) As Integer     Dim ceom As Integer     Dim cmonth As Integer     Dim lmonth As Integer     Dim x As Date

cmonth = 0     ceom = 0     cmonth = Month(sd)

lmonth = cmonth     ' go to end date + 1 to allow for end date being end of month     For x = sd To ed + 1         cmonth = Month(x)

If cmonth <> lmonth Then             ceom = ceom + 1             lmonth = cmonth         End If     Next x     CountMonthEnds = ceom End Function

매크로는 시작일과 종료일 사이의 모든 날짜를 간단히 살펴 봅니다. 각 날짜의 월을보고 변경되면 “월말”로 계산합니다. 이 개수는 함수에 의해 반환됩니다.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (572)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.