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 中引入的。它在以前的版本中不可用。
我有一个包含两张纸的 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 中引入的。它在以前的版本中不可用。