从表中返回多个项目

我有两张工作表的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中引入的。它在以前的版本中不可用。