如何将一系列单元格中的Entry限制为数字(整个#)最大长度为9个字符,没有前导零且没有重复?


0

如何将一系列单元格中的Entry限制为数字(整个#)最大长度为9个字符,没有前导零且没有重复?

我还想将另一个单元格范围限制为最大24个字母和“ - ”

Answers:


2

问题的第一部分可以通过数据验证和自定义格式完成。为此,首先选择要验证的整个范围,然后单击“数据”功能区中的“数据验证”按钮。然后在“数据验证”对话框的“设置”选项卡中设置自定义格式,将“允许”下拉列表更改为“自定义”并粘贴或键入包含前导的公式 = 进入公式框:

=AND(A1 > 0, A1 < 1000000000, A1 = INT(A1), COUNTIF(A:A, A1) <= 1)
  • AND 如果所有参数都为true,则返回true。
  • A1 > 0 验证该数字是正数。
  • A1 < 1000000000 验证该数字最多为9个字符。
  • A1 = INT(A1) 验证该数字不是小数。
  • COUNTIF(A:A, A1) <= 1 验证范围仅包含1个数字实例。

除非范围被格式化为文本,否则无需检查是否没有前导零,因为Excel会自动从数字中删除任何前导零。

此公式假定您的目标范围是A列。更改所有实例 A1 在公式中,目标范围内的第一个单元格和 $A:$A 到整个范围。在提到整个范围时,请务必使用相对参考表格,而在提及整个范围时,请使用绝对参考表格(即 B1 对于第一个细胞和 $B$1:$B$20 对于整个范围。)

使用数据验证的好处是不需要使用宏,您可以在“数据验证”对话框中指定自定义输入消息和自定义错误消息。

如果没有一些VBA,你问题的第二部分就不容易实现。如果您正在使用表并将数据验证应用于列,则可以使用隐藏列和类似于以下内容的自定义函数轻松完成此操作:

Function LimitAlpha24(str As String) As Boolean
    Dim rx As Object
    Set rx = CreateObject("VBScript.RegExp")
    rx.Pattern = "^[A-Za-z-]{0,24}$"
    LimitAlpha24 = rx.Test(str)
End Function

0

将以下事件宏放在工作表代码区域中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As Range, v As Variant, L As Long, i As Long
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    Set A = Range("A1:A10")
    If Intersect(Target, A) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    v = Target.Text
    L = Len(v)

    If L > 9 Then
        MsgBox "input too long"
        GoTo errOut
    End If

    For i = 1 To L
        If Mid(v, i, 1) Like "[0-9]" Then
        Else
            MsgBox "bad character"
            GoTo errOut
        End If
    Next i

    If Left(v, 1) = "0" Then
        MsgBox "leading zero"
        GoTo errOut
    End If

    If wf.CountIf(A, v) > 1 Then
        MsgBox "duplicate value"
        GoTo errOut
    End If
    Application.EnableEvents = True
    Exit Sub

errOut:
    Target.Clear
    Target.Select
    Application.EnableEvents = True
End Sub

假定的细胞范围是 A1:A10

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口

如果您有任何疑虑,请先在试用工作表上试用。

如果保存工作簿,宏将与其一起保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

要删除宏:

  1. 如上所述调出VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能使其正常工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.