数据约束
...大约 3 分钟
参考文章data-validation
整数约束
选中目标单元格,然后点击在数据选项卡中的数据工具组的数据验证按钮,按下图填写信息:
这时,单元格就只能输入1到10的整数,否则会报错。
为了提示用户输入要求,我们可以在上图的弹窗的输入信息选项卡中填写提示信息:
这时,当选中该单元格时,提示信息会显示出来:
我们尝试输入不符合要求的数值,会得到以下错误警告:
显然这个错误提示不够明确,我们可以自定义错误提示,让用户更易于理解:
这时,我们再输入不符合要求的数值时,会发现错误警告已经按要求改变了:
到这里,基本的数据验证的流程我们都过了一遍了,所有数据类型的约束都是这样设置的。
日期约束
我们只要把允许的值设置为日期就可以了,值得注意的是范围值可以使用公式,请看下图:
自定义约束
下面展示的是用自定义约束实现的强制输入工作日的星期表示。
具体公式是:
=AND(WEEKDAY(B1)<>1, WEEKDAY(B1)<>7) // B1是目标单元格
序列约束
序列约束可以展示下拉选项供用户选择,具体步骤如下:
- 新建/打开一个工作表Sheet2,在A1列依次输入选项:

- 回到Sheet1,在目标单元格(假设是B1)中添加序列约束:

这样就配置完成了。不过有时我们只是希望给出常用选项,并不强制用户输入序列中的值,这时我们通过可以忽略错误警告来实现。
补充
- 当我们需要增加选项时,不需要再次在数据验证弹窗更改,只要在选项之间插入选项即可,软件会自动更改范围。

注意的是,不能在原选项下方插入,一定要在他们之间插入选项。 - 我们也可以通过以下公式实现:
=OFFSET(Sheet2!A1, 0, 0, COUNTA(Sheet2!A1:A1), 1)
联动序列约束
这个功能其实就是多级联动菜单的功能,这里只介绍二级联动序列的实现。
假定我们现在要实现省市的联动序列,我们可以通过一下步骤实现:
- 在Sheet2表的A列依次列出所有省的选项,从B列开始每列依次单独列出各省所有地级市的选项
- 为每个省名创建命名范围(named range),名称就是该省选项名,值就是对应地级市所在范围
- 回到Sheet1,在A1输入“省”文本;在B1创建省的序列约束,值为
=OFFSET(Sheet2!A1, 0, 0, COUNTA(Sheet2!A1:A1), 1)
- 在C1输入“市”文本;在D1创建市的序列约束,值为
=INDIRECT(B2)
这样,一个二级联动下拉菜单就完成了。
美中不足的是选项没有默认值(显示为空值),每次一个菜单选项改变时,相关的其它菜单选项不会相应改变。为了实现这一点,就要使用VBA针对单元格变换事件进行相应的逻辑处理。
现在,我们在Sheet1表中新增一个宏,具体内容如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Range("$D$1").Value = ThisWorkbook.Names(Range("$B$1").Value).RefersToRange.Cells(1, 1).Value
End If
End Sub
这时,更改省选项时,对应的地级市选项会自动设置为该省的第一个地级市选项。
Powered by Waline v2.15.7
