从表中返回多个项目
我有两张工作表的Excel文件。 在“工作表1”中,我将数据格式化为表格。 它有三栏:
MyData[Name] MyData[Month] MyData[sales]
在“工作表2”我想从MyData
中select匹配条件( MyData[Name]
= John
)的多个项目。
我已经find了这个伟大的video ,解释了如何做到这一点,与一个数组公式,结合了INDEX,SMALL,ROWS和IFs。 问题是,在video中,他们使用硬编码行号的常规范围。
有没有办法做这个select,而是使用列名而不是硬编码的范围?
是的,虽然我不确定使用结构化引用的相对引用,但是假设您的select标准(例如John
)位于第二个表的A1中,请提供两个数组公式:
在B1中:
=IF(ROWS(A$1:A1)<=COUNTIF(MyData[[#All],[Name]],$A$1),INDEX(MyData[[#All],[Month]],SMALL(IF(MyData[[#All],[Name]]=$A$1,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(B$1:B1))),"")
在C1中:
=IF(ROWS(B$1:B1)<=COUNTIF(MyData[[#All],[Name]],$A$1),INDEX(MyData[[#All],[sales]],SMALL(IF(MyData[[#All],[Name]]=$A$1,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(C$1:C1))),"")
都使用Ctrl + Shift + Enterinput到第二张表格中,并向下复制,直到没有返回值。
在构build公式时,通常不需要随点附带的所有结构化表格引用以及在表格对象上进行select。 就像macroslogging器产生的详细代码一样,自动生成的表格范围参考意味着处理各种情况,并且一些片段可能不是必需的或期望的。
G4:H4的标准公式是,
=IFERROR(INDEX(MyData[Month], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F$4), ROW(1:1))), "") =IFERROR(INDEX(MyData[Sales], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F$4), ROW(1:1))), "")
这使用小型窗体中的AGGREGATE¹函数来强制任何不匹配行上的错误,并在检索多个匹配项时忽略错误。
¹AGGREGATEfunction是在Excel 2010中引入的。它在以前的版本中不可用。