Return 项来自 table

Return multiple items from a table

我有一个包含两张纸的 Excel 文件。在 "Sheet 1" 中,我的数据格式为 table。它包含三列:

MyData[Name]         MyData[Month]         MyData[sales]

在 "Sheet 2" 上,我想 select 来自 MyData 的多个项目符合条件(即 MyData[Name] = John)。

我发现这个很棒的 video 解释了如何使用结合了 INDEX、SMALL、ROWS 和 IF 的数组公式来执行此操作。问题在于,在视频中,他们使用带有硬编码行号的常规范围。

有没有办法做到这一点 selection,但使用列名而不是硬编码范围?

是的,虽然我不确定使用结构化引用的相对引用,所以提供两个数组公式,假设您的选择标准(例如 John)在第二个 sheet 的 A1 中:

在 B1 中:

=IF(ROWS(A:A1)<=COUNTIF(MyData[[#All],[Name]],$A),INDEX(MyData[[#All],[Month]],SMALL(IF(MyData[[#All],[Name]]=$A,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(B:B1))),"")  

在 C1 中:

 =IF(ROWS(B:B1)<=COUNTIF(MyData[[#All],[Name]],$A),INDEX(MyData[[#All],[sales]],SMALL(IF(MyData[[#All],[Name]]=$A,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(C:C1))),"")  

都在第二个 sheet 中使用 Ctrl+Shift+Enter 输入并向下复制,直到没有返回任何值。

在构建公式时,您通常不需要 table 对象上的点和 select 附带的所有 structured table references。与宏记录器生成的冗长代码非常相似,自动生成的 table 范围引用旨在处理各种情况,有些片段可能不是必需或不需要的。

G4:H4中的标准公式是,

=IFERROR(INDEX(MyData[Month], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F), ROW(1:1))), "")
=IFERROR(INDEX(MyData[Sales], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F), ROW(1:1))), "")

这使用 AGGREGATE¹ function in its SMALL 形式强制对任何不匹配的行产生错误,随后在检索多个匹配项时忽略这些错误。

¹AGGREGATE function 是在 Excel 2010 中引入的。它在以前的版本中不可用。