2013-01-16 39 views
5

Tôi có một cột trong bảng tính Excel 2007 nơi tôi muốn dữ liệu bị giới hạn ở giá trị "COM [1-4] hoặc 1-65535". Làm thế nào tôi có thể nhận được Excel để thực thi bộ giá trị này?Xác thực dữ liệu Excel - biểu thức chính quy?

TY, Fred

+0

Bạn có nghĩa là, làm thế nào để bạn nhận được một cột khác để chỉ hiển thị những giá trị đáp ứng tiêu chí của bạn? Bạn đang tìm kiếm kết hợp phạm vi hoặc khớp chính xác? Bạn có thể đưa ra một số ví dụ về các giá trị bạn muốn đối sánh và một số giá trị gần nhưng không khớp không? – jimbojw

+0

Bạn muốn giá trị là một trong COM1, COM2, COM3, COM4 hoặc int 1-65535 –

Trả lời

6

Bạn sẽ cần phải tạo ra một VBA chức năng tùy chỉnh (hoặc Macro) có hỗ trợ Regular Expressions. Cá nhân tôi đã làm điều này, vì vậy tôi biết điều đó có thể :-)

Nếu đây là vấn đề một lần, nó có thể được giải quyết bằng cách sử dụng một hàm FIND()/MID()/SUBSTITUTE() phức tạp. (đây là công việc ban ngày của tôi, thực sự), nhưng tôi sẽ không khuyên bạn nên trừ khi bạn muốn nhìn vào một ô 5 dòng có thể đầy đủ các hàm Excel.

Chỉnh sửa: Tôi sẽ cập nhật thông tin này nếu bạn có hoặc cần thêm thông tin để cung cấp.

Edit: Đây là cách bạn có thể sử dụng biểu thức thông thường là một hàm trong Excel:

Chức năng refind (strValue As String, strPattern As String, Optional blnCase As Boolean = True) As Boolean

Dim objRegEx As Object 
Dim blnValue As Boolean 

' Create regular expression. 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.Pattern = strPattern 
objRegEx.IgnoreCase = blnCase 

' Do the search test. 
blnValue = objRegEx.Test(strValue) 

REFIND = blnValue End Function 

End Function

+0

Nếu bạn có thể hiển thị cách thực hiện nó trong macro sẽ tuyệt vời. –

+0

Tôi nên cụ thể hơn. Tôi đã tạo ra các chức năng. Tôi không quan tâm nhiều cho Macros (họ có vị trí của họ), nhưng bạn vẫn sẽ cần phải sử dụng rất nhiều mã VBA tùy chỉnh tương tự. Tôi sẽ đính kèm mã ở trên. – Jonathan

+0

Hoàn hảo! Không chắc chắn lý do tại sao mọi người khác đề xuất chức năng excel thông thường bất cứ khi nào regex được đề xuất – foochow

5

Không rất linh hoạt, nhưng bạn có thể sử dụng một tùy 0.123., với công thức này:

=OR(AND(LEN(A2)=4,LEFT(A2,3)="COM",MID(A2,4,1)>="1",MID(A2,4,1)<="4"),OR(AND(A2>=1,A2<=65535))) 

Tôi nghĩ điều này sẽ thu hẹp nội dung bạn đã chỉ định trong nhận xét của bạn.

+0

+1 RegExp là quá mức cần thiết cho những gì có thể đạt được mà không cần VBA – brettdj

3

Sử dụng bên dưới trong Ruy-băng >> Dữ liệu >> Xác thực dữ liệu. Sau đó Allow = Tuỳ chỉnh và thêm dưới đây trong Công thức:

=OR(AND(E5 >= 1, E5 <= 65535), E5 = "COM1", E5 = "COM2", E5 = "COM3", E5 = "COM4") 
0

Đối với câu hỏi cụ thể, sử dụng Validation dữ liệu tiêu chuẩn sẽ làm việc với không VBA, Regex hay công thức cần thiết:

Allow: Danh sách Nguồn: "COM1, COM2, COM3, COM4,1-65535"

Điều này cũng cung cấp danh sách thả xuống trong ô để giúp người dùng.

Các vấn đề liên quan