Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:数据验证,如何强制用户输入长度为2个字符的字符串?_Excel_Excel Formula - Fatal编程技术网

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

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

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

e、 g

你会怎么做


此外,如果输入了小写字母,我希望在输入完成后将其呈现为大写字母。

如果可以使用VBA,请尝试捕获事件工作表\u更改:

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "You just changed " & Target.Address
    ' your logic goes here
End Sub
仅对于第一部分(不需要VBA),可以使用数据验证:

  • 选择要检查的单元格(例如,
    A1
  • 在功能区中,转至数据>数据验证
  • Allow:
    中,选择Custom
  • 在字段中,输入以下公式:
    =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