本文介绍如何利用保护工作表和保护工作簿等功能,限制可编辑区域,设置数据验证,以保证复杂的逻辑关系不会被随意改动。
系列教程索引和配套练习文件,请点这里。
经过前面几番折腾,咱手上这份 Excel 文档的公式引用结构可谓相当复杂。发给同事使用的时候,难免人家因为不清楚背后的逻辑,而在无意中进行一些破坏性的修改,导致失效。
作为一个工具性的 Excel 表格,我们制作的目的是让电脑自动完成识别分类的工作,节省人力。这个过程可以简化为,用户粘贴进来三级分类,复制走一级二级分类;有需要时可以改动分类体系,其余的功能可以暂时丢掉。
打开 Example 6.xlsx,切换至 Tamplate 工作表。
首先为大量的分类工作预留位置,将 A3 和 B3 的公式,向下填充至 A5000 和 B5000 行,这里的数字根据日常工作经验确定。但是发现在三级分类为空的地方,一二级分类出现了 #N/A 的错误,所以在一二级公式中加入三级分类是否为空的判断,修改 A3 处公式如下
=IF(C3="", "", VLOOKUP($C3, CHOOSE({1,2}, INDIRECT(Settings!$B$5):INDIRECT(Settings!$B$8), INDIRECT(Settings!$B$3):INDIRECT(Settings!$B$6)), 2, FALSE))
同理,B3 处公式如下
=IF(C3="", "", VLOOKUP($C3, CHOOSE({1,2}, INDIRECT(Settings!$B$5):INDIRECT(Settings!$B$8), INDIRECT(Settings!$B$4):INDIRECT(Settings!$B$7)), 2, FALSE))
然后再将 A3 和 B3 向下填充至 5000 行即可。
使用保护工作表时,默认情况下除了选取单元格外,对整个工作表的任何编辑是被禁止的,而我们需要用户输入三级分类,所以需要将三级分类的位置设置为 “
允许用户编辑区域 ”,这样在启动保护工作表时,该部分才可以被修改。
切换至 “ 审阅 ” 标签,点击 “ 允许用户编辑区域 ”。
在弹出的退化框中点击 “ 新建 ” 按钮,添加一个可允许编辑的区域。
为该区域设置一个名称;并且选中三级分类所在的区域,这里根据常用工作量来判断,将 C3:C5000 设置为可编辑区域;下方的区域密码为空,这样才可以不受限制的编辑该区域。
单击 “ 确定 ” 按钮,可以看到刚刚设置的区域已经被添加到了允许用户编辑的列表中。再次单击 “ 确定 ” 按钮。
接着,在顶部 Ribbon 工具栏中单击 “ 保护工作表 ” 按钮。
在弹出的对话框中,输入密码,例如 “ amazing ”,下方的权限采用默认设置即可,单击 “ 确定 ” 按钮。
在新弹出的对话框中再次输入一遍刚刚输入的密码,单击 “ 确定 ” 按钮。
至此即完成了对 Tamplate 工作表的保护,除 C3:C5000 区域外其他位置都不可以被编辑改动了。
针对 Settings 工作表,采用类似的处理,保留 tab 参数,也即 C9 位置的编辑权,其余用密码保护起来。如此,用户可以更改 tab 参数来切换分类体系,但是不会轻易将 Settings 中的其余参数搞混淆。
现在的工作簿结构是可以被修改的,也即用户可以增加和删除工作表。如果分类体系相对固定,则可以使用保护工作簿功能,限制对工作表的增加和删除。
单击工具栏中的 “ 保护工作簿 ” 按钮。
在弹出的对话框中输入密码,单击 “ 确定 ” 按钮,然后再次输入密码以确认。
这里的密码可以与刚刚设置的 “ amazing ” 不同,但在本例中,仍然使用刚才的密码。
至此,各个工作表的结构被锁定,无法增加或删除。整个工作簿中唯一能改动的内容即刚刚所设置的两个允许编辑的区域,以及 Genre 和 Hehe 工作表。在日常使用中,只需将三级分类粘贴到 C3:C5000 的位置,即可从 A3:B5000 的位置上复制一级分类和二级分类,非常方便。
一些说明
- 如果不对工作簿进行保护,而又不想用户随意修改 Settings 工作表,可以将其隐藏,右键工作表选项卡单击 “ 隐藏 ” 即可。
- 设置密码只是为了防止意外的修改将现有体系破坏,当工作表的功能需要继续升级或者进行修正时,需要取消保护工作表,以及取消保护工作簿,因而这套密码的目的并非出于保密。我个人推荐将密码作为参数写到 Settings 中,以防遗忘,也能方便他人在头脑清醒的情况下对表格做出修缮。
最后,做一点锦上添花的工作,为三级分类添加数据验证。该操作需要在工作表没有被保护的情况下进行。首先切换到 Tamplate 工作表,单击上方工具栏中的 “ 撤销保护工作表 ” 按钮。
在弹出的对话框中输入密码,并确定。
然后选择 C3:C5000 区域,在 “ 数据 ” 选项卡中单击 “ 数据验证 ” 按钮。
在弹出的对话框中,将 “ 允许 ” 下拉列表设置为 “ 序列 ”,勾选 “ 提供下拉箭头 ” 复选框,并在 “ 公式 ” 处填写如下公式
=OFFSET(INDIRECT(Settings!$B$10), 0, 0, Settings!$B$2)
即,所有符合规定的值必须是所使用的三级分类体系里面的值。
在 “ 出错警告 ” 选项卡中,按如下内容设置,并确定。
这样就给 C3:C5000 区域设置了数据验证,单击其中的一个可以发现在右侧有一个下拉箭头,里面提供了所有合法的三级分类值,点击其中一个即可选择。
当手动输入的三级分类无效时,Excel 会给出如下图所示的警告,提示用户进行修改或确认。
两个说明
- 数据保护只能检测用户输入的数据,对于粘贴到 C3:C5000 区域内的数据,是无能为力的。
- 如果公示太长了不易阅读,可以将公示拆开换行,使用 Alt + Enter 键。Excel 会忽略空格和换行符,所以可以有更直观的公式排版方式,像下面这样。
=IF(
C3 = "",
"",
VLOOKUP(
$C3,
CHOOSE(
{1,2},
INDIRECT(Settings!$B$5):INDIRECT(Settings!$B$8),
INDIRECT(Settings!$B$3):INDIRECT(Settings!$B$6)
),
2,
FALSE
)
)
如此便完成了 Example 6.xlsx。
下一课中,将做一个简要的总结,谈谈心得。