从表

时间:2015-07-02 19:25:57

标签: excel if-statement excel-formula array-formulas structured-references

我有一张带有两张纸的Excel文件。在“工作表1”中,我将数据格式化为表格。它有三列:

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

在“工作表2”中,我想从MyData中选择符合条件的多个项目(MyData[Name] = John)。

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

有没有办法进行此选择,但是使用列名而不是硬编码范围?

2 个答案:

答案 0 :(得分:1)

是的,虽然我不确定使用结构化引用的相对引用,所以提供两个数组公式,假设您的选择标准(例如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 + Enter输入第二张,然后向下复制,直到没有返回任何值。

答案 1 :(得分:1)

在构建公式时,通常不需要带有点的所有structured table references并选择表对象。与宏录制器生成的详细代码非常相似,自动生成的表范围引用旨在处理各种情况,并且可能不需要或不需要某些部分。

Structured Table Lookup Multiple

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¹ function形式的SMALL强制对任何不匹配的行执行错误,然后在检索多个匹配项时忽略错误。

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