Table of contents
本教程展示了如何在自定义RegexMatch函数的帮助下,在Excel中使用正则表达式进行数据验证。
当涉及到限制用户在Excel工作表中的输入时,数据验证是不可缺少的。 想要在给定的单元格中只允许数字或日期? 或者将文本值限制在特定的长度? 或者不允许超出给定范围的时间? 没问题,所有这些都可以通过预设或自定义验证标准轻松完成。 但如果我想只允许有效的电子邮件地址或符合以下条件的字符串怎么办?这是不可能的。 你说的是Regex? 嗯......这可能行得通。
如何用Regex进行Excel数据验证
遗憾的是,没有一个内置的Excel功能支持正则表达式,数据验证也不例外。 为了能够使用正则表达式验证单元格输入,你需要先创建一个自定义的正则表达式函数。 另一个复杂的问题是,VBA用户定义的函数不能直接提供给数据验证,你需要一个命名公式形式的中介。
考虑到上述情况,让我们简要介绍一下在Excel中使用重码验证数据所需的步骤。
- 创建一个自定义的Regex函数,检查输入值是否符合正则表达式。
- 为你的Regex公式定义一个名称。
- 根据命名的公式,配置一个数据验证规则。
- 将验证设置复制到你想要的许多单元格。
听起来像个计划,让我们试着在实践中实施它吧!
使用自定义正则表达式进行Excel数据验证
这个例子解决了一个非常常见的情况--如何只允许一个特定模式的值。
假设你在工作表中保留了一些SKU代码,并想确保只有符合给定模式的代码才能进入列表。 只要每个SKU由两组用连字符隔开的字符组成,第一组包括3个大写字母,第二组是3个数字,你可以用下面的重码来识别这些值。
样式 : ^[A-Z]{3}-d{3}$
请注意,字符串的开头(^)和结尾($)是锚定的,所以在单元格中不能输入模式以外的字符。
1.添加一个自定义的Regex Match函数
首先在你的工作簿中插入RegExpMatch函数,代码已经由我们的Excel大师写好了,你只需要从上面的链接页面复制它并粘贴到你的VBA编辑器中。
下面是该函数的语法,供你参考。
RegExpMatch(text, pattern, [match_case])在哪里?
- 文本 (required) - 一个源字符串(在我们的环境中--一个已验证的单元格)。
- 样式 (required) - 一个要匹配的正则表达式。
- Match_case (可选) - 匹配类型。 TRUE或省略 - 大小写敏感;FALSE - 大小写不敏感。
提示:如果你是我们的终极套件的用户,那么你可以在Excel中进行Regex数据验证,而不需要在你的工作簿中添加任何VBA代码。 只要利用我们的Regex工具中包含的自定义AblebitsRegexMatch函数。
2.创建一个命名的公式
在目标工作表中,选择A1单元格(不管其内容如何,也不管你实际上要验证哪个单元格),按Ctrl + F3打开名称管理器,并为这个公式定义一个名称。
=RegExpMatch(Sheet1!A1, "^[A-Z]{3}-\d{3}$")
或者你可以在某个单元格(本例中为A2)中输入重组词,并向第二个参数提供$A$2。
=RegExpMatch(Sheet1! A1, Sheet1!$A$2)
为了使公式正确工作,请确保使用相对参照物来表示 文本 参数(A1)和绝对参考值为 模式 ($A$2).
鉴于我们的公式是用来验证SKU号码的,所以我们给它起了相应的名字。 验证_SKU .
重要提示!在定义公式时,请仔细检查 第一个参数指的是当前选定的单元格 例如,如果A1单元格在工作表上被选中,就把A1放在第一个参数中(根据我们的建议);如果B2被选中,就用B2作为第一个参数,如此类推。 只要与当前选中的单元格相匹配,使用哪种特定的引用其实并不重要。
有关分步说明,请参见如何在Excel中制作命名公式。
3.设置数据验证
选择第一个要检查的单元格(在我们的例子中是A5),并根据命名的公式制定一个自定义的数据验证规则。 为此,请执行以下操作。
- 点击 数据 标签> 数据验证 .
- 在 允许 下拉列表,选择 定制 .
- 在相应的框中输入以下公式。
=Validate_SKU
- 取消选择 忽略空白 选项,否则你的规则将无法工作。
另外,你可以键入一个自定义的错误信息,当单元格中输入无效数据时显示。
如果你觉得你需要详细的步骤,请看:如何在Excel中设置自定义数据验证。
4.将数据验证复制到更多单元格
要将验证设置复制到更多的单元格,你需要这样做。
- 选择有数据验证的单元格,并按Ctrl + C复制它。
- 选择你想验证的其他单元格,右键点击它们,点击 粘贴专用 ,并选择 审定 选择。
- 点击 认可 .
更多信息可以在如何复制数据验证中找到。
现在,每当有人试图在任何一个已验证的单元格中输入一个无效的SKU时,就会出现以下警告信息。
用Regex进行电子邮件验证
要执行电子邮件验证,你首先要写一个匹配电子邮件地址的正则表达式。
样式 : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$
关于语法的详细解释,请参见Regex来匹配有效的电子邮件地址。
而现在,通过执行已经熟悉的步骤来指定验证标准。
- 在B2中输入上述重码。
- 选择A1单元格并定义一个名称为 验证_电子邮件 指的是。
=RegExpMatch(Sheet1! A1, Sheet1!$B$2)
- 对于单元格B5,使用下面的公式应用自定义的数据验证。 至关重要的是,该单元格的 忽略空白 选项应取消选择。
=Validate_Email
此外,你可以配置一个自定义的错误信息,提示用户输入一个有效的电子邮件地址。
- 将该规则复制到下面的单元格中。
如果你在验证单元格中输入的电子邮件地址不符合重码模式,将弹出以下警告。
使用正则表达式验证密码
当使用正则表达式进行密码验证时,首先要决定的是你的正则表达式到底应该检查什么。 这里有一些例子,可以让你走上正确的道路。
密码必须至少有6个字符,只能包含字母(大写或小写)和数字。
样式 : ^[A-Za-z0-9]{6,}$
密码必须至少有6个字符,至少包括一个字母和一个数字。
样式 : ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$
密码必须至少有6个字符,至少包括一个大写字母、一个小写字母和一个数字。
样式 : ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d]{6,}$
密码必须至少有6个字符,至少包括一个字母、一个数字和一个特殊字符。
样式 : ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&_-])[A-Za-z\d@$!%*#?&_-]{6,}$
建立了模式后,你可以继续设置数据验证。
- 在C2中输入你的密码重码。
- 选择A1单元格,并创建一个命名公式,名为 验证_密码 :
=RegExpMatch(Sheet1! A1, Sheet1!$C$2)
- 对于单元格C5,用下面的公式创建一个自定义验证规则。 记得取消选择 忽略空白 复选框。
=Validate_Password
- 将该规则复制到你想要的多个单元格。
现在,你可以安全地将新的密码添加到列表中。 如果输入的字符串不符合重码,下面的警告将提醒你接受什么样的值。
Regex数据验证不工作
如果Regex数据验证在你的Excel中不起作用,很可能是由于以下原因之一。
缺少正则表达式匹配函数
在应用数据验证之前,一定要在工作簿中插入 RegExpMatch 函数的代码。
正则表达式不正确
为了确保你的正则表达式按预期工作,你可以在一些单元格中输入一个RegExpMatch公式并检查结果。 更多信息,请参见Excel正则表达式匹配与实例。
为了分析和调试你的正则表达式,你可以使用免费的在线正则测试服务,如RegEx101或RegExr。
命名错误的公式
数据验证失败的一个非常常见的原因是Regex命名的公式指向了错误的单元格。 在所有的例子中,我们建议定义一个指向A1的公式。
=RegExpMatch(A1, regex)
这只有在细胞 A1是活动的 当定义一个名称和一个 相对参考 (没有$符号)被使用。
我们的想法是,公式中指定的相对引用(A1)将根据验证单元格的相对位置自动改变。 换句话说,选择A1单元格只是为了方便和一致。 事实上,你可以选择B1单元格并引用B1,选择C1单元格并引用C1,以此类推。 关键是 引用的单元格 应该是 活性细胞 .
要检查你的命名公式是否正确,选择工作表中的任何单元格,打开名称管理器,看看公式指向哪个单元格。 如果它指向当前选定的单元格,那么公式就是正确的。 否则,你应该改变第一个参数中的引用。
在下面的截图中,单元格A7被选中,这意味着命名公式的第一个参数应该是A7。 第二个参数($A$2)指的是重码--这个引用应该保持不变,所以它被$符号锁定。
选择了忽略空白选项
当设置一个自定义的数据验证规则时,重要的是取消选择 忽略空白 否则,由于以下原因,该规则将无法工作。
如果没有找到匹配,RegExpMatch函数返回FALSE。 使用 忽略空白 选项,FALSE等同于空白,并被忽略。
另一个解决方案是明确指出该公式应该返回 "真"。
=RegExpMatch(...)=TRUE
这就是如何在Excel中使用正则表达式进行数据验证的方法。 感谢你的阅读,期待下周在我们的博客上见到你!
供下载的实践工作手册
雷格斯数据验证实例(.xlsm文件)。