2

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

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

在“表 2”上,我想从MyData匹配标准(即MyData[Name]= John)中选择多个项目。

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

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

4

2 回答 2

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 在第二张表中输入并向下复制,直到没有返回值。

于 2015-07-02T22:09:05.060 回答
1

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

        结构化表查找多个

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))), "")

这使用SMALL形式的AGGREGATE¹ 函数来强制任何不匹配的行出现错误,然后在检索多个匹配项时忽略错误。

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

于 2015-08-15T05:50:36.727 回答