如何在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结果:

PIC1

我将上面的公式添加到数据有效性 – >自定义中,对于“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警报。

脚步

  1. 在表格对象之外创build两个命名范围(如果需要,可以在单独的隐藏表格中):
    • rngY :Y
    • rngYN :Y,N
  2. 创build以下定义的名称(注意,这个公式不应该被input到工作表中;它只在定义名称的定义中)。
    • “validFmla”: =IF(Table1[@Col1]="Y", rngY, rngYN)
  3. 在Col2的数据单元格中创build以下数据validation。
    • 列表typesvalidation
    • 来源: =validFmla
    • 可选:取消选中“In-cell dropdown”
  4. 完成。

在这里输入图像说明

结果

  • 现在,Col1包含“N”,您可以在Col2中input“Y”或“N”。
  • 如果Col1包含“Y”,则只能在Col2中input“Y”。

在这里输入图像说明

请注意,我在本图中的工作表上显示validation公式,仅供参考 – 通常不会将此公式input到此解决scheme的工作表中。

奇怪的是,这使用一个select列表,而原始问题中的公式不起作用,但Excel以神秘的方式工作。

我不确定这是不是你正在寻找的。 您可以使用INDIRECT公式在validation中引用表。

 =INDIRECT("TableName[ColumnName]") 

这将validation数据基于列中的数据,如果select列表validation。