Craig đang phát triển một trang tính và muốn biết liệu có cách nào để chỉ định số ký tự tối đa có thể được nhập vào bất kỳ ô nhất định nào hay không. Anh ấy không muốn sử dụng Xác thực dữ liệu để áp đặt giới hạn.

Không có cách nào để thực hiện điều này trực tiếp trong Excel mà không (như Craig đã đề cập)

bằng cách sử dụng Xác thực dữ liệu. Tuy nhiên, có một số điều bạn có thể thử để đạt được hiệu quả mong muốn. Trước tiên, bạn có thể sử dụng công thức để kiểm tra độ dài của bất kỳ ô nào, sau đó hiển thị thông báo lỗi, nếu muốn. Ví dụ: nếu các ô bạn muốn kiểm tra nằm trong cột C, bạn có thể sử dụng công thức như sau:

=IF((LEN(C1)>15),"Cell is Too Long","")

Đặt công thức vào ô ở bên phải ô đang được kiểm tra (chẳng hạn như trong ô D1), sau đó sao chép nó xuống bao nhiêu ô nếu cần.

Khi một mục nhập được thực hiện bằng C1 và nếu nó có nhiều hơn 15 ký tự, thì thông báo sẽ được hiển thị.

Nếu cách tiếp cận trực tiếp như vậy là không mong muốn, thì bạn sẽ cần sử dụng macro để kiểm tra. Sau đây là một ví dụ đơn giản được kích hoạt bất cứ khi nào có điều gì đó được thay đổi trong trang tính. Sau đó, mỗi ô trong trang tính được kiểm tra để đảm bảo rằng nó không dài hơn 15 ký tự. Nếu một ô như vậy được phát hiện, thì một hộp thông báo sẽ hiển thị và ô đó sẽ bị xóa.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each cell In UsedRange         If Len(cell.Value) > 15 Then             MsgBox " Can't enter more than 15 characters"

cell.Value = ""

End If     Next End Sub

Một cách tiếp cận mạnh mẽ hơn là kiểm tra trình xử lý sự kiện để xem liệu thay đổi có được thực hiện ở đâu đó trong phạm vi ô cần được giới hạn độ dài hay không.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range     Dim rCell As Range     Dim iChars As Integer     On Error GoTo ErrHandler

'Change these as desired     iChars = 15     Set rng = Me.Range("A1:A10")



If Not Intersect(Target, rng) Is Nothing Then         Application.EnableEvents = False         For Each rCell In Intersect(Target, rng)

If Len(rCell.Value) > iChars Then                 rCell.Value = Left(rCell.Value, iChars)

MsgBox rCell.Address & " has more than" _                   & iChars & " characters." & vbCrLf _                   & "It has been truncated."

End If         Next     End If

ExitHandler:

Application.EnableEvents = True     Set rCell = Nothing     Set rng = Nothing     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Để sử dụng macro này, bạn chỉ cần thay đổi giá trị được gán cho iChars (thể hiện độ dài tối đa cho phép) và phạm vi được gán cho rng (hiện được đặt thành A1: A10). Bởi vì macro chỉ kiểm tra các thay đổi trong phạm vi được chỉ định, nó nhanh hơn nhiều với các trang tính lớn hơn macro kiểm tra tất cả các ô được sử dụng.

_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 (10003) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: