跳到主要内容

数据验证做下拉菜单与联动

下拉菜单能挡住 90% 的录入错误:部门名统一、状态固定枚举、金额只能填合规区间。核心功能是"数据 → 数据验证"(老版本叫数据有效性)。

一、最基础的序列下拉​

选中要限制的区域 → 数据验证 → 允许"序列" → 来源填:

已下单,已发货,已完成,已取消

注意是英文逗号分隔。中文逗号会被当成分隔符吗?不会——中文逗号会让整串变成一个选项,这是最常见的失败原因。

选项少(5 个以内)直接内联写;多了就引用区域,见下一节。

二、引用其他区域做选项​

来源写:

=$J$2:$J$20

或对区域起个名字(公式 → 名称管理器),来源写 =状态列表,公式里可读性好很多。

引用的区域中间不能有空行,否则下拉里会出现空项。要自动扩展,把源区域转成智能表格(Ctrl+T),引用写成 =表1[状态],新增行会自动纳入。

三、二级联动下拉​

部门 → 岗位,选完部门后岗位列表跟着变。

第一步:建对照区,每个部门一列,列标题是部门名:

ABC
技术部市场部财务部
后端策划会计
前端推广出纳

第二步:给每列起名字。选中 B 列数据区(不含标题),在名称框输入 市场部 回车。或者批量:选中整个对照区(含标题),公式 → 根据所选内容创建 → 首行。

第三步:部门列的下拉来源写对照区的首行:

=$A$1:$C$1

第四步:岗位列的下拉来源写间接引用:

=INDIRECT(E2)

E2 是同行已选的部门名。INDIRECT 把文本转成区域引用,所以名称里不能有空格和特殊字符,否则报 #REF!。部门名带空格的话,用 SUBSTITUTE 换成下划线再匹配名称。

四、限制数字与日期范围​

允许"整数",介于 1 和 9999 之间,防止手误多打一个 0:

最小值:1 最大值:9999

日期区间限制同理,选"日期"类型,起止填具体日期或 =TODAY()。

文本长度限制适合手机号、身份证号的位数校验:

允许:文本长度 等于:11

五、自定义公式验证​

最灵活的一档。想限制"编号必须以 YW 开头且长度 8":

=AND(LEFT(A2,2)="YW",LEN(A2)=8)

写好之后用区域第一个单元格的地址(相对引用),验证会自动套用到整个区域。

想禁止录入重复值:

=COUNTIF($A:$A,A2)=1

注意 $A:$A 整列引用的性能开销,行数多时改成 $A$2:$A$5000。

六、三个输入提示与错误警告​

验证对话框有三个页签,别只填第一个:

  • 输入信息:选中单元格时弹出的提示,告诉人该填什么格式。比事后报错友好。
  • 出错警告:填错时的处理。样式选"停止"就完全禁止,选"警告"允许强行确认。
  • 忽略空值:默认勾选,意味着空单元格能通过验证。要禁止留空,取消勾选并另加 =LEN(A2)>0 规则。

七、复制验证到其他单元格​

最容易出错的点:数据验证会跟着复制粘贴一起走,但引用可能被相对平移。

保险做法:

  1. 复制带验证的单元格;
  2. 选中目标区域;
  3. 选择性粘贴 → 验证。

这样只复制验证规则,不动内容,也不会破坏目标区域已有格式。

八、常见坑​

现象原因处理
下拉里只有一个长条选项用了中文逗号改英文逗号
下拉出现空白项源区域有空单元格缩小区域或用智能表格
INDIRECT 报 #REF!名称含空格/数字开头名称改规范
粘贴数据后验证失效直接粘了值选择性粘贴"验证"
复制行后规则错位相对引用平移关键引用加 $

九、速查​

需求设置
固定选项序列 + 英文逗号分隔
引用区域序列 + =$J$2:$J$20
二级联动对照区 + 名称 + INDIRECT
数值范围整数 + 最小/最大
禁止重复=COUNTIF($A:$A,A2)=1

数据验证只防君子不防小人——粘贴进来的数据会绕过验证。真正要强约束,得靠数据库或表单工具。但作为日常办公,它已经能省掉大部分返工。