![Excel 验证:如何防止工作簿内全局重复条目?](https://linux22.com/image/1621387/Excel%20%E9%AA%8C%E8%AF%81%EF%BC%9A%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E5%B7%A5%E4%BD%9C%E7%B0%BF%E5%86%85%E5%85%A8%E5%B1%80%E9%87%8D%E5%A4%8D%E6%9D%A1%E7%9B%AE%EF%BC%9F.png)
我想防止在同一工作簿中跨多个工作表重复分配代码。这些条目将手动分配和输入,理想情况下,我希望数据验证出现错误消息并在输入尝试时停止。我正在寻找一种解决方案不涉及 VB或者.xlsm
。
我参考了多个在线资料——以及这SU 帖子 — 但我发现的一切似乎都是在单个工作表参考范围内使用的。
我尝试过自己进行实验,但在尝试引用位于多张工作表上的多个范围时,无法使验证工作。然后我想使用一张工作Data
表,将工作表输入范围内的所有条目汇总到一个表中,并对该范围应用数据验证。不幸的是,数据验证似乎不会在初始输入时触发;只有当您刷新单元格(例如,F2)时Enter,才会出现错误消息。
如有任何关于如何实现这一目标的建议,我们将不胜感激,谢谢!
答案1
您可以使用 Contextures 文章中列出的技术https://www.contextures.com/xlDataVal03.html
在 A 列的辅助表中建立一个值列表
对于 B 列中计算使用值的公式,您可以使用一个简单的 OR 语句,该语句查看所有使用相同 DV 列表的工作表中所有单元格,例如
=OR(Sheet2!$D$3=A2,Sheet2!$H$5=A2,Sheet3!$B$6=A2,Sheet3!$C$13=A2)+0
任何能够为每个值提供可靠的 1 或 0 的公式都可以。
如果您有 Office 365,则可以用更简单的 Filter() 函数替换 C 列的 Index 函数(文章中建议)。
=FILTER(A2:A8,B2:B8=0)
然后使用公式构建命名范围
=OFFSET(Sheet1!$C$1,1,0,COUNTA(Sheet1!$C:$C),1)
并将该范围名称分配给 DV 单元格作为列表源。
在屏幕截图中,工作表 3 中的一个单元格包含值“AA”,工作表 2 中的一个单元格包含值“FF”。因此,这两个值不再可在 DV 下拉列表中选择。