HÀM EOMONTH (Excel 2007+)

Liên hệ QC
EOMONTH

Trả về ngày cuối cùng của tháng trước hoặc sau một mốc thời gian xác định.

Cú pháp: =EOMONTH(start_date, months)

start_date
: Ngày dùng làm mốc để tính. Cũng giống hàm EDATE(), nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.

months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.

Ví dụ:
=EOMONTH("14/11/2019",1) giá trị trả về: 31/12/2019
=EOMONTH("18/02/2020",0) giá trị trả về: 29/02/2020
=EOMONTH("15/06/2017",-1) giá trị trả về: 31/05/2017

1573625119741.png


Áp dụng: tìm số ngày trong tháng
=DAY(EOMONTH("14/11/2019",0)) giá trị trả về: 30
 
EOMONTH

Trả về ngày cuối cùng của tháng trước hoặc sau một mốc thời gian xác định.

Cú pháp: =EOMONTH(start_date, months)

start_date
: Ngày dùng làm mốc để tính. Cũng giống hàm EDATE(), nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.

months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.

Ví dụ:
=EOMONTH("14/11/2019",1) giá trị trả về: 31/12/2019
=EOMONTH("18/02/2020",0) giá trị trả về: 29/02/2020
=EOMONTH("15/06/2017",-1) giá trị trả về: 31/05/2017

View attachment 228280

Áp dụng: tìm số ngày trong tháng
=DAY(EOMONTH("14/11/2019",0)) giá trị trả về: 30
Bạn quên chưa nói hàm này áp dụng cho phiên bản Excel nào.
 
Để cho phiên bản nào cũng dùng được:

PHP:
Public Function EoMonth(ByVal DateTime As Date, Optional ByVal Months As Double = 0) As Date
  Dim NewDate As Date
  NewDate = DateSerial(Year(DateTime), Month(DateTime), 1)
  EoMonth = DateAdd("m", 1 + Months, NewDate)
  EoMonth = DateAdd("d", -1, EoMonth)
End Function

Ghi chú: phục hồi lại bởi @leonguyenz
 
Chỉnh sửa lần cuối bởi điều hành viên:
Xin lỗi Bác @phuocam
Hàm rút gọn của Bác hoàn toàn không đúng

Tôi sẽ ví dụ để Bác thấy điều đó.


Tôi có số 1.45 và số 1.55 quy tắc làm tròn cơ bản là sẽ thành 1 và 2

Hàm của Bác nếu làm tròn sẽ trả về cũng theo kiểu như vậy.

Đối với ngày ở Hàm EoMonth không phải là lấy ra Ngày của cuối tháng đúng là đúng

Hàm của Bác sẽ trả về kèm Giờ phút giây, vì vậy nó không đúng.

Hàm EoMonth trả về ngày cuối tháng nhưng không có số lẻ nếu chuyển kết quả về dạng số.

Vì sao trong hàm trên tôi viết có đoạn:

PHP:
NewDate = DateSerial(Year(DateTime), Month(DateTime), 1)

Đoạn này đã trừ đi Giờ phút giây.

Mong Bác sửa lại cho phù hợp.

PHP:
Public Function Test_EoMonth()
  Debug.Print Application.WorksheetFunction.EoMonth(Now, 1) = EoMonth(Now, 1)
  Debug.Print Format(Application.WorksheetFunction.EoMonth(Now, 1), "yyyymmdhhmmss") = Format(EoMonth(Now, 1), "yyyymmdhhmmss")
End Function
-------------------
Và Bác cũng "chơi rất là trội", như thế này mới "ưng":
PHP:
ByVal iMonths As Integer
-------------------


BQT như anh leonguyenz cũng lưu tâm, kiểm tra hàm trước khi "Like"
"trừ anh 1 điểm"
 
Lần chỉnh sửa cuối:
Nếu muốn kết quả giống #3 (*)
Mã:
Function MyEoMonth(ByVal StartDate As Date, ByVal iMonths As Double) As Date
MyEoMonth = DateAdd("m", iMonths + 1, Format(StartDate, "yyyy/m")) - 1
End Function
(*) Giống #3 chứ không phải giống hàm EOMONTH, nếu muốn giống y như hàm EOMONTH thì phải làm thêm một số thứ nữa.
 
Kết quả giống bài 3:
Mã:
Public Function MyEoMonth(ByVal DateTime As Date, Optional ByVal Months As Double = 0) As Date
MyEoMonth = DateSerial(Year(DateTime), Month(DateTime) + 1 + Months, 0)
End Function
 
Tôi phục hồi lại bài viết #3 theo hiện trạng ban đầu, để mọi người cùng tranh luận.
Lưu ý giúp: các tranh luận tập trung về phân tích giải thuật, các vấn đề liên quan đến hàm EOMONTH, những vấn đề không liên quan vui lòng không viết trong bài viết này. Chân thành cảm ơn các đóng góp của mọi người về bài viết này!

BQT như anh leonguyenz cũng lưu tâm, kiểm tra hàm trước khi "Like"
"trừ anh 1 điểm"
Cảm ơn bạn đã góp ý!
 
...
months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.
...
Chủ thớt:
Người ta chỉ chủ ý đả kích nhau chứ không chịu nói rõ rằng từ "làm tròn" của bạn ở trên chưa chắc đã được diễn tả đúng.

Trích Office Support:
1574229757793.png

Từ "truncated" ở trong bài trích xác định rõ là "phần lẻ sẽ bị chặt bỏ". Không hẳn là làm tròn.
-1.9 chặt phần lẻ sẽ là -1
-1.9 được làm tròn sẽ là -2

Chú: nếu tôi "lai" một bài thì là do tôi "lai" cái ý tưởng của nó. Việc nó có hoàn toàn theo ý hay không sẽ là chuyện khác.
 
Chủ thớt:
Người ta chỉ chủ ý đả kích nhau chứ không chịu nói rõ rằng từ "làm tròn" của bạn ở trên chưa chắc đã được diễn tả đúng.

Trích Office Support:
View attachment 228656
Từ "truncated" ở trong bài trích xác định rõ là "phần lẻ sẽ bị chặt bỏ". Không hẳn là làm tròn.
-1.9 chặt phần lẻ sẽ là -1
-1.9 được làm tròn sẽ là -2

Chú: nếu tôi "lai" một bài thì là do tôi "lai" cái ý tưởng của nó. Việc nó có hoàn toàn theo ý hay không sẽ là chuyện khác.
Cảm ơn anh đã góp ý!

Theo em thì bài #5 không có gì "đả kích".
Nội dung bài #5 nói về làm tròn của kết quả hàm tự tạo bài #4
Hàm của Bác sẽ trả về kèm Giờ phút giây, vì vậy nó không đúng.
...
Mong Bác sửa lại cho phù hợp.
Em không thấy nói làm tròn đối số Months
 
Anh chị cho em hỏi
làm sao biết được ngày hiện tại cho tới ngày cuối tháng còn bao nhiêu ngày làm việc,
ngày làm việc được tính là = tổng ngày còn lại - chủ nhật và ngày lễ
nếu mình dùng eomonth - today = số ngày còn lại của tháng, rồi làm sao loại ngày chủ nhật và ngày lễ ra để có được số ngày làm việc
 
Anh chị cho em hỏi
làm sao biết được ngày hiện tại cho tới ngày cuối tháng còn bao nhiêu ngày làm việc,
ngày làm việc được tính là = tổng ngày còn lại - chủ nhật và ngày lễ
nếu mình dùng eomonth - today = số ngày còn lại của tháng, rồi làm sao loại ngày chủ nhật và ngày lễ ra để có được số ngày làm việc
bạn tìm hiểu hàm NETWORKDAYS xem sao
 
Web KT
Back
Top Bottom