2013-01-16 112 views
5

我在Excel 2007電子表格中有一列,我想將數據限制爲值「COM [1-4]或1-65535」。我怎樣才能讓Excel強制執行這組值?Excel數據驗證 - 正則表達式?

TY, 弗雷德

+0

你的意思是,你如何得到另一列只顯示那些符合你的標準的值?你在尋找範圍匹配還是精確匹配?你能否舉一些你想要匹配的值的例子,以及一些接近但不應該匹配的值? – jimbojw

+0

想要的值是COM1,COM2,COM3,COM4或int中的一個1-65535 –

回答

6

您需要創建一個自定義VBA函數(或宏),支持正則表達式。我親自做過,所以我知道這是可能的:-)

如果這是一次性問題,可以通過使用複雜的FIND()/ MID()/ SUBSTITUTE()等來解決。 (這實際上是我的日常工作),但我不會推薦這個,除非你想盯着一個完整的Excel函數的5行單元格。

編輯:我會更新這個,如果你有或需要更多的信息提供。

編輯:這裏是你如何使用正則表達式作爲Excel中的一個功能:

功能REFIND(strValue中作爲字符串,strPattern作爲字符串,可選blnCase由於布爾=真)爲布爾

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 

端功能

+0

如果您可以演示如何在宏中執行該操作,那將非常棒。 –

+0

我應該更具體。我創建了函數。我不太關心宏(他們有自己的位置),但是你仍然需要使用很多相同的自定義VBA代碼。我將附上上面的代碼。 – Jonathan

+0

完美!不知道爲什麼其他人建議定期使用正則表達式函數 – foochow

5

不是很靈活,但你可以使用自定義使用此公式:

=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))) 

我認爲這會縮小到您在評論中指定的內容。

+0

+1 RegExp在沒有VBA的情況下可以實現的功能過度消耗 – brettdj

3

在Ribbon >> Data >> Data Validation中使用以下內容。然後允許=自定義,並添加下面的公式:

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

對於這個特定的問題,使用標準的數據驗證將不VBA,正則表達式或公式需要工作過:

允許:列表 來源: 「COM1,COM2,COM3,COM4,​​1-65535」

這也提供了單元格中的下拉列表以幫助用戶。