我有两列标题分别为“发送”和“接收”,我正在向电子表格添加数据验证层。
单元格已经具有数据验证设置,仅允许选择列表。
我想添加另一个层来检查这一点,sending != receiving
因为这没有意义。
我想保持这个电子表格宏免费,因为它已经处于这种状态,并且我认为不值得增加“启用内容”和不同扩展的复杂性。
有几个问题:
- 是否可以在 Excel 中添加两层“数据验证”,我只看到可以添加一层
- 即使仅使用“一层”,我也没有看到检查值是否不等于另一个值的选项,但我想自定义可能有办法做到这一点。
答案1
动态尺寸合格验证选择列表
- 验证选项列表动态地增大和缩小。
- 从后续选项列表中排除选项列表中选定的值。
- 两个选择列表互相排斥其他选择列表的值。
- 两个公式:
- 帮助列验证选择列表
- 数据验证列表来源
“接收”(已打开)选择列表没有选项d可用,
因为它已被“发送”选择列表选中。
辅助列;动态验证选择列表公式:
=INDEX($I$34:$I$38,AGGREGATE(15,6, ROW($I$34:$I$38)/($I$34:$I$38 <> $K$42),ROW($A1)) - ROW($I$34)+1)
- 动态生成的验证选择列表(辅助列)。
- 粘贴至J34如图所示;“发送验证”范围的第一个单元格。
- 不是 CSE,只需将副本拖至原始选择列表的长度即可。
$I$34:$I$38
通用(原始)验证列表范围。$K$42
排除的选择列表单元格(其他选择列表单元格具有此处不可用的值)。- 重复第二、(第三、第四……)验证选项列表
- 选择列表
$K$42
使用此验证列表。 - 对于此验证选项列表公式,
$K$42
使用创建的第一个辅助列更改为选项列表:$J$42
在图像中。
- 选择列表
- 用于排除其他单元格值的 Mod。
($I$34:$I$38 <> $K$42)
→(($I$34:$I$38 <> $K$42)*($I$34:$I$38 <> $Z$42))
数据验证列表源公式:
=OFFSET($J$34,0,0,ROWS($J$34:$J$38)-SUMPRODUCT(--ISERROR($J$34:$J$38)),1)
- 动态范围
- 粘贴到第一个公式生成的选择列表的验证源文本框中。
$J$42
图像中的第一个选择列表(从第二个验证选择列表中排除)$K$42
图像中的第二个选择列表(从第一个验证选择列表中排除)
$J$34
粘贴辅助列验证选择列表公式的第一个单元格。$J$34:$J$38
包含辅助列选项列表公式的所有单元格的范围。
关于这些公式的更多注释:
- 当剪切和粘贴它们引用的单元格时,辅助列公式和验证源地址引用都将正确修改。
- 辅助列公式中除一个引用之外的所有引用都是绝对的,因此它们可以正确拖动/复制。
- 当开始一个新公式时,请确保的相对行地址为
ROW($A1)
1。 - 数据验证列表源公式不需要绝对地址。
答案2
我最终使用了“级联数据验证”。 尽管Ted D. 的回答可能“更干净”,并且可能是较大列表的更好选择,我发现我的方法更简单,而且我有一个小列表,所以它有效。
以下是我所做工作的极其简化的版本:
- 我创建了选项的“主要列表”,然后必须为每个选项创建一个包含剩余选项的新列表。
- 每个辅助列表的标题都必须是主列表中其选项的名称。
也就是说,在我的例子中,我有一个名为“LABs”的列表,然后有两个分别名为“A”和“B”的列表。
- 然后我将第一个数据验证部分设置为“列表”-->
=LABs
- 第二个单元格数据验证设置为列表 -->
=INDIRECT(F2
)(第一个数据验证单元格) - 我为整整 2 列设置了此项,它将逻辑沿列向下传递,以直接检查左侧的单元格
- 请参阅 URL 以获取另一个示例
专业提示:然后我通过将文本变为白色来隐藏列表!
对我来说最难理解的部分是“从属列表的名称必须与主列表中的匹配条目完全相同”。