【问题标题】:Excel : Data Validation, how to force the user to enter a string that is 2 char long?Excel:数据验证,如何强制用户输入 2 个字符长的字符串?
【发布时间】:2011-12-14 11:36:56
【问题描述】:

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

例如

1m
2m
9w
8y

你会怎么做?

另外,如果输入的是小写字母,我想在输入完成后将其呈现为大写字母。

【问题讨论】:

  • 对于第 (2) 部分,它必须是 VBA。即您可以使用公式来测试您的条件作为第 (1) 部分,但转换将基于代码

标签: excel excel-formula


【解决方案1】:

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

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

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

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

[编辑] 另请查看 brettj 的回答,了解类似但经过优化的解决方案

【讨论】:

  • 有一个用于数据验证的text length 选项
  • 我在下面对文本检查部分进行了建议的更改。我认为您的意思是ISNUMBER 而不是ISNUM。此外,您可以将解决方案缩短为 AND(LEN(A1)=2,ISNUM(VALUE(LEFT(A1,1))),ISTEXT(RIGHT(A1,1))) 以获得相同的效果,因为这将返回 TRUE 或 FALse。欢呼戴夫
  • @brettdj:谢谢。可惜我的 Excel 不是英文的,我必须翻译我创建的每个公式 :(。我还编辑了我的帖子,这样即使我的仍然是第一个,人们也能看到你的答案
  • 这真是令人印象深刻。您的母语(和 Excel 版本)是法语吗?我还以为你是住在法国的说英语的人。
  • 谢谢,我很感激 :)。实际上,我是法国人,这是我的母语(Excel 也是法语)
【解决方案2】:

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

【讨论】:

  • 不错的提示。它只解决了部分问题,但相关性足以引起注意:)
【解决方案3】:

对于第一部分,您将需要一个这样的公式来进行数据验证

=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(LEFT(A1,1)))VALUE 部分来强制对字符串中的第一个位置进行数字评估

【讨论】:

  • 因为我喜欢建议的方法,所以我自己尝试了这个并遇到了问题。我将公式“修改”为:AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),CODE(RIGHT(A1,1))>=65,CODE(RIGHT(A1,1 ))
  • 好的,终于用下面的公式让它在数据验证中工作:=IF(AND(LEN(A1)=2,ISNUMBER(VALUE(LEFT(A1,1))),CODE( RIGHT(A1,1))>64,CODE(RIGHT(A1,1))
【解决方案4】:

杰罗姆,

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

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

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

【讨论】:

    【解决方案5】:

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

    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
    

    【讨论】:

    • 您真的必须使用字典在每个字母和数字之间放置逗号吗? (特别是如果你有一个循环来添加键......):D
    • 你是绝对正确的 - 至少在我的回答开始时,我似乎不知何故知道我在做一些非常规的事情:0
    【解决方案6】:

    如果您可以使用 VBA,请尝试捕获事件 Worksheet_Change:

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

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多