Excel中的自定义数据验证:公式和规则

  • Share This
Michael Brown

本教程展示了如何在Excel中制作自定义的数据验证规则。 你会发现一些E的例子。 xcel数据验证公式只允许特定单元格中的数字或文本值,或只允许以特定字符开头的文本,允许唯一数据防止重复,以及更多。

在昨天的教程中,我们开始了解Excel数据验证--它的目的是什么,如何工作,以及如何使用内置规则来验证工作表中的数据。 今天,我们将更进一步,谈论Excel中自定义数据验证的细枝末节,并尝试使用一些不同的验证公式。

    如何用公式创建自定义数据验证

    Microsoft Excel有几个内置的数字、日期和文本的数据验证规则,但它们只涵盖了最基本的情况。 如果你想用自己的标准来验证单元格,可以根据公式创建一个自定义的验证规则。 下面是方法。

    1. 选择一个或多个要验证的单元格。
    2. 打开数据验证对话框。 为此,点击 数据验证 上的按钮。 数据 选项卡,在 数据工具 组或按下Alt> D> L的键序(每个键都要分别按下)。
    3. 关于 设置 选项卡的 数据验证 对话窗口,选择 定制 允许 框中输入你的数据验证公式,并在 公式 箱子。
    4. 点击 认可 .

    你可以选择添加一个自定义的输入信息和错误提示,当用户选择了有效的单元格或输入了无效的数据时,就会分别显示出来。

    下面你会发现一些针对不同数据类型的自定义验证规则的例子。

    注意:所有的Excel数据验证规则,不管是内置的还是自定义的,都只验证创建规则后输入到单元格中的新数据。 复制的数据不被验证,在制定规则前输入到单元格中的数据也不被验证。 要找出不符合你的数据验证标准的现有条目,使用 圈出无效数据 功能,如《如何在Excel中查找无效数据》所示。

    Excel数据验证,只允许数字

    令人惊讶的是,没有一个内置的Excel数据验证规则可以满足一个非常典型的情况,即你需要限制用户在特定的单元格中只输入数字。 但是,这可以通过一个基于ISNUMBER函数的自定义数据验证公式轻松实现,比如这个。

    =ISNUMBER(C2)

    其中C2是你要验证的范围的最上面的单元格。

    注意:ISNUMBER函数允许在验证的单元格中使用任何数值,包括整数、小数、分数以及日期和时间,这些在Excel中也是数字。

    Excel数据验证只允许文本

    如果你正在寻找相反的方法--只允许在给定的单元格范围内输入文本,那么就用ISTEXT函数建立一个自定义规则,比如说。

    =ISTEXT(D2)

    其中D2是所选范围的最上层单元格。

    允许以特定字符开头的文本

    如果某个范围内的所有数值都应该以某个特定的字符或子串开始,那么就根据COUNTIF函数用通配符进行Excel数据验证。

    COUNTIF( 电池 ," 文本 *")

    例如,为了确保A列的所有订单ID以 "AA-"、"aa-"、"Aa-"或 "aA-"的前缀开始(不区分大小写),用这个数据验证公式定义一个自定义规则。

    =COUNTIF(A2, "aa-*")

    具有OR逻辑的验证公式(多个标准)。

    如果有2个或更多的有效前缀,可以增加几个COUNTIF函数,这样你的Excel数据验证规则就可以用OR逻辑工作。

    =COUNTIF(A2,"aa-*")+COUNTIF(A2,"bb-*")

    区分大小写的验证公式

    如果字符的大小写很重要,那么就使用EXACT与LEFT函数相结合,为以特定文本开始的条目创建一个大小写敏感的验证公式。

    EXACT(LEFT( 电池 , 字符数 ), 文本 )

    例如,为了只允许那些以 "AA-"开头的订单ID(既不允许 "aa-"也不允许 "Aa-"),使用这个公式。

    =exact(left(a2,3), "aa-")

    在上面的公式中,LEFT函数从A2单元格中提取前3个字符,EXACT与硬编码的子串(本例中为 "AA-")进行区分大小写的比较。 如果两个子串完全匹配,公式返回TRUE,验证通过;否则返回FALSE,验证失败。

    允许包含某些文本的条目

    要允许在单元格的任何地方(开头、中间或结尾)包含特定文本的条目,请根据您想要的大小写敏感或不敏感的匹配,将ISNUMBER函数与FIND或SEARCH结合使用。

    • 不区分大小写的验证: ISNUMBER(SEARCH( 文本 , 电池 ))
    • 对大小写敏感的验证:ISNUMBER(FIND( 文本 , 电池 ))

    在我们的样本数据集上,为了只允许在A2:A6单元格中包含文本 "AA "的条目,请使用这些公式之一。

    不区分大小写。

    =isnumber(search("aa", a2))

    大小写敏感。

    =isnumber(find("aa", a2))

    这些公式的工作逻辑如下。

    你在A2单元格中使用FIND或SEARCH搜索子串 "AA",两者都返回子串中第一个字符的位置。 如果没有找到该文本,则返回错误。 对于作为搜索结果返回的任何数字值,ISNUMBER函数产生TRUE,数据验证成功。 如果出现错误,ISNUMBER返回FALSE,该条目将不允许出现在单元格中。

    数据验证,只允许唯一的条目,不允许重复的。

    在某一列或某一单元格范围不应包含任何重复的情况下,配置一个自定义数据验证规则,只允许唯一的条目。 为此,我们将使用经典的COUNTIF公式来识别重复。

    =COUNTIF( 范围 , 最上面的单元格 )<=1

    例如,为了确保只有唯一的订单ID被输入到A2到A6单元格,用这个数据验证公式创建一个自定义规则。

    =COUNTIF($A$2:$A$6, A2)<=1

    当输入一个唯一的值时,该公式返回TRUE,验证成功。 如果相同的值已经存在于指定的范围内(计数大于1),COUNTIF返回FALSE,输入验证失败。

    请注意,我们用绝对的单元格引用(A$2:$A$6)来锁定范围,并对最上面的单元格(A2)使用相对引用,以使公式对验证范围内的每个单元格进行适当调整。

    注意:这个数据验证公式是 不区分大小写 意思是,它不区分大写和小写文本。

    日期和时间的验证公式

    内置的日期验证提供了相当多的预定义标准,以限制用户只输入你指定的两个日期之间的日期,大于、小于或等于一个给定的日期。

    如果你想对工作表中的数据验证进行更多的控制,你可以用自定义规则复制内置的功能,或者编写自己的公式,超越Excel数据验证的内置功能。

    允许两个日期之间的日期

    要将条目限制在指定范围内的日期,你可以使用预定义的带有 "之间 "条件的日期规则,或者用这个通用公式制定一个自定义验证规则。

    和( 电池 >= 开始日期 ), 电池 <= 结束日期 )

    在哪里?

    • 电池 是验证范围内最顶层的单元格,而
    • 开始 结束 日期是通过DATE函数提供的有效日期或对包含日期的单元格的引用。

    例如,为了只允许在2017年7月的日期,使用以下公式。

    =AND(C2>=DATE(2017,7,1),C2<=DATE(2017,7,31))

    或者,在一些单元格(本例中为F1和F2)中输入开始日期和结束日期,并在公式中引用这些单元格。

    =AND(C2>=$F$1, C2<=$F$2)

    请注意,边界日期是用绝对的单元格引用锁定的。

    只允许在工作日或周末

    要限制用户只输入工作日或周末,请根据WEEKDAY函数配置一个自定义验证规则。

    随着 返回类型 因此,对于工作日(周一至周五),公式的结果应该小于6,而对于周末(周六和周日)则大于5。

    只允许 工作日 :

    周日( 电池 ,2)<6

    只允许 周末 :

    周日( 电池 ,2)>5

    例如,如果只允许在单元格C2:C6中输入工作日,请使用这个公式。

    =WEEKDAY(C2,2)<6

    根据今天的日期来验证日期

    在许多情况下,你可能想用今天的日期作为允许的日期范围的开始日期。 要获得当前日期,使用TODAY函数,然后在其上添加所需的天数来计算结束日期。

    例如,为了将数据输入限制在从现在开始的6天内(包括今天在内的7天),我们将使用内置的日期规则和基于公式的标准。

    1. 选择 日期 允许
    2. 选择 之间 数据
    3. 开始日期 框中,输入 =TODAY()
    4. 结束日期 框中,输入 =TODAY() + 6

    以类似的方式,你可以限制用户输入今天之前或之后的日期。 为此,选择以下两种方式之一 不到 大于 数据 框,然后输入 =TODAY() 结束 日期或 开始 日期框,分别为。

    根据当前时间验证时间

    要根据当前时间验证数据,请使用预定义的时间规则和你自己的数据验证公式。

    1. 允许 框,选择 时间 .
    2. 数据 框,选择其中一个 不到 只允许当前时间之前的时间,或 大于 以允许当前时间之后的时间。
    3. 结束时间 开始时间 框(取决于你在上一步选择的标准),输入以下公式之一。
      • 为了验证 日期和时间 基于当前的日期和时间。

        =NOW()

      • 为了验证 时间 基于当前时间。

        =time( hour(now()), minute(now()), second(now() ))

    下面的截图显示了一个只允许大于当前时间的规则。

    自定义Excel数据验证规则不工作

    如果你的基于公式的数据验证规则不能按预期工作,有3个主要的检查点。

    • 数据验证公式是正确的
    • 验证公式没有提到一个空单元格
    • 使用了适当的单元格引用

    检查你的Excel数据验证公式的正确性

    首先,将你的验证公式复制到一些单元格中,确保它不会返回错误,如#N/A、#VALUE或#DIV/0!。

    如果你正在创建一个 自定义规则 ,该公式应分别返回TRUE和FALSE的逻辑值或相当于它们的1和0的值。

    如果你在某一文件中使用一个基于公式的标准 内置规则 (就像我们根据当前时间来验证时间一样),它也可以返回另一个数字值。

    Excel数据验证公式不应提及空单元格

    在许多情况下,如果你选择 忽略空白 在定义规则时,如果你的公式中引用的一个或多个单元格是空的(通常是默认选择),则允许在验证的单元格中使用任何值。

    下面是一个最简单的例子。

    数据验证公式中的绝对和相对单元格引用

    在设置基于公式的Excel验证规则时,请记住,公式中的所有单元格引用都是 相对于左上角的单元格 在选定的范围内。

    如果你为一个以上的单元格创建规则,而你的验证标准又取决于 特定细胞 ,请确保使用绝对的单元格引用(带$符号,如$A$1),否则你的规则将只对第一个单元格正确工作。 为了更好地说明这一点,请考虑以下例子。

    假设你想把D2到D5单元格的数据输入限制在1(最小值)和A2除以B2的结果之间的整数。 因此,你用这个简单的公式计算出最大值 =A2/B2 如下面的截图所示。

    问题是这个看似正确的公式对D3至D5单元格不起作用,因为相对引用是根据行和列的相对位置改变的。 因此,对于D3单元格,公式将变为 =A3/B3 ,而对于D4来说,它将成为 =A4/B4 错了,做数据验证都错了!

    要修复该公式,只需在列和行的参考文献前输入"$"来锁定它们。 =$A$2/$B$2 或者,按F4在不同的参考类型之间进行切换。

    在你想根据每个单元格的标准来验证的情况下,使用不带$符号的相对单元格引用来获得公式,以调整每一行或/和每一列。

    正如你所看到的,没有 "绝对真理",同样的公式可能是正确的或错误的,这取决于情况和你的特定任务。

    这就是如何在Excel中使用自己的公式进行数据验证。 为了获得更多的理解,请随时下载我们下面的样本工作簿,并检查规则设置。 感谢你的阅读,希望下周在我们的博客上见到你。

    供下载的实践工作手册

    Excel数据验证实例(.xlsx文件)。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.