我尝试为Excel表格中的列创建数据验证。验证需要引用表中的另一列。
有2列," f1"和" f2"。每列可以包含" Y"或" N"。
使用单元格寻址工作正常:
我的问题是:如何使用结构化表格寻址制作验证公式?
结构化参考的优秀概述:http://peltiertech.com/structured-referencing-excel-tables/
对列" f2"进行所需的验证是:
=Table1[f1]&Table1[f2]<>"YN"
此图片显示了表格旁边的表格和验证公式,显示了预期的验证结果:
我将上述公式添加到数据验证中 - &gt;自定义,用于&#34; f2&#34;中的单元格。失败 - 它拒绝有效的条目(即该公式计算为True的条目)。
然后,我尝试使用该公式创建一个定义的名称,基于这篇文章,并使用该名称作为我的自定义验证。那也失败了。 https://superuser.com/a/480660
然后我尝试在我定义的名称中使用INDIRECT,基于这篇文章: http://www.get-digital-help.com/2012/10/15/how-to-use-a-table-name-in-data-validation-lists-and-conditional-formatting-formulas/
但有效的参赛作品仍然被拒绝。
怎么做?
我认为结构化引用在验证公式中失败的原因是因为TableName [FieldName]评估整个列,而不仅仅是当前行。因此,我正在探索将验证公式限制为当前行的方法。
到目前为止我想到了这些方法:
我认为在结构化引用中,当前行用@标识。
所以,公式是:
Table1[@f1] & Table1[@f2]<>"YN"
或
Table1[[@[f1]] & Table1[@[f2]]<>"YN"
这实际上适用于工作表,但仍不能作为验证公式。
我的下一个尝试是使用INDEX来拉动当前行。公式是:
INDEX(Table1[f1] & Table1[f2],1,0)
同样,这适用于工作表,但不是验证公式。不过,我认为这是一个很有希望的方向!
答案 0 :(得分:1)
INDIRECT
。如果需要,您可以在工作表上构建公式,并获取地址自动完成。 <强>步骤强>
rngY
:Y rngYN
:Y,N =IF(Table1[@Col1]="Y", rngY, rngYN)
=validFmla
<强>结果强>
请注意,我在此图片的工作表上显示验证公式仅用于说明目的 - 它通常不会输入到此解决方案的工作表中。
奇怪的是,这可以使用选择列表,而原始问题中的公式不起作用,但Excel以神秘的方式工作。
答案 1 :(得分:0)
我不确定这是否正是您所寻找的。您可以使用INDIRECT公式在验证中引用表。
=INDIRECT("TableName[ColumnName]")
如果选择了List验证,这将根据列中的数据验证数据。
答案 2 :(得分:0)