如何在Excel数据validation中使用结构化表格引用?
我正在尝试为Excel表中的列创build数据validation。 validation需要引用表中的另一列。
有2列“f1”和“f2”。 每列可以包含“Y”或“N”。
使用单元格寻址工作正常:
我的问题是:如何使用结构化表格寻址来制定validation公式?
结构化参考的优秀概述: http : //peltiertech.com/structured-referencing-excel-tables/
列“f2”所需的validation是:
=Table1[f1]&Table1[f2]<>"YN"
此图显示了上面input的表格和validation公式,显示了预期的validation结果:
我将上面的公式添加到数据有效性 – >自定义中,对于“f2”中的单元格。 这失败了,它拒绝有效的条目(即公式评估为True的条目)。
然后,我尝试使用该公式创build一个定义的名称,并根据这个post使用该名称作为我的自定义validation。 这也失败了。 https://superuser.com/a/480660
然后,我尝试使用我的定义名称中的INDIRECT,基于此职位: http : //www.get-digital-help.com/2012/10/15/how-to-use-a-table-name-in-data -validation-名单-和条件格式化,公式/
但有效的条目仍然被拒绝。
这个怎么做?
我认为在validation公式中结构引用失败的原因是因为TableName [FieldName]计算为整个列,而不是当前行。 因此,我正在探索将validation公式限制在当前行的方法。
到目前为止,我想到了这些方法:
我认为在结构化引用中,当前行用@标识。
所以,公式会是:
Table1[@f1] & Table1[@f2]<>"YN"
要么
Table1[[@[f1]] & Table1[@[f2]]<>"YN"
这实际上工作表上,但仍然不作为validation公式。
我下一个尝试是使用INDEX来拉当前行。 公式是:
INDEX(Table1[f1] & Table1[f2],1,0)
再次,这是工作表上,但不作为validation公式。 不过,我认为这是一个有希望的方向!
- 解决scheme是使用查找列表进行validation。
- 此解决scheme使用实际寻址,并不需要
INDIRECT
。 如果需要,您可以在工作表上构build公式,并获取地址自动完成。 - 该解决scheme使用结构化的表引用。
- 正如在问题中,我们有一个有2列(在这个答案中命名为“Col1”和“Col2”)的表对象,用户可以在其中任一列中input“Y”或“N”。
- 在问题中,我们将接受除 “YN” 之外的所有组合,这将引发标准的数据validation警报。
脚步
- 在表格对象之外创build两个命名范围(如果需要,可以在单独的隐藏表格中):
-
rngY
:Y -
rngYN
:Y,N
-
- 创build以下定义的名称(注意,这个公式不应该被input到工作表中;它只在定义名称的定义中)。
- “validFmla”:
=IF(Table1[@Col1]="Y", rngY, rngYN)
- “validFmla”:
- 在Col2的数据单元格中创build以下数据validation。
- 列表typesvalidation
- 来源:
=validFmla
- 可选:取消选中“In-cell dropdown”
- 完成。
结果
- 现在,Col1包含“N”,您可以在Col2中input“Y”或“N”。
- 如果Col1包含“Y”,则只能在Col2中input“Y”。
请注意,我在本图中的工作表上显示validation公式,仅供参考 – 通常不会将此公式input到此解决scheme的工作表中。
奇怪的是,这使用一个select列表,而原始问题中的公式不起作用,但Excel以神秘的方式工作。
我不确定这是不是你正在寻找的。 您可以使用INDIRECT公式在validation中引用表。
=INDIRECT("TableName[ColumnName]")
这将validation数据基于列中的数据,如果select列表validation。