Jim có nhu cầu trước ngày trong một ô cụ thể một tháng vào lúc nửa đêm ngày 15 hàng tháng (00:00:00 ngày 15) và anh ấy tự hỏi làm thế nào để thực hiện được.

Như với nhiều vấn đề trong Excel, câu trả lời phụ thuộc vào bản chất của dữ liệu liên quan và chính xác những gì bạn muốn làm. Nếu ngày trong ô là ngày hôm nay và bạn chỉ muốn ô hiển thị từ tháng hiện tại đến hết ngày 14 và sau đó là tháng tiếp theo sau đó, thì bạn có thể sử dụng công thức như sau:

=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")

Công thức này trả về tên của một tháng, không phải ngày. Nếu bạn muốn trả lại ngày, bạn có thể sử dụng công thức này:

=IF(DAY(NOW())>14,DATEVALUE(IF(MONTH(NOW())=12,1, MONTH(NOW())+1) & "/" & DAY(NOW()) & "/" & IF(MONTH( NOW())=12,YEAR(NOW())+1,YEAR(NOW()))),NOW())

Cả hai công thức này đều tính đến “khoản thu nhập cuối năm” khi bạn tăng từ tháng 12 đến tháng 1. Phiên bản ngắn hơn của công thức cuối cùng này có thể được tạo nếu bạn sử dụng hàm DATE thay vì hàm DATEVALUE:

=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)

Công thức này, không giống như ví dụ DATEVALUE, luôn trả về một ngày là ngày đầu tiên của bất kỳ tháng nhất định nào.

Nếu bạn thực sự muốn tăng giá trị của một ngày cụ thể trong một ô, thì bạn phải sử dụng macro để thực hiện tác vụ. Hơn nữa, bạn phải đảm bảo rằng macro chỉ chạy mỗi tháng một lần, vào một thời điểm cụ thể vào một ngày cụ thể. Ví dụ: nếu bạn muốn macro chạy lúc 00:00:00 vào ngày 15 hàng tháng, bạn cần thiết lập macro để macro kiểm tra ngày và giờ, sau đó chạy vào ngày và giờ cụ thể đó. Bạn cũng cần đảm bảo rằng sổ làm việc chứa macro được mở vào ngày và giờ đó.

Macro sau sẽ tìm nạp ngày từ một ô và tăng nó lên một tháng. Macro giả định rằng bạn có một phạm vi được đặt tên, DateCell, tham chiếu đến ô cần cập nhật.

Sub IncreaseMonth()

Dim dDate As Date     dDate = Range("DateCell").Value     Range("DateCell").Value = _       DateSerial(Year(dDate), _       Month(dDate) + 1, Day(dDate))

End Sub

Để đảm bảo rằng macro chạy vào thời điểm thích hợp, bạn sẽ cần một macro khác. Macro sau được thiết kế để chạy bất cứ khi nào sổ làm việc được mở:

Private Sub Workbook_Open()

If Day(Now) = 14 Then     Application.OnTime ("23:59:59"), "IncreaseMonth"

End If End Sub

Lưu ý rằng macro cụ thể này đặt phương thức OnTime để nó chạy macro BoostMonth lúc 23:59:59 vào ngày 14. Ngày giờ này được chọn vì nó dễ bắt hơn là 00:00:00 ngày 15.

Hãy nhớ rằng macro BoostMonth sẽ chỉ chạy nếu bạn mở sổ làm việc vào ngày 14 và sau đó để sổ làm việc mở cho đến ngày 15.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

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

Mẹo này (2180) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: