Excel:数据验证,如何强制用户输入长度为2个字符的字符串?
我想在最新的Excel中的单元格上添加一些数据验证。我想强制用户输入两个字符长的字符串,第一个字符是数字,第二个字符是字母 e、 g 你会怎么做Excel:数据验证,如何强制用户输入长度为2个字符的字符串?,excel,excel-formula,Excel,Excel Formula,我想在最新的Excel中的单元格上添加一些数据验证。我想强制用户输入两个字符长的字符串,第一个字符是数字,第二个字符是字母 e、 g 你会怎么做 此外,如果输入了小写字母,我希望在输入完成后将其呈现为大写字母。如果可以使用VBA,请尝试捕获事件工作表\u更改: Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "You just changed " & Target.Address ' your logi
此外,如果输入了小写字母,我希望在输入完成后将其呈现为大写字母。如果可以使用VBA,请尝试捕获事件工作表\u更改:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "You just changed " & Target.Address
' your logic goes here
End Sub
仅对于第一部分(不需要VBA),可以使用数据验证:
- 选择要检查的单元格(例如,
)A1
- 在功能区中,转至数据>数据验证
- 在
中,选择CustomAllow:
- 在字段中,输入以下公式:
=IF(AND(LEN(A1)=2,ISNUMBER(VALUE)(LEFT(A1,1))、ISTEXT(RIGHT(A1,1))、TRUE、FALSE)
- 在“错误警报”选项卡中,更改对话框以向用户解释应执行的操作,例如:
大写字母的检查
[编辑]还可以查看brettj关于类似但优化的解决方案的答案Jerome
如果您想在不使用VBA的情况下解决此问题,您可以
- 使用(隐藏)工作表,在一列中输入所有260个组合0A到9Z李>
- 为该范围指定一个名称,例如“MyList”李>
- 转到您的输入表(如A1)并使用数据验证,选择“列表”选项
- 在源字段中,单击[F3]选择“MyList”
如果您需要大写的数据,您可以在任何使用输入的地方使用公式=UPPER(A1)
。这里有一个overkill方法,字面上只是为了好玩(不要因为我在VBA中玩得开心而投我的票-知道如何做实际上很有用)。它将数据验证列表添加到只允许数字后跟大写字母的范围中。我通过添加每一个允许的组合来做到这一点:)当然你不必从列表中选择,但是如果你试图键入不允许的内容,你会收到蜂鸣器:)
选择范围,然后在数据菜单中选择验证。
允许:选择文本长度
,最小值=2,最大值=2对于第一部分,您需要这样的公式进行数据验证
=AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),code(RIGHT(LOWER(A1),1))>=97,code(RIGHT(LOWER(A1),1))=97,code(RIGHT(LOWER(A1),1))对于第(2)部分,它必须是VBA。例如,您可以使用公式作为第(1)部分来测试您的条件,但转换将基于代码这里有一个用于数据验证的文本长度
选项我在下面为文本检查部分做了一个建议更改。我想你的意思是ISNUMBER
而不是ISNUM
。另外,你可以将解决方案缩短为和(LEN(A1)=2,ISNUM(VALUE(LEFT(A1,1)),ISTEXT(RIGHT(A1,1)))
对于相同的影响,因为这将返回TRUE或FALse。干杯Dave@brettdj:谢谢。很遗憾我的Excel不是英文的,我必须翻译我创建的每一个公式:(.我还编辑了我的帖子,这样人们也会看到你的答案,即使我的答案仍然是第一个令人印象深刻的答案。你的母语是什么(和Excel版本)你是法国人吗?我以为你是住在法国的说英语的人。谢谢,我很感激:)。事实上,我是法国人,这是我的母语(Excel也是法语)。这是一个很好的提示。它只解决了部分问题,但足够相关,值得注意:)你真的必须用口述在每个字母和数字之间加逗号吗?(特别是如果你有一个循环来添加键的话…):DYou绝对正确-至少在我回答的一开始,我似乎知道我做的事情非常非常规:0因为我喜欢建议的方法,我自己尝试了这个方法,遇到了一个问题。我将公式“修改”为:AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1)),CODE(RIGHT(A1,1))>=65,CODE(RIGHT(A1,1))OK,最后使用以下公式在数据验证内部工作:=IF(AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1)),CODE(RIGHT(A1,1))>64,CODE(RIGHT(A1,1))
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "You just changed " & Target.Address
' your logic goes here
End Sub
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