0

我有一个基于查询的数据表-> tblPrimaryProducts

tblPrimaryProducts 有很多列,其中一些是 Category、SubCategory 和 Item。

如果我要对类别使用过滤器,我当然可以看到该类别中的子类别和项目。同样,如果我依次对 SubCategory 应用过滤器,我会看到该特定 Category + SubCategory 选择中的项目列表。最终,这是我试图实现的数据验证的目标。

有一个数据条目表 -> tblPackages

tblPackages 有很多字段,但重要的是上面列出的三个需要通过数据验证以受控方式实现,以便每一行都可以正确选择 Category + SubCategory + Item

我无法将数据表更改为数组或简单(或动态)命名范围,因为它将被刷新任意次数并且列位置可能会改变。这意味着我必须对两个表都使用基于表的命名系统。

到目前为止,我使用 XLOOKUP 的数据验证公式如下:

XLOOKUP([@[Primary Category]] & [@[Primary SubCategory]], tblPrimaryProducts[Category] & tblPrimaryProducts[SubCategory], tblPrimaryProducts[Item],,0)

[@[Primary Category]] 和 [@[Primary SubCategory]] 是 tblPackages 数据条目表中的字段。列出的其他字段来自 tblPrimaryProducts。到目前为止,我已经手动输入数据来测试这一点。

在 XL 公式窗口(您可以在填写字段时“查看”公式正在执行的操作)中,这似乎有效并提供了预期的输出。

当我尝试将其实现为数据验证时,它会抱怨公式中的错误。如果我在开头放置一个 INDIRECT,我会弹出语法错误。我过去曾遇到过 INDIRECT 的问题,这些问题已通过仔细使用引号得到解决。我似乎无法在这里找到一种方法来做到这一点。

有人对我如何基于数据表(而不是数组)或在这种情况下基于表的查询实现一些数据验证有任何想法吗?在正常情况下,我会使用动态命名范围,但在这里我不能。

非常感谢任何帮助或想法

4

1 回答 1

0

在 Office365 中,以下公式将为您提供满足“类别”和“子类别”条件的“项目”列表。

=FILTER(tblPrimaryProducts[Item],(tblPrimaryProducts[Category]=[@[Primary Category]])*(tblPrimaryProducts[Subcategory]=[@[Primary Subcategory]]),"")

它会给你一个#SPILL!如果插入到表中,则返回错误,并返回与这两个条件匹配的多个项目。您可能需要重新设计输出表。

如果您打算仅显示过滤后的值,则可以使用两个带有类别和子类别列表的下拉列表。然后过滤器功能可以使用这些单元格从源数据中过滤项目并显示为下面的列表。

于 2021-06-24T06:59:19.827 回答