Kim có một trang tính trong đó cô ấy đặt ngày bắt đầu (cột C) và ngày kết thúc (cột D). Cô ấy cần một cách để tính số tháng kết thúc giữa hai ngày. Ví dụ: nếu ngày bắt đầu là 1/1/17 và ngày kết thúc là 31/7/17, thì số tháng kết thúc là 7. Tuy nhiên, nếu ngày kết thúc là 7/30/17, thì số tháng kết thúc là 6.

Có bất kỳ số lượng công thức nào bạn có thể nghĩ ra để tính toán số lượng thích hợp. Công thức đơn giản nhất là nếu bạn luôn có thể tính ngày trong cột C là ngày bắt đầu của một tháng. Trong trường hợp đó, công thức sau sẽ hoạt động tốt:

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

Nếu bạn không thể đếm trên cột C chứa ngày là ngày bắt đầu của một tháng, nhưng bạn có thể tính ngày bắt đầu và ngày kết thúc luôn ở cùng một năm, thì bất kỳ công thức nào sau đây sẽ thực hiện được mẹo:

=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)

Nếu năm ở ngày bắt đầu và ngày kết thúc có thể khác nhau, thì các công thức phức tạp hơn một chút. Bất kỳ biến thể nào sau đây sẽ tính đúng số tháng kết thúc trong phạm vi ngày:

=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))

Một số công thức này hơi dài, vì vậy bạn sẽ muốn xem xét cẩn thận để biết mình sẽ hiểu được tất cả nếu bạn chọn sử dụng một công thức.

Nếu bạn thích sử dụng cách tiếp cận macro, thì có thể quan tâm đến hàm do người dùng định nghĩa sau:

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

Macro chỉ đơn giản là bước qua tất cả các ngày giữa ngày bắt đầu và ngày kết thúc. Nó xem xét tháng cho mỗi ngày và nếu nó thay đổi, thì nó sẽ tính đó là “cuối tháng”. Số đếm này được trả về bởi hàm.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (572) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.