Excel:数据validation,如何强制用户input2个字符的string?
我想在最新的Excel中的单元格中添加一些数据validation。 我想强制用户input一个两个字符长的string,第一个字符是一个数字,第二个字符是一个字母。
例如
1m 2m 9w 8y
你会怎么做?
另外,如果input一个小写字母,我想在input完成时把它变成一个大写字母。
只有第一部分(不需要VBA),您可以使用数据validation:
- select你想要检查的单元格(例如
A1
) - 在function区中,转到数据>数据validation
- 在
Allow:
,select自定义 - 在该领域,把这个公式:
=IF(AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),ISTEXT(RIGHT(A1,1))),TRUE,FALSE)
- 在“ 错误警报 ”选项卡中,更改对话框以向用户解释他应该执行的操作,如下所示:
你必须input一个数字后跟一个字母。
顺便说一句,你可以添加一个检查与UPPERCASE
testing。
[编辑]也看看brettj的答案类似,但优化的解决scheme
select范围,然后在数据菜单中selectvalidation。
允许:selectText length
,最小值= 2,最大值= 2
对于第一部分,您将需要一个像这样的公式来进行数据validation
=AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),CODE(RIGHT(LOWER(A1),1))>=97,CODE(RIGHT(LOWER(A1),1))<=122)
这部分对a到z CODE(RIGHT(LOWER(A1),1))>=97,CODE(RIGHT(LOWER(A1),1))<=122)
之间的字母进行不区分大小写的testing。
ISTEXT(RIGHT(A1,1)))
将validation除az以外的字符为文本,因为它是stringtesting,偶数将被允许。 这就是为什么需要(VALUE(LEFT(A1,1)))
的VALUE
部分来强制对string中第一个位置进行数值计算
杰罗姆,
如果你想解决这个没有 VBA,你可以
- 使用(隐藏)工作表,您可以在一列中input所有260个组合0A到9Z。
- 给这个范围一个名字,例如“MyList”。
- 去你的input表(如A1),并使用数据validation,select“列表”选项。
- 在源字段中,单击[F3]select“MyList”。
如果您需要大写的数据,那么您可以使用公式=UPPER(A1)
,在任何地方使用input。
这里有一个矫枉过正的方法,从字面上来说只是为了好玩(不要低估了我对VBA的一点乐趣 – 这实际上是有用的知道该怎么做)。 它将数据validation列表添加到只允许数字后跟大写字母的范围。 我这样做是通过添加每一个允许的组合来完成的:)当然,你不必从列表中select一个,但是如果你尝试input一些不允许的东西,你会得到蜂鸣器:)
Sub AddValidation() Dim cell As Range Dim dict As Object Set dict = CreateObject("scripting.dictionary") Dim alphabet As String, numbers As String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numbers = "1234567890" Dim validList As String For i = 1 To Len(numbers) For j = 1 To Len(alphabet) dict.Add Mid$(numbers, i, 1) & Mid$(alphabet, j, 1), 1 Next Next validList = Join(dict.keys, ", ") 'Example using B1:B10 With Range("B1:B10").Validation .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=validList .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "Invalid data entered" .ShowInput = True .ShowError = True End With End Sub
如果你可以使用VBA,然后尝试捕获事件Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "You just changed " & Target.Address ' your logic goes here End Sub