Nếu bạn sử dụng khả năng xác thực dữ liệu của Excel, bạn có thể giới hạn những gì đi vào một ô, dựa trên nội dung của một ô khác. Ví dụ: bạn có thể dễ dàng giới hạn những gì đi vào ô A2 dựa trên một ngày trong ô A1. Làm theo các bước sau:

  1. Chọn ô A2.

  2. Chọn Xác thực từ menu Dữ liệu. Excel sẽ hiển thị hộp thoại Xác thực Dữ liệu.

  3. Đảm bảo rằng tab Cài đặt được hiển thị. (Xem Hình 1.)

  4. Sử dụng danh sách thả xuống Cho phép, chọn Ngày.

  5. Sử dụng danh sách dữ liệu thả xuống, chọn Lớn hơn hoặc Bằng.

  6. Trong hộp Ngày bắt đầu, hãy nhập = A1. Điều này cho Excel biết rằng ngày phải lớn hơn hoặc bằng bất kỳ ngày nào trong ô A1.

  7. Bấm OK.

Bây giờ, bất cứ khi nào bạn cố gắng nhập ngày vào ô A2 sớm hơn ngày trong ô A1, Excel sẽ hiển thị thông báo lỗi và sẽ không cho phép nhập ngày.

Tuy nhiên, điều gì sẽ xảy ra khi bạn muốn giới hạn ngày có thể được nhập vào ô A1? Ví dụ: nếu bạn đặt ngày 4/1/04 vào ô A1 và bạn muốn đảm bảo rằng ngày tiếp theo được nhập vào ô A1 không sớm hơn ngày 4/1/04. Nếu bạn đặt một ngày chẳng hạn như 15/04/04 trong ô A1, điều đó sẽ ổn, nhưng khi bạn nhập ngày tháng tiếp theo vào ô A1, bạn không muốn ngày đó sớm hơn 15/04/04. Nói cách khác, bạn muốn đảm bảo rằng ô A1 chỉ có thể chấp nhận các ngày sau ngày hiện tại trong A1.

Điều này là một chút dính hơn. Nếu bạn làm theo các bước trên nhưng chọn ô A1 ở bước 1, thì xác thực dữ liệu sẽ không hoạt động. Tại sao? Vì ngày bạn nhập vào ô A1 sẽ luôn lớn hơn hoặc bằng ngày bạn nhập vào ô A1 — Excel không so sánh với ngày trước đó trong ô A1 khi thực hiện xác thực dữ liệu.

Cách duy nhất để giải quyết vấn đề này là thông qua việc sử dụng hai macro. Đầu tiên, hãy đặt macro sau vào một mô-đun thông thường:

Sub Date_Validation()

Dim dteDate As Date     Dim strDate As String

With Range("A1")

'   Memo original date         dteDate = CDate(.Text)

'   Create date string         strDate = Format(dteDate, "m\/d\/yy")

With .Validation         '   Delete old settings             .Delete         '   Set new data validation             .Add _               Type:=xlValidateDate, _               AlertStyle:=xlValidAlertStop, _               Operator:=xlGreaterEqual, _               Formula1:=strDate

.IgnoreBlank = False             .InCellDropdown = True             .InputTitle = ""

.ErrorTitle = "Invalid Date Entry"

.InputMessage = ""

.ErrorMessage = _               "Date is older than the previous date (" & _               dteDate & ")."

.ShowInput = True             .ShowError = True         End With     End With End Sub

Macro này cần được gọi bởi một macro khác, macro này được đặt trong cửa sổ mã của trang tính, để nó được kích hoạt mỗi khi có thay đổi trong trang tính:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next     If Target = Range("A1") Then Date_Validation End Sub

Cách thức hoạt động của các macro này thực sự khá thú vị. Bởi vì bạn đặt cái sau trong cửa sổ mã của trang tính, nó sẽ kích hoạt mỗi khi có thay đổi đối với trang tính. Nếu ô được thay đổi là A1, thì macro Date_Validation sẽ được chạy.

Macro Date_Validation lấy ngày từ ô A1 và xây dựng quy tắc xác thực dữ liệu cho ô. Đó là tất cả những gì nó làm — đặt quy tắc xác thực dữ liệu sẽ không cho phép nhập ngày vào ô sớm hơn ngày hiện tại trong ô.

Cái hay của macro là khi quy tắc xác thực dữ liệu có hiệu lực, thì lần thay đổi ô A1 tiếp theo, quy tắc xác thực dữ liệu sẽ được kích hoạt trước khi kích hoạt sự kiện Worksheet_Change. Vì vậy, quy tắc xác thực dữ liệu đảm bảo rằng chỉ một ngày lớn hơn ngày hiện tại mới có thể được nhập. Sau khi xác thực dữ liệu bị xóa, thì macro sẽ xử lý việc đặt lại quy tắc xác thực dữ liệu, vì vậy nó sẽ so sánh với ngày mới được nhập.

_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 (2960) á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: