Excel:数据验证,如何强制用户输入2个字符长的字符串?

时间:2011-12-14 11:36:56

标签: excel excel-formula

我想在最新的Excel中为单元格添加一些数据验证。我想强制用户输入一个两个字符长的字符串,第一个字符为数字,第二个字符为字母。

e.g。

1m
2m
9w
8y

你会怎么做?

此外,如果输入小写字母,我想在输入完成时将其渲染为大写字母。

6 个答案:

答案 0 :(得分:5)

仅对第一部分(无需VBA),您可以使用数据验证:

  • 选择要检查的单元格(例如A1
  • 在功能区中,转到数据>数据验证
  • Allow:中,选择自定义
  • 在该字段中,请输入以下公式:=IF(AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),ISTEXT(RIGHT(A1,1))),TRUE,FALSE)
  • 在标签错误提醒中,更改对话框,向用户解释他应该做什么,例如:
  

您必须输入一个数字后跟一个字母。

顺便说一句,您可以使用UPPERCASE测试添加支票。

[编辑]另请参阅brettj对类似但优化的解决方案的回答

答案 1 :(得分:2)

杰罗姆,

如果你想解决这个没有 VBA,你可以

  • 使用(隐藏)工作表,您可以在一列中输入所有260种组合0A到9Z。
  • 为此范围指定名称,例如“我的列表”。
  • 转到您的输入表(例如A1)并使用数据验证,选择“列表”选项。
  • 在源字段中,单击[F3]以选择“MyList”。

如果您需要大写的数据,您可以使用公式=UPPER(A1),只要您使用输入。

答案 2 :(得分:2)

选择范围,然后在“数据”菜单中选择“验证” 允许:选择Text length,最小值= 2,最大值= 2

答案 3 :(得分:2)

对于第一部分,您需要一个公式,例如数据验证

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

之间的字母进行不区分大小写的测试

ISTEXT(RIGHT(A1,1)))会将a-z以外的字符验证为文本,因为它是字符串测试,甚至允许使用数字。这就是强制对字符串中第一个位置进行数值计算所需VALUE (VALUE(LEFT(A1,1)))部分的原因

答案 4 :(得分:1)

这是一种矫枉过正的方法,实际上只是为了好玩(不要因为VBA带来一点乐趣而贬低我 - 这对知道怎么做实际上很有用)。它将数据验证列表添加到仅允许数字后跟大写字母的范围。我通过完全添加允许的每一个组合来实现这一点:)当然你不必从列表中选择SELECT,但是如果你尝试键入不允许的内容,你会得到蜂鸣器:)

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

答案 5 :(得分:0)

如果你可以使用VBA,那么尝试捕获事件Worksheet_Change:

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "You just changed " & Target.Address
    ' your logic goes here
End Sub