【发布时间】:2019-08-07 19:36:20
【问题描述】:
如何在 Excel 中创建预过滤数据验证下拉列表,同时:
- 不使用 VBA/宏
- 没有或尽可能少的帮助列
- 不要手动创建单独的命名范围,因为基础数据会随着每次刷新而改变(源表是 OData-feed)
- 不要在下拉列表中显示空值
- 目前还不能使用新的 Excel 数组函数,如 FILTER() 或 UNIQUE()
- 按字母顺序对下拉列表进行排序
这个问题很接近,但我无法让the answer 在我的情况下工作。 这个answer uses an array,但是当我使用如图所示的公式时,结果为空:
{=IFERROR(INDEX(Table1[Item];SMALL(IF(Table1[Type]="PT";ROW(1:5);"");ROW(1:5)));"")}
也许可以使用 PowerQuery (DAX) 对 OData 提要进行预过滤,但我想知道如何在常规 Excel 公式中完成此操作。
表格如下所示:
所需的下拉列表显示 Type = "PT" 的每个项目,因此其值为:DEF、KLM 和 RST
【问题讨论】:
-
我正在使用 EXCEL 2016,但找不到满足您所有要求的纯公式解决方案。 EXCEL 365 中有一个
SORT函数,它可能有助于满足您的排序要求。话虽如此,如果您可以使用 帮助表,您可以在其上根据您的 Odata 创建数据透视表,将 Item 列在行标签中并进行排序,按PT过滤,并使用OFFSET 函数动态引用该范围和name 函数,然后在数据验证下拉菜单中使用名称。如果你想看演示,请告诉我:) -
我在 Office365 Pro 中使用 Excel,但我没有 SORT 功能(或 UNIQUE 或 FILTER)。那会让事情变得容易得多。我认为它似乎可以通过在数据验证中使用名称范围以及 INDEX、MATCH 的组合来工作。问题是我把公式放在数据验证中,但我必须先把它放在命名范围内,然后在数据验证列表中使用命名范围。另外,我参考了另一个工作簿,然后公式需要一个 INDEX 才能继续运行。使用 INDEX 和 MATCH 时,列顺序也很重要。使用 PowerQuery 对有帮助的列进行预过滤。
标签: excel validation excel-formula